# Canada Recalls & Safety Alerts (Health Canada / CFIA Open Data) (`agentumgroup/ca-recall-alerts`) Actor

All Government of Canada recalls and safety alerts — food, health products, consumer goods, vehicles, cannabis — from the official Health Canada / CFIA open-data feed. OGL licensed, updated daily, 33k+ records.

- **URL**: https://apify.com/agentumgroup/ca-recall-alerts.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.00 / 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.

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 Recall Alerts

One unified feed of all **Government of Canada recalls and safety alerts** — food, health products, pharmaceuticals, consumer goods, motor vehicles, and cannabis — from the official Health Canada / CFIA open-data feed. Updated daily, zero scraping required.

### What it does

Streams the Government of Canada's daily-updated CSV export of every recall and safety alert ever issued, filters by category, date range, and optional keywords, and returns structured records — newest first.

Categories covered:

| Code | Description | Issuing body |
|---|---|---|
| `FOOD` | Food recalls (e.g. allergens, pathogens, foreign objects) | CFIA |
| `VEHICLE` | Motor vehicle safety defects and recalls | Transport Canada |
| `HEALTH` | Health products, pharmaceuticals, and medical devices | Health Canada |
| `CPS` | Consumer product safety (household goods, children's products, etc.) | Health Canada |
| `CANNABIS` | Cannabis and cannabis-derivative recalls | Health Canada |

**Primary use cases:** food safety monitoring, consumer product intelligence, brand-mention alerts in recall notices, insurance risk scoring, AI safety agents, regulatory compliance tracking, recall notification services, supply chain risk management, media and PR monitoring.

### Data source and licence

- **Source:** Health Canada and Canadian Food Inspection Agency (CFIA)
- **Dataset:** [Recalls and Safety Alerts open data](https://open.canada.ca/data/en/dataset/d38de914-c94c-429b-8ab1-8776c31643e3)
- **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
- **Coverage:** ~33,800 records (active + archived) across all categories from the mid-1990s to present

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `categories` | string[] | `[]` (all) | Category codes to include: `FOOD`, `VEHICLE`, `HEALTH`, `CPS`, `CANNABIS`. Leave empty for all. |
| `recalledAfter` | date | `null` | Only recalls published on or after this date (YYYY-MM-DD). |
| `recalledBefore` | date | `null` | Only recalls published on or before this date (YYYY-MM-DD). |
| `keywords` | string | `null` | Comma-separated keywords matched against title, product name, and hazard description (case-insensitive). |
| `maxRecords` | integer | `500` | Maximum total records to return (min 1, max 50,000). |
| `includeArchived` | boolean | `false` | Also return archived (resolved) recalls. Default is active recalls only. |

#### Example — food recalls in the last 30 days

```json
{
  "categories": ["FOOD"],
  "recalledAfter": "2026-06-20",
  "maxRecords": 200
}
````

#### Example — allergen and pathogen monitoring

```json
{
  "categories": ["FOOD"],
  "keywords": "listeria, salmonella, peanut, allergen, undeclared",
  "maxRecords": 500
}
```

#### Example — all active Class 1 food and health recalls this year

```json
{
  "categories": ["FOOD", "HEALTH"],
  "recalledAfter": "2026-01-01",
  "maxRecords": 2000
}
```

#### Example — brand monitoring (e.g. supplier due-diligence)

```json
{
  "keywords": "amara, nestlé, kraft",
  "includeArchived": true,
  "maxRecords": 500
}
```

### Output

Each record in the dataset:

```json
{
  "recallId": "76771",
  "title": "Amara brand Organic Smoothie Melts – Carrot Raspberry recalled due to plastic pieces",
  "category": "FOOD",
  "recallDate": "2021-10-29",
  "product": "Organic Smoothie Melts – Carrot Raspberry",
  "hazardDescription": "Potential presence of plastic fragments",
  "recallClassification": "Class 3",
  "distributionScope": null,
  "status": "active",
  "authority": "Canadian Food Inspection Agency",
  "sourceUrl": "https://recalls-rappels.canada.ca/en/alert-recall/amara-brand-organic-smoothie-melts-carrot-raspberry-recalled-due-plastic-pieces",
  "fetchedAt": "2026-07-20T12:00:00.000Z"
}
```

#### Field reference

| Field | Description |
|---|---|
| `recallId` | Government of Canada recall identifier (NID) |
| `title` | Full recall title (English) |
| `category` | Standardised category code: `FOOD`, `VEHICLE`, `HEALTH`, `CPS`, `CANNABIS`, or `OTHER` |
| `recallDate` | Date the recall was last updated / published (ISO 8601) |
| `product` | Product name or description |
| `hazardDescription` | Hazard or issue description (e.g. "Listeria monocytogenes", "fire risk") |
| `recallClassification` | Class I / II / III for food; Type I / II / III for medical devices; blank for others |
| `distributionScope` | Geographic distribution scope — not available in open-data CSV (null) |
| `status` | `"active"` or `"archived"` |
| `authority` | Issuing authority (e.g. "Canadian Food Inspection Agency", "Health Canada", "Transport Canada") |
| `sourceUrl` | Direct URL to the recall detail page on recalls-rappels.canada.ca |
| `fetchedAt` | ISO 8601 timestamp of when this record was fetched |

A `RUN_SUMMARY` key in the key-value store is written at the end of each run with totals and input parameters.

### Recall classification guide

**Food (CFIA):**

- Class 1 — Reasonably likely to cause serious adverse health consequences or death
- Class 2 — May cause temporary adverse health consequences; serious consequences unlikely
- Class 3 — Unlikely to cause adverse health consequences

**Medical devices (Health Canada):**

- Type I — Serious injury or death likely if device continues in use
- Type II — Temporary or medically reversible adverse health consequences
- Type III — Unlikely to cause adverse health consequences

### Limitations

- **No distribution scope in CSV.** The geographic distribution field is available only via the individual recall detail API, not the bulk CSV. Set `distributionScope` to null for all records.
- **`Last updated` date used as recallDate.** The CSV does not include an original publication date — the "Last updated" field is used, which reflects the most recent update to the recall notice (usually the same as the original date for new recalls).
- **English only.** The CSV endpoint returns English titles and descriptions. French data is available at the same endpoint with `/fr/` URLs.

### Attribution

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

Data sourced from the [Health Canada / CFIA Recalls and Safety Alerts open dataset](https://open.canada.ca/data/en/dataset/d38de914-c94c-429b-8ab1-8776c31643e3).

# Actor input Schema

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

Which recall categories to include. Leave empty for all categories. FOOD = food recalls (CFIA); VEHICLE = motor vehicle recalls (Transport Canada); HEALTH = health products, pharmaceuticals, medical devices (Health Canada); CPS = consumer product safety (Health Canada); CANNABIS = cannabis recalls.

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

Only include recalls published on or after this date. Leave blank for no lower bound.

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

Only include recalls published on or before this date. Leave blank for no upper bound.

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

Comma-separated keywords to match against the recall title, product name, and hazard description (case-insensitive). Example: "listeria, peanut, salmonella". Leave blank for all recalls.

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

Maximum total number of recall records to return.

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

Also include archived (resolved / closed) recalls. By default only active recalls are returned.

## Actor input object example

```json
{
  "categories": [],
  "maxRecords": 500,
  "includeArchived": false
}
```

# 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 = {
    "categories": [],
    "maxRecords": 500,
    "includeArchived": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentumgroup/ca-recall-alerts").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 = {
    "categories": [],
    "maxRecords": 500,
    "includeArchived": False,
}

# Run the Actor and wait for it to finish
run = client.actor("agentumgroup/ca-recall-alerts").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 '{
  "categories": [],
  "maxRecords": 500,
  "includeArchived": false
}' |
apify call agentumgroup/ca-recall-alerts --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Canada Recalls & Safety Alerts (Health Canada / CFIA Open Data)",
        "description": "All Government of Canada recalls and safety alerts — food, health products, consumer goods, vehicles, cannabis — from the official Health Canada / CFIA open-data feed. OGL licensed, updated daily, 33k+ records.",
        "version": "1.0",
        "x-build-id": "7UfrsZUFXKC8wOXtc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/agentumgroup~ca-recall-alerts/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-agentumgroup-ca-recall-alerts",
                "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-recall-alerts/runs": {
            "post": {
                "operationId": "runs-sync-agentumgroup-ca-recall-alerts",
                "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-recall-alerts/run-sync": {
            "post": {
                "operationId": "run-sync-agentumgroup-ca-recall-alerts",
                "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": {
                    "categories": {
                        "title": "Categories",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Which recall categories to include. Leave empty for all categories. FOOD = food recalls (CFIA); VEHICLE = motor vehicle recalls (Transport Canada); HEALTH = health products, pharmaceuticals, medical devices (Health Canada); CPS = consumer product safety (Health Canada); CANNABIS = cannabis recalls.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "FOOD",
                                "VEHICLE",
                                "HEALTH",
                                "CPS",
                                "CANNABIS"
                            ],
                            "enumTitles": [
                                "FOOD — Food recalls (CFIA)",
                                "VEHICLE — Motor vehicle recalls (Transport Canada)",
                                "HEALTH — Health products, pharmaceuticals, medical devices (Health Canada)",
                                "CPS — Consumer product safety (Health Canada)",
                                "CANNABIS — Cannabis recalls"
                            ]
                        },
                        "default": []
                    },
                    "recalledAfter": {
                        "title": "Recalled after (YYYY-MM-DD)",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Only include recalls published 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 published on or before this date. Leave blank for no upper bound."
                    },
                    "keywords": {
                        "title": "Keyword filter",
                        "type": "string",
                        "description": "Comma-separated keywords to match against the recall title, product name, and hazard description (case-insensitive). Example: \"listeria, peanut, salmonella\". Leave blank for all recalls."
                    },
                    "maxRecords": {
                        "title": "Max records",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum total number of recall records to return.",
                        "default": 500
                    },
                    "includeArchived": {
                        "title": "Include archived recalls",
                        "type": "boolean",
                        "description": "Also include archived (resolved / closed) recalls. By default only active recalls are returned.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
