# France Product Recall API — RappelConso & Barcodes (`jet_mythology/france-product-recalls`) Actor

Know the same day when a product you sell is recalled in France. Every official RappelConso recall as clean JSON with barcodes (GTIN/EAN), brand, risk and shops. Check your catalogue by barcode or get daily alerts.

- **URL**: https://apify.com/jet_mythology/france-product-recalls.md
- **Developed by:** [jet_mythology](https://apify.com/jet_mythology) (community)
- **Stats:** 2 total users, 1 monthly users, 92.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 recall returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## France Product Recall API — RappelConso & Barcodes

**Know the same day when a product you sell, deliver or list is recalled in France.** Paste your barcodes or schedule a daily run: you get only the recalls that concern you, with the official notice.

**No code needed:** click *Start*, then download the results as **Excel, CSV or JSON**, or send them to Google Sheets, Make, Zapier or n8n. Developers can call it as an **API** or schedule it daily.

### Sample output

```json
{
  "publishedDate": "2026-10-09",
  "title": "crevettes entières cuites réfrigérées élevage penaeus monodon 300g calibre 30/40",
  "brand": "signature du poissonnier",
  "category": "alimentation",
  "subCategory": "produits de la pêche et d'aquaculture",
  "gtins": [
    "3700156962272"
  ],
  "reason": "présence listéria monocytogènes",
  "risks": "listeria monocytogenes (agent responsable de la listériose)",
  "saleArea": [
    "france entière"
  ],
  "distributors": "worldmarechal",
  "url": "https://rappel.conso.gouv.fr/fiche-rappel/23743/interne"
}
```

*Real result from 9 October 2026 (abridged).*

### Details

Get **every product recall published by the French authorities** on RappelConso as clean JSON: product, brand, **barcodes (GTIN/EAN)**, reason, risks, sale area, distributors, consumer actions, images and the official notice link.

Three ways to use it:

1. **Recent recalls**: everything published in the last N days, filtered by category, brand, keyword or département.
2. **Barcode check**: paste your product barcodes and get every recall that lists one of them, across the whole history.
3. **Monitoring**: schedule it daily and receive only new recalls (and updated notices).

### Who uses it

- **Retailers, marketplaces and e-shops**: check your catalogue against official recalls and react the same day.
- **Grocery, delivery and price-comparison apps**: show recall warnings on product pages.
- **Quality, compliance and insurance teams**: keep an auditable log of recalls in your sector.
- **Journalists and researchers**: analyse recalls by category, reason or brand.

### What you get

| Field | Description |
|---|---|
| `ficheNumber`, `version`, `isUpdate` | Official notice number and version |
| `publishedAt`, `publishedDate` | Publication date |
| `title`, `brand`, `category`, `subCategory` | Product identity |
| `gtins` | Recalled barcodes, normalised to 13 digits (empty when the notice lists none) |
| `modelsOrReferences`, `productIdentification`, `packaging` | Batches, use-by dates, references |
| `marketingStart`, `marketingEnd` | When the product was on sale |
| `saleArea`, `departments`, `nationwide` | Where it was sold (parsed département codes) |
| `distributors` | Shops and chains concerned |
| `reason`, `risks`, `healthAdvice` | Why it is recalled and what the risk is |
| `consumerActions`, `compensation`, `recallEndDate` | What consumers must do, refund terms |
| `imageUrls`, `posterPdfUrl`, `url` | Product photos, official poster, official notice |

A run summary (counts by category and brand, barcodes with a recall) is saved under `OUTPUT` in the key-value store.

### Examples

**Food recalls of the last 7 days sold in Gironde or nationwide**

```json
{ "lastNDays": 7, "categories": ["alimentation"], "departments": ["33"] }
```

**Check a product list by barcode**

```json
{ "gtins": ["3700156962272", "3289660022561", "0012345678905"] }
```

**Daily alert for Listeria and Salmonella recalls**

```json
{ "keywords": ["listeria", "salmonelle"], "monitorNewRecalls": true, "monitorKey": "food-safety", "lastNDays": 7 }
```

### Pricing

Pay per event: a small fee per recall returned, and a much smaller one per barcode checked. Nothing for recalls filtered out. In monitor mode you only pay for new recalls. Set a maximum cost per run in the run options to cap spending.

### Good to know

- Data comes from the two official RappelConso V2 datasets published by the French Ministry of Economy (DGCCRF) on data.gouv.fr, refreshed daily.
- Barcodes are only available when the manufacturer entered them; some notices identify products by batch or description only. Barcode checks therefore complement, but do not replace, reading the notices in your sector.
- By default only the latest version of each notice is returned (`allVersions` to get them all).
- Text fields are kept as published (French, lower case).

### Source and licence

RappelConso, Ministère de l'Économie (DGCCRF), via data.gouv.fr, under Licence Ouverte / Open Licence 2.0. This Actor is independent and not affiliated with the French administration.

# Actor input Schema

## `lastNDays` (type: `integer`):

Time window for recent recalls. Ignored if 'Published since' is set, and in barcode mode (which searches the whole history).

## `publishedSince` (type: `string`):

Only recalls published on or after this date (YYYY-MM-DD).

## `gtins` (type: `array`):

Paste your product barcodes (EAN-13, EAN-8, UPC, GTIN-14). The run returns every recall that lists one of them. Leading zeros and spaces are handled.

## `categories` (type: `array`):

Partial match on the category or sub-category, in French, e.g. 'alimentation', 'hygiène', 'bébé', 'jouets', 'électrique'.

## `brands` (type: `array`):

Partial, case- and accent-insensitive match.

## `keywords` (type: `array`):

Matches product name, brand, references, identification, reason or risks (e.g. 'listeria', 'salmonelle', 'allergène').

## `departments` (type: `array`):

French département codes where the product was sold, e.g. '33', '75', '2A'.

## `includeNationwide` (type: `boolean`):

With a département filter, also keep recalls whose sale area is 'France entière'.

## `allVersions` (type: `boolean`):

By default only the latest version of each recall notice is returned.

## `maxResults` (type: `integer`):

Upper limit of recalls output (and charged) per run.

## `monitorNewRecalls` (type: `boolean`):

Remembers the recalls already output and returns only new ones (and new versions) on the next runs. Schedule the Actor daily.

## `monitorKey` (type: `string`):

Use one name per saved search you monitor.

## `monitorFirstRun` (type: `string`):

What to do the first time a monitor runs.

## Actor input object example

```json
{
  "lastNDays": 30,
  "includeNationwide": true,
  "allVersions": false,
  "maxResults": 500,
  "monitorNewRecalls": false,
  "monitorKey": "default",
  "monitorFirstRun": "outputAll"
}
```

# Actor output Schema

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

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("jet_mythology/france-product-recalls").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("jet_mythology/france-product-recalls").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 '{}' |
apify call jet_mythology/france-product-recalls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jet_mythology/france-product-recalls"
        }
    }
}
```

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/DD97mqSIDahuYqVVG/builds/2gLqp6vDiE5HHwVdH/openapi.json
