US Recall Change Audit — FDA / CPSC / NHTSA avatar

US Recall Change Audit — FDA / CPSC / NHTSA

Pricing

from $5.00 / 1,000 recall records

Go to Apify Store
US Recall Change Audit — FDA / CPSC / NHTSA

US Recall Change Audit — FDA / CPSC / NHTSA

Read official U.S. recall records from openFDA, CPSC and NHTSA, normalise them, and optionally report changes observed since your previous snapshot. Not safety, medical or legal advice. NHTSA only covers vehicles you specify.

Pricing

from $5.00 / 1,000 recall records

Rating

0.0

(0)

Developer

Drucilla Seeringtl

Drucilla Seeringtl

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Read official U.S. recall records from openFDA (food / drug / device enforcement), CPSC (saferproducts.gov), and NHTSA (vehicle recalls by make / model / year). Normalise them into a flat schema, and optionally report changes this Actor observed since your previous snapshot.

This Actor:

  • uses official HTTP GET APIs only (no proxies, no social/e-commerce scraping, no image mirroring)
  • does not give safety, medical, or legal advice
  • does not promise real-time coverage or zero missed recalls
  • does not merge recalls across agencies into one “same recall”
  • for NHTSA, only queries the vehicle combinations you provide (not a full national vehicle-recall feed)

What you get

Each dataset item includes:

FieldMeaning
sourcefda_food / fda_drug / fda_device / cpsc / nhtsa
sourceIdStable id inside that source (recall_number, CPSC RecallID, or NHTSA campaign+vehicle key)
officialUrlLink to the official notice when available
publishedDate / sourceUpdatedDateDates from the source (sourceUpdatedDate is null when the source does not provide one)
retrievedAtWhen this Actor read the record
recordHashHash of the comparable factual fields
changeTypesnapshot, new, changed, or baseline (first delta run)
changedFields / oldValue / newValuePopulated for changed
sourceStatusPer-record source status (ok when built from a successful read)
plustitle, summary, organization, productNames, classification, status, hazard, remedy, vehicle fields, attribution

Street addresses, e-mail fields, and CPSC ConsumerContact phone text are not output. Official remedy / summary text is kept as published by the agency.

Modes

snapshot

Fetch and normalise records for the date window. Every output row has changeType=snapshot and is billable as a recall-record event (when pay-per-event is enabled).

delta

Compare the current fetch to your baseline and output only new / changed rows.

  • First run with no baseline: establishes a baseline (changeType=baseline). Those rows are written for transparency but are not charged as recall-record.
  • Baselines are customer-isolated. Provide one of:
    • baselineRecords — paste prior records / snapshot JSON in the input
    • baselineDatasetId — a dataset id from your previous run
    • snapshotStoreName — a named key-value store you choose; it is created under the Apify account that runs the Actor (not a shared author store)
  • This Actor only reports changes it observed between two of its own snapshots. It does not reconstruct official historical edit times. Narrowing the date window can miss edits to older notices.

Input

FieldDefaultNotes
modesnapshotsnapshot or delta
sources["fda_food","cpsc"]Add fda_drug, fda_device, nhtsa as needed
lastNDays30UTC window ending today; ignored if publishedFrom is set
publishedFrom / publishedTo—Inclusive YYYY-MM-DD
vehicles[]Required for nhtsa; max 10 {make,model,modelYear} objects
maxItems200Cap across all sources (1–10,000)
baselineRecords—Delta baseline in-input
baselineDatasetId—Delta baseline from your dataset
snapshotStoreName—Optional named store for saving/loading snapshots
snapshotKeyrecall-snapshotKey inside that store

Example (CPSC + FDA food, recent window — matches the Store example intent):

{
"mode": "snapshot",
"sources": ["fda_food", "cpsc"],
"lastNDays": 30,
"maxItems": 20
}

Example with NHTSA (vehicles required):

{
"mode": "snapshot",
"sources": ["cpsc", "nhtsa"],
"lastNDays": 365,
"maxItems": 50,
"vehicles": [
{"make": "Honda", "model": "Accord", "modelYear": "2018"}
]
}

Output

Dataset items as above. The run also writes RUN_SUMMARY to the default key-value store with diagnostics per source (ok, partial, rate_limited, timeout, error, skipped), counts, baseline info, and a disclaimer.

Failures are not reported as “no recalls”. If every requested source errors, the run fails and RUN_SUMMARY.diagnostics explains timeout / rate limit / HTTP errors and lastSuccessAt when available.

Pricing (pay per event)

EventPrice
Actor start (apify-actor-start, platform default, per GB of memory)$0.00005
recall-record — one billable normalised recall or observed change written to the dataset$0.005 ($5.00 per 1,000)

Not charged as recall-record: baseline establishment rows, unchanged delta rows (omitted), and error diagnostics. The Actor stops cleanly when the run’s max total charge is reached. Default dataset per-item platform charging is not used as a second fee on top of recall-record.

Default run resources: 256 MB memory, 300 s timeout.

Attribution and terms

  • openFDA: general content is CC0; third-party material may be excepted. See openFDA terms and authentication / rate limits (anonymous: 1,000 requests/day/IP, 240/minute).
  • CPSC: recall notices may be copied with attribution and without implying endorsement. See CPSC API info and privacy / reuse policy. This Actor attributes CPSC and does not use CPSC badges or logos.
  • NHTSA: public vehicle-recall API by make/model/year. Coverage equals the vehicles you list only.

Limits and honesty

  • Anonymous openFDA quotas apply; on HTTP 429 the Actor backs off / stops that source and records rate_limited — it does not rotate IPs to bypass limits.
  • CPSC / NHTSA exact quotas are not published here; requests are rate-limited conservatively.
  • Data may be delayed relative to the agencies’ own sites.
  • Fuzzy brand / UPC matching is not treated as a definitive hit across sources.

Local development

python -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m unittest -v
# optional tiny live smoke (few requests only):
US_RECALL_LIVE=1 .venv/bin/python -m unittest -v tests.test_recalls.LiveSmokeTests