EU Product Recall Scraper / API: Safety Gate RAPEX, GTIN Watch avatar

EU Product Recall Scraper / API: Safety Gate RAPEX, GTIN Watch

Pricing

from $1.40 / 1,000 recall alert returneds

Go to Apify Store
EU Product Recall Scraper / API: Safety Gate RAPEX, GTIN Watch

EU Product Recall Scraper / API: Safety Gate RAPEX, GTIN Watch

Every product-safety alert the EU Safety Gate publishes, normalised into one row per case, filterable by category, risk level and notifying country, and matchable against your own GTIN or brand watchlist.

Pricing

from $1.40 / 1,000 recall alert returneds

Rating

0.0

(0)

Developer

Kittiwake Data

Kittiwake Data

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

EU product recall alerts from Safety Gate, the EU rapid alert system formerly called RAPEX: one clean row per dangerous-product alert, and a recall watchlist for your own GTIN barcodes and brands.

Every product-safety alert the EU Safety Gate publishes, turned into clean rows you can filter, schedule and match against your own catalogue.

The European Commission publishes a Safety Gate report every Friday: dangerous non-food products found in the EU, what the hazard is, and what an authority ordered or a company did about it. It is public — but it arrives as an XML export with run-together fields and dd/mm/yyyy dates, which is not something you can drop into a spreadsheet or a database.

This Actor reads it and gives you one tidy row per alert, with the messy parts already parsed.

What it is for

  • Marketplaces and retailers — check new alerts against the GTINs you list, every week, and get the hits and nothing else.
  • Importers, distributors and manufacturers — watch your own brands and your competitors'.
  • Compliance, QA and product-safety teams — a filtered feed by category, risk level or notifying country, into your own systems.
  • Analysts — the whole archive back to 2005 is reachable, one weekly report at a time.

What makes it different from just downloading the XML

raw Safety Gate exportthis Actor
measuresone run-together string: …were ordered: ManufacturerCategory of measure(s): Recall of the product from end usersDate of entry into force: 14/08/2026a list of {economicOperator, category, inForceFrom, ordered} — and ordered tells you mandatory vs voluntary
dates14/08/2026, or the literal UnknownISO 2026-08-14, or null. Never a wrong date
barcodesas printed, sometimes emptydigits only, plus a GTIN check-digit result — and null when it isn't checkable, so you can tell "invalid" from "unknown"
online tradersOther(www.a.dewww.b.de) / [{platform: "Other", reference: "www.a.de"}, {platform: "Other", reference: "www.b.de"}]
your catalogueyou write the matchingwatchBarcodes / watchBrands — matched rows carry watchlistMatch, and onlyWatchlistMatches returns just those
duplicatesa case can reappear in a later reportdeduplicated by case number within a run
attributionyou have to add it yourselfthe Commission-required credit line is on every row (source)

The raw measures string is kept in measuresRaw, so you can always audit the parse.

Quick start

Everything from the last 4 weeks:

{ "weeks": 4 }

Only serious risks in toys and childcare, notified by Germany or France:

{
"weeks": 8,
"categories": ["Toys", "Childcare articles and children's equipment"],
"riskLevels": ["Serious risk"],
"notifyingCountries": ["Germany", "France"]
}

Watch your own catalogue and return only the hits — the way most people run this on a schedule:

{
"sinceDate": "2026-08-01",
"watchBarcodes": ["4067683465416", "5901234123457"],
"watchBrands": ["JOYHUT", "Acme Toys"],
"onlyWatchlistMatches": true
}

Run it weekly. Set sinceDate to the date of your last run, or leave weeks: 1 and schedule it for Saturday — the Commission publishes on Friday.

Input

fieldtypedefaultwhat it does
weeksinteger4How many of the most recent weekly reports to read
sinceDateYYYY-MM-DD—Read every report published on or after this date. Overrides weeks
categoriesstring[]alle.g. Toys, Cosmetics, Electrical appliances and equipment
riskLevelsstring[]alle.g. Serious risk
notifyingCountriesstring[]alle.g. Germany
alertTypesstring[]bothConsumer or Professional
keywordsstring[]—Free text across product, brand, description, hazard, category, risk type and model
watchBarcodesstring[]—Your GTINs. Punctuation ignored
watchBrandsstring[]—Your brands. Case-insensitive, matched both ways
onlyWatchlistMatchesbooleanfalseReturn only watchlist hits
includePicturesbooleanfalseAdd product photo URLs
maxAlertsinteger—Stop after N alerts
requestDelayMsinteger1000Pause between report requests

All filters are case-insensitive, and an empty list means "no filter on that field".

Output

One row per alert:

{
"caseNumber": "SR/02365/26",
"alertUrl": "https://ec.europa.eu/safety-gate-alerts/screen/webReport/alertDetail/10099536",
"reportReference": "Report-2026-35",
"reportDate": "2026-09-04",
"category": "Toys",
"product": "Toy gun set",
"brand": null,
"productName": "City Super Police Set",
"modelNumber": "No. 333",
"barcode": "4067683465416",
"barcodeChecksumValid": true,
"riskType": "Choking",
"riskLevel": "Serious risk",
"danger": "The toy has small parts (the suction cups) that can easily detach. …",
"description": "Toy gun set for shooting suction cup darts, with three darts.",
"measures": [
{ "economicOperator": "Manufacturer",
"category": "Recall of the product from end users",
"inForceFrom": "2026-08-14",
"ordered": true }
],
"notifyingCountry": "Germany",
"countryOfOrigin": "People's Republic of China",
"alertType": "Consumer",
"recallUrl": "https://www.landahl.de/produktrueckruf-city-super-police-set-46541",
"onlineTraders": [
{ "platform": "Other", "reference": "www.jeschke-kg.de" },
{ "platform": "Other", "reference": "www.landahl.de" }
],
"source": "Alerts from the Rapid Alert System for dangerous non-food products, published free of charge on the Safety Gate website (https://ec.europa.eu/safety-gate-alerts) © European Union, 2005 – 2026"
}

An empty field in the source becomes null, never "" — so a missing barcode and a blank one are the same thing, and barcodeChecksumValid is null rather than false when there is nothing to check.

What you pay for

eventpricewhen
Recall alert returned$0.002one alert written to the dataset, after it is saved
Weekly report read$0.01one weekly report fetched and parsed — only when both succeed
Watchlist match$0.05an alert matched one of your barcodes or brands. Zero if you supply no watchlist

Apify Store discounts apply by subscription plan: the prices above are the Free-plan prices; Starter pays 10% less, Scale 20% less and Business 30% less on every event.

Nothing is charged for a request that failed, and the run stops when it reaches the spending limit you set — the rows already saved are yours, and nothing beyond the limit is billed.

What this Actor does not do

  • No personal data. The source has none: it describes products, hazards and the measures taken. There is no name, contact, address or user content in the feed or in the output. Brands, shop domains and a company's own recall page are business identifiers and are passed through as published.
  • No logins, no proxies, no CAPTCHA solving. It reads a public, unauthenticated XML export from ec.europa.eu — the same file the portal's own Download button gives you — with one identifying User-Agent and a pause between requests. If the Commission ever refuses a request, this Actor fails loudly rather than trying again differently.
  • No guessing. An unparseable date is null, not a plausible-looking wrong date. An unrecognised measures shape is kept whole rather than silently dropped.

Source, accuracy and attribution

Data comes from the EU Safety Gate rapid alert system, ec.europa.eu/safety-gate-alerts. This Actor reformats what the Commission publishes and adds nothing to it. Where an alert is incomplete, it is incomplete here too — the alertUrl on every row takes you to the official page, which is always the authority.

Reports are published weekly, on Fridays. Nothing here is legal advice about your obligations.

Reuse of Safety Gate alerts is authorised by the Commission's Safety Gate disclaimer (reuse policy under Commission Decision 2011/833/EU), provided the original meaning is not distorted and the source is acknowledged. The required attribution is reproduced verbatim below and on every row of this Actor's output (source field), so it travels with the data even if you filter or re-export individual rows:

"Alerts from the Rapid Alert System for dangerous non-food products, published free of charge on the Safety Gate website (https://ec.europa.eu/safety-gate-alerts) © European Union, 2005 – 2026"

FAQ

Is this RAPEX? Yes. Safety Gate is the EU rapid alert system for dangerous non-food products that used to be called RAPEX. This Actor reads the Commission's own weekly Safety Gate export.

Can I get recall alerts for my own products automatically? Put your GTINs in watchBarcodes and your brands in watchBrands, switch on onlyWatchlistMatches, and schedule the Actor weekly. Apify's integrations can then send the rows on, for example by email, to Slack or to a webhook.

Does it cover food recalls? No. Safety Gate covers non-food products. Food and feed alerts are published separately, in RASFF, which this Actor does not read.

Can I export to CSV or Excel? Yes. The dataset downloads as JSON, CSV, Excel or XML, or you can read it over the Apify API.

Support

Use the Issues tab on this Actor. Include the run id and the input you used.