# EU Safety Gate (RAPEX) Product Recalls & Alerts Scraper (`scrapers_lat/eu-safety-gate-recalls-scraper`) Actor

Scrape EU Safety Gate (RAPEX) dangerous non-food product alerts: alert number, product, brand, risk type, measures (recall/withdrawal/ban), origin & notifying country, importer. JSON/CSV/Excel.

- **URL**: https://apify.com/scrapers\_lat/eu-safety-gate-recalls-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.20 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## EU Safety Gate (RAPEX) Product Recalls & Alerts Scraper

> Extract EU Safety Gate (formerly RAPEX) alerts for dangerous non-food consumer products — every weekly notification the European Commission publishes, with the product, risk, and corrective measures.

**📥 [Input](https://apify.com/scrapers_lat/eu-safety-gate-recalls-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/eu-safety-gate-recalls-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/eu-safety-gate-recalls-scraper/pricing)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-European%20Union-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>30+ fields</strong><br>per alert</td>
<td align="center"><strong>EU + EEA</strong><br>coverage</td>
<td align="center"><strong>2005 → today</strong><br>full history</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
</tr></table>

<br>

### What it does

The EU Safety Gate (previously RAPEX) is the European Commission's rapid alert system for dangerous non-food products. Every Friday it publishes new alerts covering toys, electricals, cosmetics, motor vehicles, childcare articles, chemicals, clothing and more. This scraper turns that feed into clean, structured records you can filter, export and monitor — the full archive from 2005 to the latest weekly report.

### Who is it for

| Use case | Who benefits |
|---|---|
| Monitoring new EU product safety alerts as they publish | Compliance and product safety teams |
| Screening imported goods and suppliers against EU recalls | Importers, retailers and procurement teams |
| Checking whether a brand or barcode has been flagged | Marketplace and quality-assurance teams |
| Product-risk and hazard trend analysis | Risk, insurance and data-science analysts |
| Feeding recall alerts into internal dashboards | Data engineers |

### What each alert includes

Every record carries the alert (case) number, alert level (serious risk / other risk), publication date, week and year, and the notifying country. For the product you get the category, product name, brand, model/type, specific product name, barcodes and batch numbers, plus a full description. The risk section gives the risk types (for example chemical, choking, injuries, burns, electric shock) and the full risk description. Corrective measures are captured both as readable text and as a structured list — the economic operator involved, the category of measure (recall from consumers, withdrawal from the market, ban, stop of sales) and its entry-into-force date. You also get the country of origin, whether the product was sold online and by which online trader, any company recall reference and recall page, product images, and a direct link to the official alert.

### Filters

- **Published from / to** — pull a date window, or leave empty for the most recent alerts.
- **Product category** — for example toys, electrical, cosmetics, motor vehicles.
- **Risk type** — for example chemical, choking, strangulation, burns, fire.
- **Notifying country** and **country of origin** — by name or ISO code.
- **Measure** — for example recall, withdrawal, ban, import rejection.
- **Brand / product keyword** — matches product name, brand, model, description and barcode.
- **Only products sold online** — narrow to marketplace-sold products.

### Frequently Asked Questions

**Which alerts does this cover?**\
All Safety Gate / RAPEX alerts for dangerous non-food consumer products notified by EU and EEA authorities, from 2005 to the latest weekly report. It does not cover food, feed or medicines, which are handled by separate EU systems.

**How fresh is the data?**\
A new weekly report is published every Friday. Runs always read the current published set, so newly published alerts appear as soon as the Commission releases them.

**How many alerts can I pull in one run?**\
From a handful of the latest alerts to the entire multi-year archive. Use Max alerts to cap the run, and a date range or filters to keep each pull focused.

**What happens to fields an alert does not list?**\
Fields the Safety Gate does not provide for a record — such as a barcode, a brand or a batch number — are returned as null or an empty array. The scraper never invents values.

**What does a record cost?**\
Billing is per alert returned. Failed runs return no billable records.

# Actor input Schema

## `maxAlerts` (type: `integer`):

Maximum number of Safety Gate alerts to collect. Free Apify plans are capped at 10 per run.

## `publicationDateFrom` (type: `string`):

Only include alerts published on or after this date (YYYY-MM-DD), e.g. 2026-01-01. Alerts are scanned newest-first, so a from-date makes large pulls fast. Leave empty for the most recent alerts.

## `publicationDateTo` (type: `string`):

Only include alerts published on or before this date (YYYY-MM-DD), e.g. 2026-06-30.

## `productCategory` (type: `string`):

Keyword matched against the product category, e.g. toys, electrical, cosmetics, motor vehicles, childcare. Leave empty to ignore.

## `riskType` (type: `string`):

Keyword matched against the risk type, e.g. chemical, injuries, choking, strangulation, burns, electric shock, fire. Leave empty to ignore.

## `notifyingCountry` (type: `string`):

Country that reported the alert. Name or ISO code, e.g. Germany or DE. Leave empty to ignore.

## `countryOfOrigin` (type: `string`):

Country where the product was made. Name or ISO code, e.g. China or CN. Leave empty to ignore.

## `measureType` (type: `string`):

Keyword matched against the ordered measures, e.g. recall, withdrawal, ban, import rejection, marketing prohibition. Leave empty to ignore.

## `keyword` (type: `string`):

Keyword matched against product name, brand, model/type, description and reference number, e.g. a brand name or 'lithium battery'. Leave empty to ignore.

## `soldOnlineOnly` (type: `boolean`):

If enabled, only include alerts for products that were sold online (e.g. via marketplaces).

## `maxScan` (type: `integer`):

Safety cap on how many weekly reports (newest first) are opened while collecting alerts. Each weekly report holds roughly 40-70 alerts. Raise it for large historical pulls with narrow filters.

## `proxyConfiguration` (type: `object`):

Proxy settings. EU residential proxy is recommended and used by default for reliable access to the European Commission portal.

## `withSummary` (type: `boolean`):

Optional paid AI add-on, off by default. Adds a plain-language summary of each recall (product, risk, measures). Billed only when produced. Requires a paid Apify plan.

## `withSeverity` (type: `boolean`):

Optional paid AI add-on, off by default. Classifies each recall's severity (low/medium/high/serious) with a 0-100 risk score and rationale. Billed only when produced. Requires a paid Apify plan.

## `withExtract` (type: `boolean`):

Optional paid AI add-on, off by default. Extracts structured data: product, hazard type, risk, brand, origin and recommended measures. Billed only when produced. Requires a paid Apify plan.

## Actor input object example

```json
{
  "maxAlerts": 10,
  "soldOnlineOnly": false,
  "maxScan": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  },
  "withSummary": false,
  "withSeverity": false,
  "withExtract": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxAlerts": 10,
    "maxScan": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/eu-safety-gate-recalls-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxAlerts": 10,
    "maxScan": 200,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/eu-safety-gate-recalls-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxAlerts": 10,
  "maxScan": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call scrapers_lat/eu-safety-gate-recalls-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/eu-safety-gate-recalls-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tz5L8E2e6SwkgGv9A/builds/dSupZwUVJUhDiIJbc/openapi.json
