# Canada Recalls API — Food, Vehicle, Product & Health Recalls (`nexgensignal/ca-recall-safety-alert-records`) Actor

Government of Canada recalls and safety alerts as data: food (CFIA), vehicles (Transport Canada), consumer products, medical devices and drugs, with hazard, advice, class and notice link. Filter by program, category, words and date. No API key. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/ca-recall-safety-alert-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 canada recall records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ⚠️ Canada Recalls API — Food, Vehicle, Product & Health Recalls

Get the Government of Canada's recalls and safety alerts as clean JSON — food recalls from the Canadian Food Inspection Agency, vehicle recalls from Transport Canada, consumer product recalls, medical device and drug and health product advisories — each with the hazard, the advice published with it, the category, recall class, last-updated date and a link to the official notice.

Filter by issuing program, category, recall class, words in the title, product or issue, and update date. Newest first.

The unit of output is one **notice**: one recall or safety alert. You pay per notice delivered; a run that finds nothing costs nothing.

### Who buys this and for what job

- **Retailers, distributors and marketplaces** checking products they sell against Canadian recalls.
- **Food safety and quality teams** monitoring CFIA recalls by category and hazard.
- **Fleet, dealer and automotive teams** tracking Transport Canada vehicle recalls.
- **Insurers, product-liability and compliance teams** building recall histories by product and company.

Buyers usually search for this as **"canada recalls"** or **"health canada recalls api"**.

### 📊 Sample Output

![Table of Government of Canada recalls and safety alerts, newest first: last updated date, issuing program and title.](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/ca-recall-safety-alert-records.png)

| last_updated | organization_name | category | title |
|---|---|---|---|
| 2026-10-09 | Canadian Food Inspection Agency | Condiments | Kevin’s Natural Foods brand Turkey Gravy recalled due to undeclared mustard |
| 2026-10-09 | Canadian Food Inspection Agency | Candy, confectionary, snacks and sweeteners | Redpath brand Medium Sugar recalled due to pieces of metal |
| 2026-10-09 | Canadian Food Inspection Agency | Meat and poultry | Kara Food brand Poulet Tandoori recalled due to undeclared mustard |
| 2026-10-09 | Consumer product safety | Electronics | S1 Dry Flush Sealing Toilet and S1 Adapter Kit recalled due to fire hazard |
| 2026-10-08 | Transport Canada | SUV | Transport Canada Recall - 2026457 - LAND ROVER |
| 2026-10-08 | Transport Canada | Light Truck & Van | Transport Canada Recall - 2026456 - GENERAL MOTORS |

Rows from live run `6UJdcYw3OEkYcvX8c` on Apify (the Store example: the 10 most recently updated notices). Notice the issuing program on every row: Canadian Food Inspection Agency, Transport Canada, consumer products and medical devices.

### ✅ What you get

Every field of each record:

- `record_id` — cA-RSA:<recall id>; stable, use it to upsert.
- `recall_id` — recall or alert ID (NID).
- `title` — notice title.
- `url` — official notice page.
- `organization` — issuing program as published, e.g. CFIA, TC, Consumer product safety, Medical devices.
- `organization_name` — full name for TC and CFIA; otherwise as published.
- `product` — product.
- `issue` — hazard or issue.
- `what_you_should_do` — advice published with the notice.
- `category` — category, e.g. Electronics, Food, Vehicles.
- `recall_class` — recall class or type where published (e.g. Class 1, Type II).
- `last_updated` — date the notice was last updated (YYYY-MM-DD).
- `archived` — true when the notice is archived.
- `source` — publisher dataset.
- `source_url` — dataset page.
- `licence` — licence notice.
- `attribution` — source line.
- `observed_at` — when this run read it (UTC).

### ⚙️ Sample inputs

**1. The Store example — the latest notices**

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

Read 34,212 notices and returned the 10 most recently updated in run `6UJdcYw3OEkYcvX8c`; $0.50 on the Free plan.

**2. Food recalls (CFIA)**

```json
{
  "organizations": ["CFIA"],
  "maxRecords": 40
}
```

Matched 5,328 CFIA notices and returned the 40 newest in run `2QzByX9eOs1sMahoE`.

**3. Vehicle airbag recalls**

```json
{
  "organizations": ["Transport Canada"],
  "textContains": ["airbag"],
  "maxRecords": 20
}
```

Matched 640 notices and returned the 20 newest in run `Vm5MwusEZQk2yb5li`.

Input fields:

| Field | Meaning |
|---|---|
| `organizations` | e.g. CFIA (food), TC (vehicles), Consumer product safety, Medical devices, Drugs and health products. |
| `categories` | e.g. Food, Electronics, Vehicles, Children's products. |
| `recallClasses` | e.g. Class 1, Class 2, Type I, Type II. |
| `textContains` | e.g. listeria, airbag, battery. |
| `updatedFrom` | e.g. 2026-01-01. |
| `updatedTo` | e.g. 2026-06-30. |
| `includeArchived` | Archived notices stay in the open data. |
| `order` | By last-updated date. |
| `maxRecords` | Stop after this many notices (each is charged once). |

### 🧾 JSON sample record

```json
{
  "record_id": "CA-RSA:82767",
  "recall_id": "82767",
  "title": "Kevin’s Natural Foods brand Turkey Gravy recalled due to undeclared mustard",
  "url": "https://recalls-rappels.canada.ca/en/alert-recall/kevin-s-natural-foods-brand-turkey-gravy-recalled-due-undeclared-mustard-0",
  "organization": "CFIA",
  "organization_name": "Canadian Food Inspection Agency",
  "product": "Turkey Gravy",
  "issue": "Mustard",
  "what_you_should_do": "Check to see if you have recalled productsDo not consume recalled products to which you are allergic or sensitive as they may cause a serious or life-threatening reactionDo not serve, use, sell or distribute recalled productsRecalled products should be thrown out or returned to the location where they were purchasedLearn more:Learn more about common food allergiesSign up for recall notifications by email and follow us on social mediaView our detailed explanation of the food safety investigation and recall processReport a food safety or labelling concern",
  "category": "Condiments",
  "recall_class": "Class 1",
  "last_updated": "2026-10-09",
  "archived": false,
  "source": "Government of Canada — Recalls and Safety Alerts open data",
  "source_url": "https://open.canada.ca/data/en/dataset/d38de914-c94c-429b-8ab1-8776c31643e3",
  "licence": "Contains information licensed under the Open Government Licence – Canada (https://open.canada.ca/en/open-government-licence-canada).",
  "attribution": "Source: Government of Canada, Recalls and Safety Alerts (recalls-rappels.canada.ca)",
  "observed_at": "2026-10-12T04:08:53Z"
}
```

### 🔧 How it works

1. **Robots check.** `recalls-rappels.canada.ca/robots.txt` is read on every run; it allows the open-data file. A robots file that disallowed it would stop the run with nothing charged.

2. **One official file.** The actor downloads the Recalls and Safety Alerts open-data JSON (about 16 MB, 34,212 notices on 12 Oct 2026) listed on open.canada.ca.

3. **Filter and sort.** Every notice is checked against your filters and sorted by last-updated date, newest first.

4. **Deliver, then charge.** Records are pushed in batches, each charged after delivery, so records and charges always match.

5. **Receipt.** `RUN_RECEIPT` records the robots result, the file and its date, notices read and matched, and delivered and charged counts.

No login, API key, proxy or bot workaround.

### 💰 Pricing example

Per notice delivered, no start fee, no monthly charge:

| Apify plan | Price per notice |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

- 10 records (the Store example): $0.50 on the Free plan, $0.335 on Gold.
- 1,000 records (the default cap): $50 on Free, $45 on Bronze, $40 on Silver, $33.50 on Gold.

**Coverage and size.** All notices in the Government of Canada Recalls and Safety Alerts open data, including archived ones (34,212 in the copy read on 12 Oct 2026, which was last modified on 11 Oct 2026). English records. Issuing programs appear as published (e.g. CFIA, TC, Consumer product safety, Medical devices); `organization_name` spells out TC and CFIA. Recall class or type is published only for some programs.

### ⚖️ Legal & ToS

Data: Government of Canada, Recalls and Safety Alerts (recalls-rappels.canada.ca), open data licensed under the Open Government Licence – Canada (dataset on open.canada.ca). Every record carries the licence notice in `licence` and a source line in `attribution`. Not affiliated with or endorsed by the Government of Canada.

Records are public notices about products; recalling businesses are named as published, and no personal data is selected. `robots.txt` is honoured. One public file, declared User-Agent, no login, key, proxy or form.

### ❓ FAQ

**Is it only food recalls?**
No. It covers food (CFIA), vehicles (Transport Canada), consumer products, medical devices, drugs and health products.

**Are archived notices included?**
Yes by default; set `includeArchived` to false to drop them.

**How fresh is it?**
As fresh as the open-data file; the receipt shows the file's last-modified date and `last_updated` shows each notice's date.

**Can I get the French version?**
Not in this actor; it reads the English file.

### 🆘 Troubleshooting

- **0 records for an organization** — use the published program name (CFIA, TC, Consumer product safety, Medical devices) or Transport Canada / Canadian Food Inspection Agency.
- **Category filter too broad** — `categories` matches part of the category text; add `textContains`.
- **SOURCE UNAVAILABLE message** — the source did not answer after four tries; nothing was charged — run again later.
- **CAPPED message** — your maximum total charge was reached; raise it in the run options.
- **Run failed with "Invalid input"** — a filter value is malformed; the message names the field. Nothing was charged.

### 🔗 Related Actors

- [FDA Recalls API — FDA Enforcement Reports (Food, Drug, Device)](https://apify.com/nexgensignal/fda-recall-risk-records) — US FDA recalls.
- [UK Vehicle Recalls — DVSA Car, Motorcycle & Parts Recall Data](https://apify.com/nexgensignal/uk-vehicle-recall-records) — UK vehicle recalls (DVSA).
- [FDA Device Clearance Records — 510(k) via openFDA](https://apify.com/nexgensignal/fda-device-clearance-records) — US FDA device clearances.
- [Drug Label Change Records — NLM DailyMed SPL](https://apify.com/nexgensignal/drug-label-change-records) — US drug label changes.
- [EMA Medicine Status Records — EU Medicines](https://apify.com/nexgensignal/ema-medicine-status-records) — EU medicine status.

🏢 **About NexGen Signal** — official-source data products from government and regulator publications. Browse the catalog: [apify.com/nexgensignal](https://apify.com/nexgensignal)

### ⭐ Found this useful?

If this actor saved you time, a rating on its Apify Store page helps other buyers find it.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `organizations` (type: `array`):

e.g. CFIA (food), TC (vehicles), Consumer product safety, Medical devices, Drugs and health products.

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

e.g. Food, Electronics, Vehicles, Children's products.

## `recallClasses` (type: `array`):

e.g. Class 1, Class 2, Type I, Type II.

## `textContains` (type: `array`):

e.g. listeria, airbag, battery.

## `updatedFrom` (type: `string`):

e.g. 2026-01-01.

## `updatedTo` (type: `string`):

e.g. 2026-06-30.

## `includeArchived` (type: `boolean`):

Archived notices stay in the open data.

## `order` (type: `string`):

By last-updated date.

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

Stop after this many notices (each is charged once).

## Actor input object example

```json
{
  "organizations": [],
  "categories": [],
  "recallClasses": [],
  "textContains": [],
  "includeArchived": true,
  "order": "newest_first",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered (and billed) records.

## `receipt` (type: `string`):

Robots result, source files, rows read, delivered and charged counts.

# 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 = {
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/ca-recall-safety-alert-records").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 = { "maxRecords": 10 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/ca-recall-safety-alert-records").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "maxRecords": 10
}' |
apify call nexgensignal/ca-recall-safety-alert-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/ca-recall-safety-alert-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ydJmXUcoscuWJIGWF/builds/dirOx8SBXEUx1f7VI/openapi.json
