CPSC Product Recalls — UPC, brand, retailer & date avatar

CPSC Product Recalls — UPC, brand, retailer & date

Pricing

from $3.50 / 1,000 results

Go to Apify Store
CPSC Product Recalls — UPC, brand, retailer & date

CPSC Product Recalls — UPC, brand, retailer & date

CPSC recalls API for saferproducts.gov. Filter U.S. Consumer Product Safety Commission recalls by UPC, brand/manufacturer, retailer, and date — one normalized dataset row per recall. Hazard in output; see FAQ for Hazard query limits.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Michael Rice

Michael Rice

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

CPSC Product Recalls API — Filter by UPC, brand, retailer & date

Query the official U.S. CPSC saferproducts.gov Recalls REST API and get one normalized dataset item per product recall. Filter by UPC, manufacturer/brand, hazard, retailer, remedy, recall number, title, country, importer, and date range — ideal for compliance monitoring and product-safety research.

Not affiliated with the U.S. CPSC. Public API data only. Verify every recall on the official CPSC page before taking action.

Features

  • Official CPSC recalls API — HTTP GET to saferproducts.gov; no browser, no Crawlee
  • Rich filters — product name, manufacturer/brand, hazard, remedy, retailer, UPC, recall number, title, manufacturer country, importer, in-conjunction URL, recall date range
  • Normalized output — stable fields (recallNumber, recallDate, title, manufacturers, products, hazards, remedies, retailers, upc, url, …) ready for pipelines and dashboards
  • Safety by default — empty input auto-applies a ~90-day date window (or set filters / allowUnfiltered: true for a capped full dump)
  • Bounded & resilient — maxItems (default 100, hard cap 5000), retry/backoff on HTTP 429 / 5xx, clear User-Agent
  • Optional raw payload — attach the original CPSC JSON under raw when includeRaw is true

Who is it for

  • Retail & marketplace compliance teams tracking recalls by brand, UPC, or retailer
  • Consumer-product manufacturers / importers monitoring hazard and remedy language
  • Insurance, legal, and QA workflows that need machine-readable product recall data
  • Researchers and journalists extracting CPSC recall history for analysis
  • Developers who want a ready-made Apify Actor instead of hand-rolling the saferproducts.gov client

How to scrape / extract CPSC product recall data

  1. Open this Actor on Apify and set at least one filter (e.g. productName, upc, hazard, manufacturer, or a date range).
  2. Optionally set maxItems, includeRaw, and descriptionSnippetMaxLength.
  3. Run the Actor. It calls
    GET https://www.saferproducts.gov/RestWebServices/Recall?format=json&…
    with only documented official parameter names (unknown keys can cause the API to return all recalls).
  4. Read results from the default dataset — one row per recall — or download via the dataset API URL shown in the run output.

Tips: Prefer filtered queries over unfiltered dumps. There is no pagination; the API returns the full match set and this Actor truncates client-side with maxItems. There is no free-text InConjunctionWith parameter — use inconjunctionUrl (InconjunctionURL).

Official docs: CPSC Recalls API Information.

Input example

{
"recallDateStart": "2025-01-01",
"recallDateEnd": "2026-12-31",
"maxItems": 50,
"includeRaw": false,
"descriptionSnippetMaxLength": 400,
"allowUnfiltered": false
}

Store Try / first-run uses a similar date window + modest maxItems so an unedited run succeeds. Other useful filters: productName, manufacturer, retailer, upc, recallNumber. Prefer those over hazard today — see FAQ (upstream Hazard filter currently returns empty). If you clear all filters, the Actor auto-applies a ~90-day date window (unless allowUnfiltered: true).

FieldMaps to APINotes
productNameProductNamee.g. crib
manufacturerManufacturerBrand / maker
hazardHazardOfficial param kept; upstream currently returns 0 for all tried values — filter hazards[] client-side (see FAQ)
remedyRemedy
retailerRetailer
upcUPC
recallNumberRecallNumber
recallTitleRecallTitle
manufacturerCountryManufacturerCountry
importerImporter
inconjunctionUrlInconjunctionURL
recallDateStart / recallDateEndRecallDateStart / RecallDateEndPrefer YYYY-MM-DD
maxItems(client)Default 100, max 5000
includeRaw(client)Attach original JSON under raw
descriptionSnippetMaxLength(client)Default 400
allowUnfiltered(client)Default false — empty input auto-applies ~90-day dates; set true only for intentional full dumps

Output example

{
"recallId": 10904,
"recallNumber": "26669",
"recallDate": "2026-08-06",
"title": "Play Yard and Crib Mattresses Recalled …",
"manufacturers": [],
"products": ["Voomf Play Yard and Crib Mattresses"],
"hazards": ["The recalled mattresses violate the mandatory safety standard…"],
"remedies": ["Consumers should stop using the mattresses immediately…"],
"remedyOptions": ["Refund"],
"retailers": ["Online at Amazon.com from January 2026 through May 2026…"],
"importers": ["Shanghaiyuejiuyaoguojimaoyiyouxiangongsi … dba Voomf, of China"],
"distributors": [],
"manufacturerCountries": ["China"],
"upc": [],
"url": "https://www.cpsc.gov/Recalls/2026/…",
"descriptionSnippet": "This recall involves Voomf-branded play yard mattresses…",
"consumerContact": "Voomf by email at …",
"lastPublishDate": "2026-08-07",
"source": "cpsc-saferproducts-gov"
}

More samples: OUTPUT.example.json.

Pricing

Live Store pricing (PAY_PER_EVENT) — locked Console PPE:

EventPrice (USD)Notes
Actor start (apify-actor-start)$0.00005One-time per run (memory-scaled per Apify; min one event)
Dataset item (apify-default-dataset-item)$0.0035Per normalized recall row — from $3.50 / 1,000 results

Example: 100 items ≈ $0.00005 + 100 × $0.0035 ≈ $0.35 (before Apify’s ~20% platform margin on applicable PPE).

You are charged for these events only — not for separate platform compute usage under this monetization model. Historical planning notes: ./PPE_ESTIMATE.md (superseded by live Store prices above).

Local development

npm install
# place input at storage/key_value_stores/default/INPUT.json
npm run dry-run
npm run test:fetch

Requires Node.js 18+. Uses Apify SDK v3 (apify package).

Rate limits & ToS

  • Public, no API key. Be a good citizen: descriptive User-Agent, avoid tight polling, prefer filtered queries.
  • No published hard rate limit found in the public guide; this Actor still retries with backoff on 429 / 5xx.
  • Always verify critical decisions against the official recall page in url.

FAQ / disclaimer

Is this official CPSC software? No. Not affiliated with, endorsed by, or operated by the U.S. CPSC.

What happens if I set no filters? The Actor auto-applies a ~90-day recallDateStart / recallDateEnd window so Store Try / first runs succeed without dumping the full catalog. Pass explicit filters for precision, or set allowUnfiltered: true for an intentional full dump (still capped by maxItems).

Is the data complete? Dataset items are convenience transforms of public API data and may be incomplete, delayed, or truncated (descriptionSnippet). Verify every recall on the official CPSC page before consumer, retail, or compliance action.

Is this legal advice? No.

Why does hazard return 0 recalls? The Actor correctly maps hazard → official API Hazard. As of 2026-09-23 probing, saferproducts.gov returns an empty array for every Hazard= value tried — including short words that appear in live Hazards[].Name text (fire, entrapment, choking, …), multi-word fragments, a verbatim Name string, and the Programmer’s Guide example RecallTitle=stroller&Hazard=pinch (115 hits without Hazard, 0 with it). This is not case-sensitivity or a missing vocab list: Hazards[].Name is long narrative prose, and HazardType / HazardTypeID on sampled records were empty. Do not invent alternate query keys (Hazards, HazardName, …) — unknown params make the API return all recalls. Correct usage today: filter with working fields (productName, retailer, manufacturer, remedy, recallTitle, dates, …), then substring-match the dataset’s hazards array client-side. The hazard input is retained so a future API fix works without an Actor change.

License

MIT (Actor scaffold). Upstream recall content remains subject to CPSC / U.S. government public-information terms.