US Recall API | FDA, CPSC & USDA FSIS avatar

US Recall API | FDA, CPSC & USDA FSIS

Pricing

from $1.50 / 1,000 results

Go to Apify Store
US Recall API | FDA, CPSC & USDA FSIS

US Recall API | FDA, CPSC & USDA FSIS

Search US product recalls from FDA, CPSC, and USDA FSIS in one run. Filter by brand, category, or date and export normalized recall data with severity scoring.

Pricing

from $1.50 / 1,000 results

Rating

5.0

(1)

Developer

TicTech

TicTech

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

Search US product recalls from FDA, CPSC, and USDA FSIS in one run. Filter by brand, category, date, or agency and export normalized recall data with severity scoring.

Why use this Actor?

US recall data is spread across three federal agencies. Checking each site separately is slow, inconsistent, and easy to miss. This Actor pulls from official government APIs, normalizes every record into one schema, and lets you schedule searches on Apify — so you can monitor recalls, feed dashboards, or screen product catalogs without building three integrations yourself.

Built on official APIs, not page scraping — reliable FDA (openFDA), CPSC (SaferProducts), and USDA FSIS data in one place.

Who is it for?

  • Compliance & quality teams monitoring recalls across product lines
  • Brand managers tracking recalls affecting their company or competitors
  • E-commerce & retail screening catalog risk by brand or category
  • Supply chain analysts reviewing recall trends by date or product type
  • Developers building recall alerts, dashboards, or internal tools via the Apify API

Use cases

  • Brand recall lookup — find all recalls linked to a manufacturer or brand name
  • Category monitoring — track supplement, food, toy, or electronics recalls over time
  • Date-based searches — pull recalls published in a specific period
  • Agency-specific exports — query FDA, CPSC, or USDA only
  • Scheduled monitoring — run daily or weekly and pipe results to Slack, email, or a database
  • Compliance screening — export structured recall data for internal review

What you get

  • Official government APIs (openFDA, SaferProducts, FSIS)
  • One unified dataset schema across all agencies
  • Smart routing by product type (supplements → FDA, meat → USDA, toys → CPSC, etc.)
  • Severity scoring (high, medium, low) on every record
  • Optional overall analytics summarizing the recalls returned by your search

Input

FieldDescription
brandNameBrand, manufacturer, or company
productTypee.g. supplements, food, toys, meat
dateFrom / dateToDate range (YYYY-MM-DD)
sourceall, fda, cpsc, or usda
maxResults1–1000 (default 100)
includeAnalyticsOverall result analytics (see Analytics)
keepStandbyAliveKeep HTTP API running after the run (see Standby mode)

At least one search field is required unless keepStandbyAlive is enabled.

Default input

The Actor starts with empty optional filters, the first three months of 2026, and all agencies:

{
"dateFrom": "2026-01-01",
"dateTo": "2026-03-31",
"source": "all",
"maxResults": 100,
"includeAnalytics": false
}

Example input with filters

{
"brandName": "Example Brand Co.",
"productType": "supplements",
"dateFrom": "2026-01-01",
"dateTo": "2026-03-31",
"source": "all",
"maxResults": 10,
"includeAnalytics": true
}

Example output (dataset row)

Each recall is saved as one row in the dataset:

{
"source": "FDA",
"date": "2026-02-15",
"brand": "Example Brand Co.",
"company": "Example Manufacturer LLC",
"product": "Example Dietary Supplement Capsules",
"category": "Food",
"reason": "Undeclared allergen (example)",
"severity": "medium",
"url": "https://www.fda.gov/safety/recalls-market-withdrawals-safety-alerts?search_api_fulltext=EXAMPLE-0001-2026",
"recall_id": "EXAMPLE-0001-2026",
"classification": "Class II",
"status": "Ongoing"
}

Analytics

Set includeAnalytics: true to get an overall summary of the recalls returned by your search — not a separate API call, and not analytics across all US recalls. Every metric is computed from the matched result set (up to maxResults).

This is useful when you want a quick risk snapshot without exporting and pivoting the full dataset yourself: how many recalls matched, how severe they are, which agencies reported them, what hazards dominate, and which brands or companies appear most often.

Where to find analytics

LocationWhat you get
Recall records (dataset)One row per matched recall
Analytics summary (separate dataset)One summary row when includeAnalytics is enabled
OUTPUT key-value recordFull analytics object plus all recall items (best for API integrations)

What is analyzed

Analytics always reflect your search results:

  • If you filter by brandName or productType, scope labels use those values.
  • If you search by date range or agency only, scope labels use "All matched recalls" and rankings (top brands, companies, categories) are derived from the returned rows.

Analytics fields

SectionFieldDescription
scopebrandScopeBrand filter used, or All matched recalls
productScopeProduct-type filter used, or All matched recalls
resultsAnalyzedNumber of recall rows included in the summary
descriptionNotes that stats are based on matched results only
brandSummarytotalRecallsTotal recalls in the result set
highSeverityRecallsCount with normalized severity high
mediumSeverityRecallsCount with severity medium
lowSeverityRecallsCount with severity low
unknownSeverityRecallsCount where severity could not be determined
earliestRecallOldest recall date in the results
latestRecallMost recent recall date in the results
categoryStatisticstopReasonsTop 3 recall reasons/hazards in the results
topCategoriesTop product categories with counts, e.g. [{ "name": "Food", "count": 8 }]
severityBreakdownhigh / medium / low / unknownFull severity distribution
sourceBreakdownFDA / CPSC / USDAHow many recalls came from each agency
timelineearliestRecall / latestRecallDate span of the matched recalls
recallDateSpanDaysDays between earliest and latest recall
topBrands[{ name, count }]Most frequent brands in the results (up to 5)
topCompanies[{ name, count }]Most frequent recalling firms (up to 5)

Example analytics output

Date-range search with no brand or product filter:

{
"items": [ "...recall rows..." ],
"analytics": {
"scope": {
"brandScope": "All matched recalls",
"productScope": "All matched recalls",
"resultsAnalyzed": 10,
"description": "Overall statistics computed from the recall rows returned by this search. Counts reflect matched results only, capped by maxResults."
},
"brandSummary": {
"brand": "All matched recalls",
"totalRecalls": 10,
"highSeverityRecalls": 6,
"mediumSeverityRecalls": 3,
"lowSeverityRecalls": 1,
"unknownSeverityRecalls": 0,
"earliestRecall": "2026-01-10",
"latestRecall": "2026-03-28"
},
"categoryStatistics": {
"productType": "All matched recalls",
"totalRecalls": 10,
"topReasons": [
"undeclared allergen (example)",
"potential contamination (example)",
"mislabeling (example)"
],
"topCategories": [
{ "name": "Food", "count": 7 },
{ "name": "Meat, Poultry, and Egg Products", "count": 3 }
]
},
"severityBreakdown": { "high": 6, "medium": 3, "low": 1 },
"sourceBreakdown": { "FDA": 7, "USDA": 3 },
"timeline": {
"earliestRecall": "2026-01-10",
"latestRecall": "2026-03-28",
"recallDateSpanDays": 77
},
"topBrands": [
{ "name": "Brand A", "count": 2 },
{ "name": "Brand B", "count": 1 }
],
"topCompanies": [
{ "name": "Company A", "count": 3 },
{ "name": "Company B", "count": 2 }
]
},
"meta": {
"count": 10,
"sourcesQueried": ["fda", "cpsc", "usda"],
"queriedAt": "2026-06-16T12:00:00Z"
},
"errors": []
}

Practical uses

  • Compliance triage — see at a glance how many high-severity recalls matched and what hazards dominate (topReasons, severityBreakdown).
  • Supplier screening — search a date window and check whether a company or brand appears in topCompanies / topBrands.
  • Agency coverage — use sourceBreakdown to see whether FDA, CPSC, or USDA drove the results.
  • Monitoring dashboards — schedule runs and read the analytics dataset or OUTPUT.analytics without re-aggregating recall rows.
  • Trend snapshotstimeline shows how spread out recall dates are within your filtered window.

Output fields

FieldDescription
sourceAgency: FDA, CPSC, or USDA
dateRecall date
severityNormalized risk: high, medium, low, or unknown
brandBrand name when available
companyManufacturer or recalling firm
productProduct name or description
categoryProduct category or type
reasonRecall reason or hazard summary
urlLink to the official notice
recall_idAgency recall identifier
classificationOfficial class (e.g. Class I, High - Class I)
statusRecall status when reported by the source

Free vs paid

Free Apify users get 5 trial runs. After that, upgrade to continue:

Upgrade to a paid plan

Paid users get unlimited runs.

EventWhen charged
include-analyticsA successful search produces analytics output (includeAnalytics: true)

Configure event prices in the Actor Monetization settings on Apify Console.

Standby mode

This Actor supports Apify standby mode: a long-running HTTP server you can call while the Actor stays alive.

One-shot run (default)

Leave keepStandbyAlive false. The Actor runs your search once, writes results to the dataset and OUTPUT, then exits. Best for scheduled jobs, webhooks, and API integrations that start a run and read the output when it finishes.

Standby API run

Set keepStandbyAlive true to keep the recall API listening after startup. You can optionally include search fields in the input to run an initial search before the server starts.

EndpointMethodDescription
/healthGETService status and available routes
/recallsGETSearch via query parameters (brandName, productType, dateFrom, …)
/recallsPOSTSearch via JSON body (same fields as Actor input)

After deploy, open the Actor’s Standby tab in Apify Console to browse the OpenAPI spec and send test requests without configuring API tokens.

Advantages

  • Interactive testing — try searches from the Console Standby tab with Swagger UI
  • Low latency — no cold start per request; the server is already running
  • Multiple searches per run — call /recalls repeatedly without starting a new Actor run
  • Simple HTTP integration — GET or POST JSON from your app while the standby instance is up

Disadvantages

  • Higher cost — the Actor keeps consuming compute until you stop the run; standby is more expensive than short one-shot runs
  • Not for cron-style monitoring — scheduled daily checks should use one-shot runs, not a permanently warm server
  • Single instance — one standby run serves one URL; scale-out requires multiple runs
  • Free tier — each Actor start (including standby) counts toward the 5 free trial runs; HTTP calls inside a standby run do not consume additional free runs

Example standby input

{
"dateFrom": "2026-01-01",
"dateTo": "2026-03-31",
"source": "all",
"keepStandbyAlive": true
}

Example HTTP request after the server is up:

GET /recalls?dateFrom=2026-01-01&dateTo=2026-03-31&source=all&maxResults=10

Output

After each run, results appear in the Apify Console Output tab:

OutputDescription
Recall recordsDefault dataset — recall rows only
Analytics summarySeparate analytics dataset when includeAnalytics is enabled
Run summary (JSON)Full response under OUTPUT — items, analytics, meta, and errors

Export the dataset as JSON, CSV, Excel, or HTML from the run page.

Data sources

Support & feedback

Found a bug, need a feature, or have a question?

  • Open an issue on the Issues tab in Apify Console for this Actor
  • Email the developer at contact@tictech.id

We welcome reports on missing recalls, API changes, or requests for new filters and export formats.