# Canada Vehicle Recalls (Transport Canada Open Data) (`agentumgroup/ca-vehicle-recalls`) Actor

Vehicle safety recalls from Transport Canada's official open-data registry — last 60 days or full history. Filter by make, category, date range, and keywords. Official data, no scraping.

- **URL**: https://apify.com/agentumgroup/ca-vehicle-recalls.md
- **Developed by:** [AgentumGroup](https://apify.com/agentumgroup) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Canada Vehicle Recalls (Transport Canada Open Data)

Extract vehicle safety recall records from **Transport Canada's** official open-data registry — updated daily, zero scraping required.

### What it does

Fetches the Government of Canada's Transport Canada Vehicle Recall Database (VRDB) — an authoritative, machine-readable CSV published under the Open Government Licence — and returns structured recall records filtered by date range, vehicle make, category, and keywords.

Two data modes are available:

- **`recent60`** (default) — last 60 days of recalls (~23,000 rows), refreshed daily. Fast and lightweight.
- **`full`** — complete historical recall database (~100 MB). Use this for research, compliance audits, or building a persistent local database.

Why Transport Canada data? It is the **official federal record** of all vehicle safety recalls issued in Canada. It is published directly by the regulator (Transport Canada), updated daily, and available under a permissive open licence that allows copying, redistribution, and commercial use with attribution. No proxies, no scraping, no fragile HTML parsing.

### Use cases

- **Automotive dealers and fleet managers** — monitor recalls affecting vehicles in your inventory or fleet; trigger service campaigns before customers report issues.
- **Car buying services and used-car platforms** — enrich vehicle listings with outstanding recall status to build buyer trust and reduce liability.
- **AI agents and chatbots** — answer "is my car recalled?" questions with real-time official data.
- **Insurance companies and vehicle telematics firms** — assess recall exposure across insured vehicles; flag high-risk makes and systems.
- **Consumer safety advocates and journalists** — track newly issued recalls, identify systemic patterns (e.g., airbag failures across manufacturers), and monitor recall completion rates.
- **Regulatory compliance teams** — maintain an up-to-date local database of Canadian recall activity for audit purposes.

### Data source & licence

- **Source:** Transport Canada, Government of Canada
- **Dataset:** [Transport Canada Vehicle Recall Database](https://open.canada.ca/data/en/dataset/1991fef6-9dfe-40e2-a0c6-19c60ddf4a02)
- **60-day CSV:** `https://opendatatc.tc.canada.ca/vrdb_60days_daily.csv`
- **Full history CSV:** `https://opendatatc.tc.canada.ca/vrdb_full_monthly.csv`
- **Licence:** [Open Government Licence – Canada](https://open.canada.ca/en/open-government-licence-canada) — permits copying, redistribution, and commercial use with attribution.
- **Update frequency:** Daily (60-day file); Monthly (full history file)

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `"recent60"` | `"recent60"` fetches the last 60 days (fast). `"full"` fetches the complete historical database (large, may take minutes). |
| `recalledAfter` | date | `null` | Only recalls with a recall date on or after this date (YYYY-MM-DD). |
| `recalledBefore` | date | `null` | Only recalls with a recall date on or before this date. |
| `makes` | string\[] | `[]` (all) | Filter to specific vehicle makes, case-insensitive (e.g. `["FORD", "HONDA"]`). |
| `categories` | string\[] | `[]` (all) | Filter to specific vehicle categories (e.g. `["SUV", "Passenger Car", "Light Truck"]`). |
| `keywords` | string | `null` | Comma-separated keywords matched against recall description and system type (case-insensitive). Example: `"airbag, fire risk"`. |
| `maxRecords` | integer | `500` | Maximum number of recall records to return (1–50,000). |

#### Example input — recent Ford and Honda recalls

```json
{
  "mode": "recent60",
  "makes": ["FORD", "HONDA"],
  "maxRecords": 200
}
```

#### Example input — SUV airbag recalls in the last year

```json
{
  "mode": "full",
  "recalledAfter": "2025-07-01",
  "categories": ["SUV"],
  "keywords": "airbag",
  "maxRecords": 1000
}
```

#### Example input — smoke test (10 most recent recalls)

```json
{
  "maxRecords": 10
}
```

### Output

Records are sorted by recall date descending (newest first), then by last updated date descending. Each dataset item:

```json
{
  "recallNumber": "2026-257",
  "year": 2024,
  "manufacturerRecallNo": "24S06",
  "category": "SUV",
  "make": "FORD",
  "model": "EXPEDITION",
  "unitsAffected": 2479,
  "systemType": "Seats And Restraints",
  "notificationType": "Safety Recall",
  "recallDate": "2024-02-11",
  "lastUpdatedDate": "2026-06-11",
  "manufacturer": "FORD",
  "description": "On certain vehicles, the second-row seat track may not have been properly welded, which could allow the seat to move unexpectedly in a crash, increasing the risk of injury.",
  "sourceUrl": "https://tc.canada.ca/en/recall-alert/transport-canada-recall?number=2026-257",
  "fetchedAt": "2026-07-20T12:00:00.000Z"
}
```

A `RUN_SUMMARY` key-value store record is also written with run metadata:

```json
{
  "fetchedAt": "2026-07-20T12:00:00.000Z",
  "input": { "mode": "recent60", "maxRecords": 500 },
  "totalRecords": 312,
  "source": "https://opendatatc.tc.canada.ca/vrdb_60days_daily.csv"
}
```

### Legality

This Actor fetches data from the Government of Canada's **Open Government Portal** under the **[Open Government Licence – Canada](https://open.canada.ca/en/open-government-licence-canada)**. The licence permits you to:

- Copy, modify, publish, translate, adapt, and distribute the information.
- Use it for commercial purposes.

Attribution required: "Contains information licensed under the Open Government Licence – Canada."

No login, API key, or web scraping is involved. The Actor makes plain HTTP GET requests to publicly available CSV files.

### Limitations

- **Canada only.** This dataset covers recalls issued under Canadian law. US NHTSA recalls are a separate dataset.
- **English fields only.** The CSV contains both English and French fields; this Actor uses English columns (`CATEGORY_ETXT`, `SYSTEM_TYPE_ETXT`, `COMMENT_ETXT`).
- **`full` mode is large.** The full history CSV is approximately 100 MB uncompressed and may take several minutes to stream and process, depending on filters applied. Use `recent60` for routine monitoring.
- **No recall completion data.** The database records the recall issuance and affected units, not how many vehicles have been remedied.

### Attribution

Contains information licensed under the [Open Government Licence – Canada](https://open.canada.ca/en/open-government-licence-canada).

# Actor input Schema

## `mode` (type: `string`):

Which Transport Canada dataset to fetch. "recent60" fetches only the last 60 days of recalls (fast, ~23,000 rows, updated daily). "full" fetches the complete historical database (~100 MB, may take several minutes).

## `recalledAfter` (type: `string`):

Only include recalls with a RECALL\_DATE\_DTE on or after this date. Leave blank for no lower bound.

## `recalledBefore` (type: `string`):

Only include recalls with a RECALL\_DATE\_DTE on or before this date. Leave blank for no upper bound.

## `makes` (type: `array`):

Limit results to specific vehicle makes (case-insensitive). Example: \["FORD", "HONDA"]. Leave empty for all makes.

## `categories` (type: `array`):

Limit results to specific vehicle categories (case-insensitive). Example: \["SUV", "Passenger Car", "Light Truck", "Motorcycle"]. Leave empty for all categories.

## `keywords` (type: `string`):

Optional comma-separated keywords matched against the recall description (COMMENT\_ETXT) and system type (SYSTEM\_TYPE\_ETXT), case-insensitive. Example: "airbag, seatbelt, fire".

## `maxRecords` (type: `integer`):

Maximum number of recall records to return.

## Actor input object example

```json
{
  "mode": "recent60",
  "makes": [],
  "categories": [],
  "maxRecords": 500
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "recent60",
    "makes": [],
    "categories": [],
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentumgroup/ca-vehicle-recalls").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "recent60",
    "makes": [],
    "categories": [],
    "maxRecords": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("agentumgroup/ca-vehicle-recalls").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "recent60",
  "makes": [],
  "categories": [],
  "maxRecords": 500
}' |
apify call agentumgroup/ca-vehicle-recalls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=agentumgroup/ca-vehicle-recalls",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2qT40K4tJ08OPbWbk/builds/MI8xtthnrnObQqbF8/openapi.json
