Product Recalls API - CPSC, NHTSA, USDA, EU, UK
Pricing
from $5.00 / 1,000 recalls
Product Recalls API - CPSC, NHTSA, USDA, EU, UK
Search product recalls from US CPSC, NHTSA, USDA FSIS, EU Safety Gate and UK FSA in one unified JSON schema, with an only-new mode for monitoring.
Pricing
from $5.00 / 1,000 recalls
Rating
0.0
(0)
Developer
Dzmitry Mamyrau
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Unified Product Recalls (Apify actor)
One actor, one JSON schema, five official recall sources. Search consumer product, vehicle and food recalls from the US CPSC, US NHTSA, US USDA FSIS, EU Safety Gate (RAPEX) and the UK Food Standards Agency, filter by keyword and date, and monitor for new recalls on a schedule. Built for product-safety, compliance, retail, insurance and supply-chain teams, and for AI agents calling it through Apify's MCP server.
Pricing: $5 per 1,000 recalls ($0.005 each) plus Apify's standard per-run start fee (pay per event).
Sources
| Key | Agency | Covers | Notes |
|---|---|---|---|
cpsc | US Consumer Product Safety Commission | Consumer products (toys, appliances, furniture, ...) | Official Recalls REST API |
nhtsa | US National Highway Traffic Safety Administration | Vehicles, tires, car seats, equipment | Official bulk recalls file (RCL flat file, streamed); one item per campaign; date = report received |
fsis | US Dept. of Agriculture, Food Safety and Inspection Service | Meat, poultry, egg products; public health alerts | Official Recall API; class I/II/III |
safety-gate | European Commission, EU Safety Gate (RAPEX) | Dangerous non-food products in the EU/EEA | Beta. Official weekly-report XML export; alerts appear once their weekly report is published (Fridays), dated by that report; at most the last 26 weeks per run |
fsa | UK Food Standards Agency | Food recalls, allergy alerts, alerts for action | Official food alerts API |
FDA recalls (food, drugs, devices) are covered by the sibling actor "FDA Recalls Monitor".
Input
| Field | Meaning | Default |
|---|---|---|
sources | Any of cpsc, nhtsa, fsis, safety-gate, fsa | all five |
searchText | Keywords; all words must appear in title, product, hazard, company or brand (case-insensitive) | none |
dateFrom, dateTo | Inclusive YYYY-MM-DD window on the recall date | last 30 days |
maxResults | Max recalls returned in total. The cap is shared fairly across the selected sources (unused share goes to the others); output is sorted newest first | 20 |
onlyNew + monitorId | Return only recalls not delivered before to this monitor | off |
includeRaw | Add the unmodified source record as raw | off |
Leave the input empty to get the newest recalls right away. Example:
{ "sources": ["cpsc", "fsa"], "searchText": "peanut", "dateFrom": "2026-08-01", "maxResults": 50 }
Output
One dataset item per recall, in the same shape for every source:
id (source-prefixed, unique), source, agency, country (US/EU/GB), category (food, vehicle, consumer-product),
title, productDescription, hazard, riskLevel (high/medium/low or null), riskLevelRaw (the source's own value),
company, brands, date (ISO), url (official notice), images, extra (source-specific details such as remedy,
units affected, allergens, vehicles, measures) and raw (with includeRaw). Missing values are null.
{"id": "fsa:FSA-AA-41-2026","source": "fsa","agency": "UK Food Standards Agency (FSA)","country": "GB","category": "food","title": "Waitrose & Partners recalls Waitrose Rhubarb Crumble because of undeclared oats (gluten)","productDescription": "Waitrose Rhubarb Crumble","hazard": "Oats (gluten) This product contains gluten making it a possible health risk for anyone with an allergy or intolerance to oats or gluten, or with coeliac disease.","riskLevel": "medium","riskLevelRaw": "AA (Allergy Alert)","company": "Waitrose & Partners","brands": [],"date": "2026-09-03","url": "https://alerts.food.gov.uk/news-alerts/alert/fsa-aa-41-2026","images": [],"extra": { "alertType": "AA", "allergens": ["Gluten", "Oats"], "countries": ["England", "Scotland", "Wales"] }}
Risk levels are normalised only where the source provides something to normalise: FSIS class I/II/III, the EU Safety Gate risk level (serious/high = high), FSA alert type
(Food Alert for Action = high, Product Recall Information Notice and Allergy Alert = medium; this is derived by this actor from the alert type, because the FSA publishes no severity, so use riskLevelRaw for what the FSA actually said) and NHTSA "park it" / "park outside"
warnings (high). CPSC does not publish a severity, so riskLevel is null there; read hazard instead.
The run also stores an OUTPUT record in the key-value store with per-source status, item counts and errors.
One failing source never fails the run: it is logged, reported as error in the summary and skipped
(the run fails only if every selected source fails).
Monitoring and scheduling
Turn on onlyNew with a monitorId (for example peanut-watch) and schedule the actor daily in Apify Console.
Each run returns only recalls not delivered before to that monitor. The list of delivered ids lives in a named
key-value store in your account. The first run is the baseline and returns everything matching. Only items actually
delivered are marked seen, so a run cut short by maxResults or your max charge picks up the rest next time.
Attach an Apify integration (Slack, email, webhook, Zapier, Make) to get notified.
API and MCP usage
Run via the Apify API:
curl -X POST "https://api.apify.com/v2/acts/whitel1ght~unified-product-recalls/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"searchText": "battery", "sources": ["cpsc", "safety-gate"], "maxResults": 10}'
With the Apify MCP server, add this actor as a tool and ask an agent things like "Any vehicle or consumer product
recalls involving lithium batteries in the last 14 days?". Input descriptions are written to be self-explanatory to
LLMs, and every result carries an official notice url to cite.
FAQ
Is this affiliated with any agency? No. It is not affiliated with or endorsed by the CPSC, NHTSA, USDA, the European
Commission or the UK Food Standards Agency. Always confirm against the official notice linked in url.
Why fewer than maxResults items? The filters matched fewer recalls in the window, onlyNew removed ones you already
received, or a source failed (see the OUTPUT summary).
Why is an EU Safety Gate alert missing or dated a few days ago? The actor uses the official weekly-report export. A weekly
report is published every Friday, so alerts appear once their report is out, and date is the report's publication date.
The export is not a documented API contract, so Safety Gate stays marked beta.
How does NHTSA search work? The actor streams NHTSA's official bulk recalls file (about 15 MB zipped) on every run and keeps campaigns whose report-received date is inside your window, so keyword search works over any date range without hammering the NHTSA API.
What if a source is slow or blocked? Each source has its own deadline (90 s, NHTSA 120 s) and a timed-out source is reported as an error while the others are returned. FSIS is retried with backoff and, if it still fails, served from the last good copy (last 180 days) kept in a named key-value store in your account; the run summary says so.
Is it up to date? Data is fetched live on every run, but agencies publish with their own delay.
What does it cost? $5 per 1,000 recalls ($0.005 each) plus Apify's standard per-run start fee. You are charged only for items returned.
Data licences and attribution
- US sources (CPSC, NHTSA, USDA FSIS): works of the US federal government, public domain.
- EU Safety Gate: Alerts from the Rapid Alert System for dangerous non-food products, published free of charge on the Safety Gate website (https://ec.europa.eu/safety-gate-alerts). © European Union, reused under CC BY 4.0. Source of the data in this actor: the official weekly-report XML export (
https://ec.europa.eu/safety-gate-alerts/api/download/weeklyReport/list/xml/enand the per-week files it links to). On data.europa.eu the dataset "Safety Gate (the EU rapid alert system - non-food)" lists these exports under CC0 1.0 and the Commission reuse notice (Decision 2011/833/EU); attribution is given as above. - UK FSA: Source: Food Standards Agency. Published under the Open Government Licence v3.0; contains public sector information licensed under the OGL.
Dates without a timezone in a source are treated as UTC; all date values are UTC calendar dates.
Develop
npm installnpm run typechecknpm test # unit tests, network mockednpm run build # tsc -> dist/npm run smoke [source] # live calls, e.g. npm run smoke fsa
Run locally: put input in storage/key_value_stores/default/INPUT.json, npm run build, then node dist/main.js
(results in storage/datasets/default). Locally, pay-per-event charging is a no-op.
onlyNew remembers delivered ids for 180 days (at most 50,000) and never looks back further than that.
Before publishing (owner checklist)
- Set
apifyUsernameinsrc/config.tsand replacewhitel1ghtin this README. apify login, thenapify push.- In Console, Monetization: pay per event, set only the two built-in events:
apify-default-dataset-item= $0.005 (and leaveapify-actor-startat Apify's standard fee). Do not add custom events. - Fill in the listing from
LAUNCH.md. - Run once in the Console with the default input and check the "Recalls" view and the
OUTPUTrecord. - Add a support contact or issues URL to the listing.