CPSC Product Recalls Scraper: UPCs, Importers & Retailers avatar

CPSC Product Recalls Scraper: UPCs, Importers & Retailers

Pricing

from $2.10 / 1,000 recalls

Go to Apify Store
CPSC Product Recalls Scraper: UPCs, Importers & Retailers

CPSC Product Recalls Scraper: UPCs, Importers & Retailers

Pull US Consumer Product Safety Commission (CPSC) recalls from the official SaferProducts.gov API: products, UPCs, hazards, remedies, manufacturers, importers, where sold, and recall notice links, one flat row per recall.

Pricing

from $2.10 / 1,000 recalls

Rating

0.0

(0)

Developer

Groundplane Labs

Groundplane Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

Pull US Consumer Product Safety Commission (CPSC) recalls from the official SaferProducts.gov recall web service and get one flat row per recall: product names, UPCs (where CPSC publishes them), hazards, remedies, manufacturers, importers, where the product was sold, country of manufacture, images and the cpsc.gov notice link. Filter by recall date, product name, description, importer or manufacturer, and retailer.

This actor is an independent tool. It is not affiliated with or endorsed by the U.S. Consumer Product Safety Commission (CPSC).

What it does

  • Calls the CPSC recall web service https://www.saferproducts.gov/RestWebServices/Recall?format=json with your date window and keywords, using the parameter names in CPSC's programmer's guide (RecallDateStart, RecallDateEnd, ProductName, RecallDescription, Importer, Manufacturer, Retailer).
  • Never makes an unfiltered call. The default window is the last 90 days. Long ranges are fetched one year at a time (the full history since 1973 is about 10,000 recalls and takes about a minute).
  • Checks every returned recall against the filters it sent. CPSC silently ignores parameters it does not recognize, so if CPSC ever stops applying a filter, the run fails loudly instead of handing you unfiltered rows.
  • Removes email addresses from all text and phone numbers from the remedy text, so seller contact details are not copied into your dataset.
  • Sorts newest first and stops at maxItems.

Who it's for

  • Marketplace sellers, aggregators and 3PL warehouses checking their catalog against new recalls.
  • Product liability law firms and commercial liability insurers tracking recalls by importer, manufacturer or product type.
  • Compliance teams monitoring recalls of products sold on Amazon, Walmart and other channels.

Input

FieldTypeDefaultDescription
recallDateStartstring (YYYY-MM-DD)blank = run date minus 90 daysEarliest recall date. For full history use 1970-01-01.
recallDateEndstring (YYYY-MM-DD)blank = run dateLatest recall date, inclusive.
productNameKeywordstring""Product name contains this text (case-insensitive).
recallDescriptionKeywordstring""Recall description contains this text.
importerOrManufacturerstring""An importer name or a manufacturer name contains this text.
retailerFilterarray of strings[]CPSC's "sold at" text contains any of these.
maxItemsinteger1000Maximum recalls, newest first.

Keywords are plain text (no * or %); CPSC matches them anywhere in the field. Several filters together must all match, except that importerOrManufacturer matches either field and retailerFilter matches any listed value.

Example input (canary)

{
"recallDateStart": "",
"recallDateEnd": "",
"productNameKeyword": "",
"recallDescriptionKeyword": "",
"importerOrManufacturer": "",
"retailerFilter": [],
"maxItems": 1000
}

Example run options (default $50 max charge)

{ "maxTotalChargeUsd": 50 }

The actor checks your max charge before every dataset push and stops cleanly when the limit is reached.

Output

One row per recall, newest first. Array fields keep CPSC's order with exact duplicates removed (CPSC sometimes lists the same country or name twice).

FieldTypeDescription
recallIdintegerCPSC internal recall ID.
recallNumberstringCPSC recall number.
recallDatestringRecall date, YYYY-MM-DD.
titlestringRecall title.
descriptionstring or nullRecall description as published (email addresses replaced with [email removed]).
productNamesarrayRecalled product names.
upcsarrayUPCs CPSC lists for the recall. Usually empty: see "UPC coverage" below.
hazardsarrayHazard statements.
remediesarrayRemedy statements (emails and phone numbers replaced with placeholders).
manufacturersarrayManufacturer names as CPSC publishes them, usually "Company, of City, State/Country".
importersarrayImporter names as published.
retailersSoldAtarrayCPSC's "sold at" text: stores, websites, dates and prices, with the leading "Sold At:" label removed. It is free text, not a parsed list of retailers; later entries can name the online seller (for example "… d/b/a BrandName, of China").
manufacturerCountriesarrayCountries of manufacture.
asinMentionsUnverifiedarrayText that matches the Amazon ASIN pattern (B0 + 8 characters) found in the recall title, description or product fields. These are unverified text mentions, not confirmed product identifiers.
imageUrlsarrayRecall photos on cpsc.gov.
cpscNoticeUrlstring or nullThe recall notice on cpsc.gov (the firm's contact details for consumers are there).

UPC coverage (honest numbers)

CPSC publishes UPCs for only a small share of recalls. On 2026-11-01: 2 of the 146 recalls in the last 90 days, 17 of 575 in the last 12 months, and 458 of all 10,070 recalls since 1973 had any UPC. This actor is not a complete UPC database; match on product names, models (in the description), importers and ASIN mentions as well.

Sample row (synthetic)

{
"recallId": 99999,
"recallNumber": "27999",
"recallDate": "2026-10-29",
"title": "Example Co. Recalls Space Heaters Due to Fire Hazard",
"description": "This recall involves Example model EX-100 space heaters...",
"productNames": ["Example EX-100 space heaters"],
"upcs": ["012345678905"],
"hazards": ["The heater can overheat, posing a fire hazard."],
"remedies": ["Consumers should stop using the heaters and contact Example Co. at [phone removed] for a full refund."],
"manufacturers": ["Example Manufacturing Ltd., of China"],
"importers": ["Example Co., of Dallas, Texas"],
"retailersSoldAt": ["Amazon.com and Walmart.com from January 2025 through August 2026 for about $40."],
"manufacturerCountries": ["China"],
"asinMentionsUnverified": ["B0EXAMPLE1"],
"imageUrls": ["https://www.cpsc.gov/s3fs-public/example.jpg"],
"cpscNoticeUrl": "https://www.cpsc.gov/Recalls/2027/Example-Co-Recalls-Space-Heaters"
}

How pricing works

Pay per result. You only pay for rows returned.

Data source and terms

  • CPSC Recalls Retrieval Web Service on SaferProducts.gov, https://www.saferproducts.gov/RestWebServices/Recall. Recall notices are public information published by a U.S. federal agency. CPSC documents the service's parameters and fields in its "Recalls Retrieval Web Services Programmers Guide" (v1.3), linked from the CPSC recalls API page on cpsc.gov.
  • Two published notice links carry typos (https:/www…, hhttps://…); the actor repairs the scheme so every cpscNoticeUrl is a working https link.
  • Update cadence: CPSC posts recalls several times a week, usually on Thursdays, and sometimes edits older notices.

Limits and FAQ

  • The retailer filter depends on CPSC's free-text "sold at" field, which is sometimes empty or names only a channel. A retailer filter can therefore miss recalls of products sold there. Leave it empty for complete coverage.
  • ASIN mentions are text matches only. Treat them as leads to check, not as confirmed listings.
  • Contact details are removed. CPSC's consumer-contact field is not output, and emails/phones are stripped from the remedy text, because many small sellers list a personal email. Use cpscNoticeUrl to reach the firm.
  • Zero matches end as Complete: 0 recalls matched your filters with counts. Widen the date window or shorten the keywords.
  • CPSC sometimes answers with a temporary "Error retrieving Recalls" record. The actor retries it like a server error and fails clearly if it persists. It never passes that record on as data.

Troubleshooting

  • Failed: "returned an error record": the CPSC service was down for longer than the retry window. Retry later.
  • Failed: "CPSC appears to be ignoring the … filter": CPSC changed a parameter; nothing unfiltered was delivered.
  • Failed or PARTIAL: "failed validation": CPSC changed its record format; the named fields could not be read.
  • PARTIAL: "CPSC API failed mid-run for : the newest part of your range was delivered; retry for the rest.
  • PARTIAL: max charge limit reached: raise the max charge for the run.

If this keeps happening, please open an issue on this actor's Issues tab and we'll fix it fast.

Found a problem or need a field? Open an issue on the Issues tab; we respond quickly.

Changelog

  • 0.1.1 (2026-11-01): Review fix: nested collection subfields (for example Products.Name, ProductUPCs.UPC, Images.URL) are now validated on every item, so a renamed subfield fails loudly instead of shipping empty arrays. Full-history timing wording corrected to about a minute.
  • 0.1 (2026-11-01): First build.