# 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Canada Vehicle Recalls (Transport Canada Open Data)",
        "description": "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.",
        "version": "1.0",
        "x-build-id": "ynegQShIs1L1kZQGI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/agentumgroup~ca-vehicle-recalls/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-agentumgroup-ca-vehicle-recalls",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/agentumgroup~ca-vehicle-recalls/runs": {
            "post": {
                "operationId": "runs-sync-agentumgroup-ca-vehicle-recalls",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/agentumgroup~ca-vehicle-recalls/run-sync": {
            "post": {
                "operationId": "run-sync-agentumgroup-ca-vehicle-recalls",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Data mode",
                        "enum": [
                            "recent60",
                            "full"
                        ],
                        "type": "string",
                        "description": "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).",
                        "default": "recent60"
                    },
                    "recalledAfter": {
                        "title": "Recalled after (YYYY-MM-DD)",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Only include recalls with a RECALL_DATE_DTE on or after this date. Leave blank for no lower bound."
                    },
                    "recalledBefore": {
                        "title": "Recalled before (YYYY-MM-DD)",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Only include recalls with a RECALL_DATE_DTE on or before this date. Leave blank for no upper bound."
                    },
                    "makes": {
                        "title": "Vehicle make filter",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Limit results to specific vehicle makes (case-insensitive). Example: [\"FORD\", \"HONDA\"]. Leave empty for all makes.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "categories": {
                        "title": "Vehicle category filter",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Limit results to specific vehicle categories (case-insensitive). Example: [\"SUV\", \"Passenger Car\", \"Light Truck\", \"Motorcycle\"]. Leave empty for all categories.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "keywords": {
                        "title": "Keyword filter",
                        "type": "string",
                        "description": "Optional comma-separated keywords matched against the recall description (COMMENT_ETXT) and system type (SYSTEM_TYPE_ETXT), case-insensitive. Example: \"airbag, seatbelt, fire\"."
                    },
                    "maxRecords": {
                        "title": "Max records",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of recall records to return.",
                        "default": 500
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
