EU Safety Gate recall alerts by GTIN, brand and category
Pricing
from $2.00 / 1,000 recall alert returneds
EU Safety Gate recall alerts by GTIN, brand and category
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 $2.00 / 1,000 recall alert returneds
Rating
0.0
(0)
Developer
Kittiwake Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
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 export | this Actor | |
|---|---|---|
measures | one run-together string: …were ordered: ManufacturerCategory of measure(s): Recall of the product from end usersDate of entry into force: 14/08/2026 | a list of {economicOperator, category, inForceFrom, ordered} — and ordered tells you mandatory vs voluntary |
| dates | 14/08/2026, or the literal Unknown | ISO 2026-08-14, or null. Never a wrong date |
| barcodes | as printed, sometimes empty | digits only, plus a GTIN check-digit result — and null when it isn't checkable, so you can tell "invalid" from "unknown" |
| online traders | Other(www.a.dewww.b.de) / | [{platform: "Other", reference: "www.a.de"}, {platform: "Other", reference: "www.b.de"}] |
| your catalogue | you write the matching | watchBarcodes / watchBrands — matched rows carry watchlistMatch, and onlyWatchlistMatches returns just those |
| duplicates | a case can reappear in a later report | deduplicated by case number within a run |
| attribution | you have to add it yourself | the 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
| field | type | default | what it does |
|---|---|---|---|
weeks | integer | 4 | How many of the most recent weekly reports to read |
sinceDate | YYYY-MM-DD | — | Read every report published on or after this date. Overrides weeks |
categories | string[] | all | e.g. Toys, Cosmetics, Electrical appliances and equipment |
riskLevels | string[] | all | e.g. Serious risk |
notifyingCountries | string[] | all | e.g. Germany |
alertTypes | string[] | both | Consumer or Professional |
keywords | string[] | — | Free text across product, brand, description, hazard, category, risk type and model |
watchBarcodes | string[] | — | Your GTINs. Punctuation ignored |
watchBrands | string[] | — | Your brands. Case-insensitive, matched both ways |
onlyWatchlistMatches | boolean | false | Return only watchlist hits |
includePictures | boolean | false | Add product photo URLs |
maxAlerts | integer | — | Stop after N alerts |
requestDelayMs | integer | 1000 | Pause 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
| event | price | when |
|---|---|---|
| Recall alert returned | $0.002 | one alert written to the dataset, after it is saved |
| Weekly report read | $0.01 | one weekly report fetched and parsed — only when both succeed |
| Watchlist match | $0.05 | an alert matched one of your barcodes or brands. Zero if you supply no watchlist |
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 unrecognisedmeasuresshape 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"
Support
Use the Issues tab on this Actor. Include the run id and the input you used.