Product safety recalls

FDA and CPSC product-recall digests for storefront watchlists

This Actor scrapes official FDA and CPSC public recall databases and emits source-linked digest rows (alerts, docket numbers, agency dates). Default feeds cover those public recall sources when you leave feeds empty per the live schema.

Not NHTSA vehicle complaints. Not legal advice. Not a takedown or marketplace-enforcement tool.

from $9.00 / 1,000 Delivered monitoring result row ($0.009 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.

Open Product Safety Recall Scraper on Apify

Product Safety Recall Scraper, not a neighboring Actor

Use this page for this Actor’s job. Use NHTSA Recall Scraper for NHTSA recalls/complaints; Use FDA Warning Letters Scraper for FDA warning-letter digests; Use Shopify Store Scraper for Public Shopify catalogs.

This ActorNHTSA Recall ScraperFDA Warning Letters ScraperShopify Store Scraper
Intent Product Safety Recall ScraperNHTSA recalls/complaintsFDA warning-letter digestsPublic Shopify catalogs
Primary input see schemavehicle feedsfeeds / watchTermsstoreUrls
What it reads Public sources listed on the Store pageNHTSA public APIsFDA public warning-letter feedsShopify JSON endpoints
Primary output Dataset rows billed per live PPErecall digest rowswarning-letter digest rowsstore/catalog rows
Not this job Not NHTSA vehicle complaints. Not legal advice. Not a takedown or marketplace-enforcement tool.Not CPSC consumer-product recallsNot ClinicalTrials.gov or HHS OCRNot Shopify App Store reviews

Store ID: taroyamada/product-safety-recall-digest. Respect source terms, robots.txt, and rate limits.

Use cases

How is Product Safety Recall Scraper different from NHTSA Recall Scraper and FDA Warning Letters Scraper?

Product Safety Recall Scraper (taroyamada/product-safety-recall-digest): This Actor scrapes official FDA and CPSC public recall databases and emits source-linked digest rows (alerts, docket numbers, agency dates). Default feeds cover those public recall sources when you leave feeds empty per the live schema. Not NHTSA vehicle complaints. Not legal advice. Not a takedown or marketplace-enforcement tool. NHTSA Recall Scraper is for NHTSA recalls/complaints (input vehicle feeds; NHTSA public APIs; recall digest rows). Not CPSC consumer-product recalls. FDA Warning Letters Scraper is for FDA warning-letter digests (input feeds / watchTerms; FDA public warning-letter feeds; warning-letter digest rows). Not ClinicalTrials.gov or HHS OCR. Shopify Store Scraper is for Public Shopify catalogs (input storeUrls; Shopify JSON endpoints; store/catalog rows). Not Shopify App Store reviews.

What input is required?

Live required fields: none listed (see live fields). Published exampleRunInput is shown below. Quickstart: leave feeds empty to monitor all 4 default sources (CPSC + FDA food/drug/device), set lookbackDays=30, recallClasses=["I","II"], and schedule recurring runs

Field Type Default Notes
feeds object[] empty Feeds to monitor. One entry per monitored feed/source. Each produces one digest row. Leave empty to use all 4 default feeds (CPSC, FDA food, FDA drug, FDA device). Each item supports id, name, source, lookbackDays, recallClasses, maxRecalls. item required: source
lookbackDays integer 30 Lookback window (days). Number of days back to search for recalls. Applies to all feeds unless overridden per feed. min=1 max=365
recallClasses string[] ["I", "II"] FDA recall classes to include. Filter openFDA results to specific recall classes. Valid values: I (most serious), II, III. Does not apply to CPSC (which uses a different classification scheme).
maxRecallsPerFeed integer 50 Max recalls per feed. Upper bound on recall records fetched per feed per run. Lower = faster and less data; keep ≤ 50 for recurring digests. min=1 max=200
delivery string enum dataset Delivery mode. dataset stores digest rows in the Apify dataset. webhook posts the digest JSON to webhookUrl. enum: dataset, webhook
webhookUrl string empty Webhook URL (required when delivery=webhook). POST target for the recall digest payload. Leave empty for dataset delivery.
datasetMode string enum all Dataset output mode. all emits every feed digest row. action_needed emits only feeds with new or first-run recalls. new_only emits only feeds with new recall IDs not seen in the previous run. enum: all, action_needed, new_only
snapshotKey string product-safety-recall-digest-state Snapshot key for recurring state. Stable key used to persist seen recall IDs across recurring runs so new_only and action_needed modes stay comparable. Use the same key across scheduled runs.
notifyOnNoNew boolean true Emit digest even when no new recalls found. When true (default), every feed always produces a digest row even if no new recalls were found. When false, feeds with no new recalls are omitted from webhook payloads.
requestTimeoutSeconds integer 30 HTTP request timeout (seconds). Timeout for each API request. min=5 max=120
batchDelayMs integer 800 Delay between feeds (ms). Milliseconds to wait between feed fetches. Keeps keyless openFDA usage well below the 40 req/min rate limit. min=0 max=10000
dryRun boolean false Dry run (skip snapshot writes and webhook delivery). Validate, fetch, and assemble without persisting state or posting webhooks. Safe for testing input shapes.
nowIso string empty Override current time (ISO string, for testing). Set to a fixed ISO timestamp to make runs deterministic against fixture data.

Published Store example run input (omitted fields take schema defaults):

{
  "lookbackDays": 30,
  "recallClasses": [
    "I",
    "II"
  ],
  "maxRecallsPerFeed": 50,
  "delivery": "dataset",
  "datasetMode": "all",
  "snapshotKey": "recall-digest-quickstart",
  "notifyOnNoNew": true,
  "batchDelayMs": 800,
  "dryRun": false
}

Run Product Safety Recall Scraper on Apify

How do dataset, webhook, and dry-run delivery work?

delivery defaults to dataset on the live schema. Dataset output is the billable surface when rows are written. webhookUrl is used when delivery is webhook (and typically not during dryRun). dryRun true validates or samples without the usual dataset/webhook side effects described on the Store schema. datasetMode can limit emits to changes_only / changed_only / action_needed versus all. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.

What does a result contain?

Published README Output Example / Sample Output JSON. Treat README samples as illustrations, not a live coverage guarantee. There is no published output JSON schema on the Store page.

How is Product Safety Recall Scraper priced?

Billing is pay per event. The live Store card is from $9.00 / 1,000 Delivered monitoring result row ($0.009 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE. Current PPE:

Event Price Emitted when
apify-default-dataset-item (Delivered monitoring result row) $0.009 Charged only when a new or changed monitoring result row is delivered. Unchanged runs are free.

The published README Cost block is stale versus the live Store pricing tab. README Cost still quotes actor-start $0.01. README Cost quotes dataset-item $0.003; live primary is $0.009 (Delivered monitoring result row). Live: Delivered monitoring result row $0.009. This page quotes live PPE only.

from $9.00 / 1,000 Delivered monitoring result row ($0.009 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.

See Product Safety Recall Scraper pricing on Apify

Limits to keep in mind

Open Product Safety Recall Scraper on Apify

Related pages