# EU Packaging EPR Check (PPWR) for Online Sellers (`nikolaj2127/eu-packaging-epr-check`) Actor

Tells you which packaging EPR registrations, authorised representatives, schemes and labels a seller needs to sell into Germany, France or Spain under the EU Packaging Regulation. Built for AI agents and marketplace tools.

- **URL**: https://apify.com/nikolaj2127/eu-packaging-epr-check.md
- **Developed by:** [Nicolas Nichtawitz](https://apify.com/nikolaj2127) (community)
- **Categories:** Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 country epr checks

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

## EU Packaging EPR Check (PPWR) for Online Sellers

Since 12 August 2026 the EU Packaging Regulation (PPWR, Reg. 2025/40) makes packaging EPR compliance a condition for selling online. Marketplaces must check that sellers are registered in every country they ship to, and there is no single EU number. This Actor tells you, per destination country, what a seller has to do.

**Covered:** Germany, France, Spain. More countries are coming.

### What you get per country

- The registry to join (LUCID, ADEME SYDEREP, MITECO) and its link
- Each obligation that applies to *this* seller: registration, compliance scheme, authorised representative, labelling (Triman), declarations, what to show on invoices or terms of sale
- Penalties, typical costs where known, and upcoming changes
- What the marketplace will check
- An optional **format check** of registration numbers you already have
- A confidence level and source links on every obligation, plus the date the rules were last reviewed

### Input

```json
{
  "destination_countries": ["DE", "FR", "ES"],
  "seller_country": "NL",
  "sales_channel": "marketplace",
  "b2c": true,
  "registration_numbers": {"DE": "DE1234567899999"}
}
```

`seller_country` is where the seller is established; the result changes for domestic, other-EU and non-EU sellers. `sales_channel` is `own_webshop`, `marketplace` or `both`.

### Output (one item per country, abbreviated)

```json
{
  "destination": "FR",
  "seller_relation": "other_eu",
  "registry": {"name": "ADEME SYDEREP producer register (identifiant unique, IDU)", "url": "https://www.syderep.ademe.fr"},
  "obligations": [
    {"id": "fr_mandataire", "title": "Appoint a French authorised representative (mandataire)", "legal_basis": "L.541-10-9-1 (loi n° 2026-602)", "confidence": "medium", "sources": ["https://..."]},
    {"id": "fr_triman", "title": "Put Triman and Info-tri on household packaging", "confidence": "medium", "sources": ["https://..."]}
  ],
  "penalties": {"summary": "Up to €30,000 for no registration or missing IDU; ..."},
  "number_check": null,
  "rules_as_of": "2026-10-24"
}
```

### For AI agents

Through the Apify MCP server this Actor is a callable tool. Typical uses: a listing agent checks obligations before publishing a product in a new country; a seller-support agent answers "do I need a French representative?"; an onboarding flow validates registration-number formats.

### Pricing

Pay per event: you pay only for each covered country checked. Uncovered countries return a free "not covered" item.

### Limits

This is an automated checklist built from public sources. It is not legal advice. Number checks verify the format only, not that the number is registered. Sources are mostly official pages and law-firm summaries; each obligation shows its confidence.

# Actor input Schema

## `destination_countries` (type: `array`):

Two-letter ISO codes of the countries you ship packaged goods to. Covered now: DE, FR, ES.

## `seller_country` (type: `string`):

Two-letter ISO code of the country where the seller is established, e.g. DE, NL, US, CN.

## `sales_channel` (type: `string`):

Where you sell to consumers.

## `b2c` (type: `boolean`):

Set false if you only sell to businesses.

## `registration_numbers` (type: `object`):

Map of country code to an EPR registration number. The format is checked; the number is not looked up in the registry.

## Actor input object example

```json
{
  "destination_countries": [
    "DE",
    "FR",
    "ES"
  ],
  "seller_country": "NL",
  "sales_channel": "both",
  "b2c": true,
  "registration_numbers": {}
}
```

# 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 = {
    "destination_countries": [
        "DE",
        "FR",
        "ES"
    ],
    "seller_country": "NL",
    "registration_numbers": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("nikolaj2127/eu-packaging-epr-check").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 = {
    "destination_countries": [
        "DE",
        "FR",
        "ES",
    ],
    "seller_country": "NL",
    "registration_numbers": {},
}

# Run the Actor and wait for it to finish
run = client.actor("nikolaj2127/eu-packaging-epr-check").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 '{
  "destination_countries": [
    "DE",
    "FR",
    "ES"
  ],
  "seller_country": "NL",
  "registration_numbers": {}
}' |
apify call nikolaj2127/eu-packaging-epr-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nikolaj2127/eu-packaging-epr-check"
        }
    }
}
```

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/IVAIdaLIi4lLS6Vj4/builds/IPOq3nCPMLlxyJOGm/openapi.json
