EU Safety Gate Scraper avatar

EU Safety Gate Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
EU Safety Gate Scraper

EU Safety Gate Scraper

Scrape the European Commission's Safety Gate (RAPEX) database of dangerous product alerts. Search by keyword or alert number, filter by product category, risk type, notifying country and country of origin, or fetch a full alert report by ID.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Scrape the European Commission's Safety Gate (formerly RAPEX) database — the EU's rapid alert system for dangerous non-food products. Search or browse thousands of official product safety alerts covering toys, electronics, cosmetics, childcare articles, chemicals and more, with risk descriptions, measures taken, and country of origin/notification. No login, no API key, no cookies required.

What this actor does

  • Two modes: search (keyword + filters, paginated) and byAlertId (fetch one or more specific alerts by ID)
  • Filters: product category (34 official categories), risk type (22 official risk types), notifying country (31 EU/EEA/UK members), country of origin (any of 251 ISO countries), alert type (serious risk / other risk level / other alert type), product user (professional / consumer), publication year range, exact publication date range, sort field (publication date or alert number) with ascending/descending order
  • Free-text search across product name, brand, and alert reference number (e.g. SR/02077/26)
  • Optional full detail fetch — risk description, legal provision, measures taken (recall, ban, withdrawal, etc.), traceability (country of origin, online sale status), and reacting countries
  • 28 output languages — get the product name, description, risk description and legal provision in any of the official Safety Gate languages (all EU/EEA languages plus Norwegian, Icelandic, Ukrainian, Arabic and Irish), not just English
  • Product images — direct, hotlink-free URLs to official alert photos
  • Empty fields are omitted — every record only contains data that was actually available for that alert

Output per alert

Search mode (default, light record):

  • alertId, reference, publicationDate, modificationDate
  • productName, productNameSpecific, brand, brands[]
  • riskTypes[]
  • images[], mainImage
  • webReportCode, correctionNote — official corrigendum text, when the alert was later corrected
  • alertUrl (official Safety Gate search page carrying this alert's reference number — the site doesn't auto-run searches from a URL, so paste the reference into the on-page search box; use alertApiUrl for immediately-usable JSON), alertApiUrl

With fetchFullDetail: true or byAlertId mode, additionally:

  • notificationType, notificationTypeCode, creationDate, isImmediateNotificationtrue for an immediate/rapid Article 12 alert, false for a regular weekly-report notification
  • notifyingCountry, notifyingCountryCode
  • productCategory, productCategoryOther — free-text specific category, present only when productCategory is "Other"
  • productDescription, packageDescription
  • barcodes[], batchNumbers[], modelNumbers[] — product identifiers, when disclosed
  • riskDescription, legalProvision, riskTypeOther — free-text specific risk, present only when riskTypes includes "Other"
  • measures[]{ category, categoryOther, type, entryIntoForceDate, responsibleParty }categoryOther is the free-text specific measure, present only when category is "Other"
  • hasPublishedRecallOnline, companyRecallLinks[] — link(s) to the manufacturer/retailer's own recall notice, when published
  • countryOfOrigin, countryOfOriginCode, isSoldOnline
  • onlineMarketplaces[]{ trader, productIdentifier }, the online marketplace(s) (e.g. Amazon, AliExpress, Temu) the product was reportedly sold on, when disclosed
  • reactingCountries[]
  • professionalProduct, isCounterfeit (only present when true)

Every record also includes recordType: "safetyGateAlert" and scrapedAt.

Input

FieldTypeDefaultDescription
modestringsearchsearch or byAlertId
searchQuerystringtoyFree-text query (mode=search)
alertIdsarrayNumeric alert IDs (mode=byAlertId)
productCategoriesarray (enum)Filter by one or more product categories
riskTypesarray (enum)Filter by one or more risk types
notifyingCountriesarray (enum)Filter by notifying EU/EEA/UK country
countriesOfOriginarray (enum)Filter by country of manufacture
yearFromint2017Earliest case/reference-number year (the YY in A12/02131/23) — NOT the calendar year of publicationDate; see FAQ below
yearToint2026Latest case/reference-number year — NOT the calendar year of publicationDate; see FAQ below
publishedSincedateEarliest exact publication date (YYYY-MM-DD) — finer-grained than yearFrom, can be combined with it or used alone
publishedUntildateLatest exact publication date (YYYY-MM-DD) — finer-grained than yearTo, can be combined with it or used alone
alertTypestringSERIOUS_RISK, OTHER_RISK_LEVEL, or OTHER_ALERT_TYPE — filter by alert severity/classification. Leave empty for all
productUserstringPROFESSIONAL or CONSUMER — filter by whether the product is intended for professional/business or general consumer use. Leave empty for all
sortFieldstringPUBLICATION_DATEPUBLICATION_DATE or ALERT_NUMBER — which field to sort by
sortOrderstringDESCDESC (newest/highest first) or ASC (oldest/lowest first), applied to sortField
fetchFullDetailbooleanfalseFetch full detail report for every result (mode=search)
outputLanguagestringenLanguage for product name/description and risk description/legal provision text (28 languages supported)
maxItemsint50Hard cap on emitted records (1–1000)

Example: recent toy alerts with full risk detail

{
"mode": "search",
"searchQuery": "toy",
"productCategories": ["TOYS"],
"yearFrom": 2024,
"yearTo": 2026,
"fetchFullDetail": true,
"maxItems": 100
}

Example: browse all cosmetics alerts from China, newest first

{
"mode": "search",
"productCategories": ["COSMETICS"],
"countriesOfOrigin": ["CN"],
"sortOrder": "DESC",
"maxItems": 200
}

Example: fetch specific alerts by ID

{
"mode": "byAlertId",
"alertIds": ["10099540", "10118542"]
}

Example: alerts published in a specific week

{
"mode": "search",
"publishedSince": "2026-08-01",
"publishedUntil": "2026-08-07",
"maxItems": 200
}

Example: German-language alert reports

{
"mode": "search",
"productCategories": ["ELECTRICAL_APPLIANCES"],
"fetchFullDetail": true,
"outputLanguage": "de",
"maxItems": 50
}

FAQs

Do I need an API key or login? No. Safety Gate publishes its alert database publicly with no authentication required.

Why do some alerts have fewer fields than others? Not every alert includes every field (e.g. brand, notifying country, or country of origin may be unknown or undisclosed by the reporting authority). Only fields that Safety Gate actually populated are included in the output — there are no placeholder or "N/A" values.

What's the difference between search and fetchFullDetail: true? search alone returns a lightweight summary card per alert (fast, good for browsing). Setting fetchFullDetail: true fetches the full official report for each matching alert, including the risk description, legal basis, and measures taken — slower, but the same data shown on the alert's detail page.

How current is the data? Safety Gate is updated by the European Commission on an ongoing basis (multiple new alerts published daily). This actor always queries the live database.

Can I search by alert reference number? Yes — searchQuery also matches reference numbers like SR/02077/26.

Can I filter by an exact date instead of just a year? Yes — publishedSince and publishedUntil accept exact YYYY-MM-DD dates and can be used together with (or instead of) yearFrom/yearTo for day-level precision, e.g. to get only alerts from a specific week.

Why does yearFrom/yearTo return alerts published outside that range? yearFrom/yearTo filter by the case/reference-number year (the YY in a reference like A12/02131/23), not by the calendar year the alert was actually published. Immediate Article 12 notifications are opened under one year's case number but can go through review and only get published 1-2+ years later, so a case from 2023 can have a 2026 publicationDate. If you need the actual calendar publication date, use publishedSince/publishedUntil instead — those filter directly on publicationDate.

Can I get the alert text in a language other than English? Yes — set outputLanguage to any of the 28 supported language codes (e.g. de, fr, es, pl). This translates the product name, description, risk description, and legal provision. Category, risk-type and country labels are always shown in English regardless of this setting, and searchQuery matching is unaffected by outputLanguage.

What's the difference between riskTypes and alertType? riskTypes filters by the kind of hazard (e.g. Choking, Fire, Chemical). alertType filters by the alert's severity/classification instead — SERIOUS_RISK for immediate Article 12 notifications, OTHER_RISK_LEVEL for regular weekly-report alerts with a lower risk level, or OTHER_ALERT_TYPE for non-risk-based notifications (e.g. a corrective-measure-only alert). The two filters can be combined.

What does productUser filter on? It restricts results to products the notifying authority classified as intended for professional/business use (PROFESSIONAL) versus general consumer use (CONSUMER) — e.g. industrial machinery vs. a household toy. Leave it empty to get both. With fetchFullDetail: true or byAlertId mode, the corresponding professionalProduct: true output field is also included on professional-use alerts.