EU GPSR Listing Checker for Amazon, eBay & Shops avatar

EU GPSR Listing Checker for Amazon, eBay & Shops

Pricing

from $3.00 / 1,000 results

Go to Apify Store
EU GPSR Listing Checker for Amazon, eBay & Shops

EU GPSR Listing Checker for Amazon, eBay & Shops

Check product listings for the EU General Product Safety Regulation (GPSR) Article 19 online-sale information: manufacturer name, postal and electronic address, EU responsible person for non-EU makers, product identifier, picture, and warnings in the local language. Per-gap sources.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Ultimate Foresight Inc

Ultimate Foresight Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Check Amazon, eBay, Allegro, Etsy, Shopify and marketplace product listings for the information the EU General Product Safety Regulation (GPSR, Regulation (EU) 2023/988) requires for online sales since December 13, 2024. The EU GPSR Listing Checker looks at Article 19: the manufacturer's name, postal and electronic address, the EU responsible person when the maker is outside the EU, a product identifier (type, batch, serial, model or GTIN), a picture, and warnings or safety information, including whether warnings appear in the language of the target market. Click Start with the prefilled example to see it work.

This is an automated screen of the listing data you supply against the GPSR Article 19 information list, not a legal determination. A clean result doesn't mean a product or listing meets the GPSR or product-specific EU rules. Not legal advice; every row carries this disclaimer and a timestamp. Addresses and emails are only checked, never copied into the output.

What does the EU GPSR Listing Checker do?

  • ✅ Manufacturer (Art. 19(a)): missing, placeholder names like "N/A" or "see packaging", missing postal address, missing email or contact page, and website-only contact details.
  • ✅ EU responsible person (Art. 19(b), Art. 16): required when the manufacturer is outside the EU. Flags a missing responsible person, one without postal or electronic address, and one located outside the EU (for example only in the UK).
  • ✅ Country detection for EU, EEA and non-EU countries from addresses, including common Chinese manufacturing cities.
  • ✅ Product identifier (Art. 19(c)): type, batch, serial or model number, or a GTIN/EAN, ASIN or SKU.
  • ✅ Picture: at least one product image supplied.
  • ✅ Warnings and safety information (Art. 19(d)) for categories that usually need them (toys, electrical items, chemicals, childcare and sports products), plus a check for English-only warnings on German, French, Italian, Spanish, Dutch, Polish and Swedish marketplaces.
  • ✅ Output per listing: manufacturerFound, manufacturerCountry, responsiblePersonFound, productIdentifierFields, pictureFound, warningsFound, riskLevel, issues (ruleId, severity, message, sourceUrl, fixHint), checkedAt and a disclaimer.

Who is it for?

  • Amazon, eBay and Etsy sellers shipping to EU marketplaces who need to fill in GPSR fields across a catalog.
  • Non-EU brands and Chinese manufacturers checking that an EU responsible person is shown.
  • Marketplace operators and agencies auditing seller listings in bulk.
  • Compliance and data teams monitoring scraped listings for missing GPSR information.

How to check listings for GPSR information

  1. Click Start with the prefilled example (a Chinese charger without an EU responsible person, a complete EU listing and a UK toy maker).
  2. Replace Products with your own: title, manufacturer and responsiblePerson (text or name, address, email, url), identifiers, images, warnings, category and market.
  3. Or enter a Dataset ID from an Amazon, eBay, Allegro, Otto or Shopify scraper. Common fields are detected automatically; use Field map with dotted paths for nested ones.
  4. Set Target market (for example DE) to check the warning language.
  5. Turn on Only save rows with findings to skip clean listings, then export as CSV, Excel or JSON.

Input example

This is the prefilled input:

{
"products": [
{
"id": "EXAMPLE-CHARGER",
"title": "Example 65W USB-C charger",
"model": "C65",
"images": [
"https://example.com/charger.jpg"
],
"market": "DE",
"manufacturer": {
"name": "Example Tech Co., Ltd.",
"address": "Bao'an District, Shenzhen 518000, China",
"email": "support@example.com"
},
"warnings": "Warning: indoor use only. Keep away from water."
},
{
"id": "EXAMPLE-MUG",
"title": "Example ceramic mug 350 ml",
"ean": "4006381333931",
"images": [
"https://example.com/mug.jpg"
],
"manufacturer": {
"name": "Example Keramik GmbH",
"address": "Musterstraße 12, 10115 Berlin, Germany",
"email": "info@example.de"
}
},
{
"id": "EXAMPLE-BLOCKS",
"title": "Example wooden building blocks toy",
"sku": "BLK-50",
"market": "FR",
"manufacturer": "Example Toys Ltd, 1 High Street, London SW1A 1AA, United Kingdom, www.example.co.uk"
}
]
}

Dataset mode:

{"datasetId": "YOUR_DATASET_ID", "fieldMap": {"manufacturer": "gpsr.manufacturerInfo", "responsiblePerson": "gpsr.euResponsiblePerson"}, "market": "DE", "onlyFlagged": true}

Output example

Real output from a run of the prefilled input on 2026-10-31 (long finding lists are shortened here; the run returns all of them):

[
{
"itemNo": 1,
"productId": "EXAMPLE-CHARGER",
"title": "Example 65W USB-C charger",
"manufacturerFound": true,
"manufacturerCountry": "CN",
"manufacturerZone": "non-EU",
"manufacturerPostalFound": true,
"manufacturerElectronicFound": true,
"responsiblePersonFound": false,
"responsiblePersonCountry": null,
"productIdentifierFields": [
"model"
],
"pictureFound": true,
"warningsFound": true,
"warningCategories": [
"electrical"
],
"riskLevel": "high",
"issueCount": 2,
"categoriesFlagged": [
"responsible_person_missing",
"warnings_language"
],
"issues": [
{
"ruleId": "responsible_person_missing",
"severity": "high",
"article": "Art. 19(b)",
"message": "The manufacturer appears to be outside the EU (CN) and no EU responsible person was found. Art. 19(b) requires the responsible person's name, postal and electronic address in the offer.",
"sourceUrl": "https://eur-lex.europa.eu/eli/reg/2023/988/oj/eng",
"fixHint": "Add the EU responsible person (importer, authorised representative or fulfilment service provider) with postal and electronic address."
},
{
"ruleId": "warnings_language",
"severity": "low",
"article": "Art. 19(d)",
"message": "Warning text appears to be in English only for a DE storefront. Art. 19(d) requires a language easily understood by consumers, as set by the Member State.",
"sourceUrl": "https://eur-lex.europa.eu/eli/reg/2023/988/oj/eng",
"fixHint": "Add the warnings in the official language(s) for DE."
}
],
"url": null,
"checkedAt": "2026-10-31T18:43:38+00:00",
"disclaimer": "Automated screening of the listing data supplied against the information list in Article..."
},
{
"itemNo": 2,
"productId": "EXAMPLE-MUG",
"title": "Example ceramic mug 350 ml",
"manufacturerFound": true,
"manufacturerCountry": "DE",
"manufacturerZone": "EU",
"manufacturerPostalFound": true,
"manufacturerElectronicFound": true,
"responsiblePersonFound": false,
"responsiblePersonCountry": null,
"productIdentifierFields": [
"gtin"
],
"pictureFound": true,
"warningsFound": false,
"warningCategories": [],
"riskLevel": "none found",
"issueCount": 0,
"categoriesFlagged": [],
"issues": [],
"url": null,
"checkedAt": "2026-10-31T18:43:38+00:00",
"disclaimer": "Automated screening of the listing data supplied against the information list in Article..."
},
{
"itemNo": 3,
"productId": "EXAMPLE-BLOCKS",
"title": "Example wooden building blocks toy",
"manufacturerFound": true,
"manufacturerCountry": "GB",
"manufacturerZone": "non-EU",
"manufacturerPostalFound": true,
"manufacturerElectronicFound": false,
"responsiblePersonFound": false,
"responsiblePersonCountry": null,
"productIdentifierFields": [
"sku"
],
"pictureFound": false,
"warningsFound": false,
"warningCategories": [
"toys"
],
"riskLevel": "high",
"issueCount": 4,
"categoriesFlagged": [
"manufacturer_website_only",
"picture_missing",
"responsible_person_missing",
"warnings_missing"
],
"issues": [
{
"ruleId": "manufacturer_website_only",
"severity": "medium",
"article": "Art. 19(a)",
"message": "Only a website was found as the manufacturer's electronic address. Commission guidance says a website alone isn't enough unless it allows direct contact.",
"sourceUrl": "https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=OJ%3AC_202506233",
"fixHint": "Add an email address or a direct contact-page URL."
},
{
"ruleId": "responsible_person_missing",
"severity": "high",
"article": "Art. 19(b)",
"message": "The manufacturer appears to be outside the EU (GB) and no EU responsible person was found. Art. 19(b) requires the responsible person's name, postal and electronic address in the offer.",
"sourceUrl": "https://eur-lex.europa.eu/eli/reg/2023/988/oj/eng",
"fixHint": "Add the EU responsible person (importer, authorised representative or fulfilment service provider) with postal and electronic address."
},
{
"...": "2 more findings: picture_missing 'No product picture found. Art. 19(c) requires a pi', warnings_missing 'Product looks like toys but no warning or safety t'"
}
],
"url": null,
"checkedAt": "2026-10-31T18:43:38+00:00",
"disclaimer": "Automated screening of the listing data supplied against the information list in Article..."
}
]

How much does it cost to check listings for GPSR?

This Actor uses pay-per-event pricing: $0.003 per listing saved plus a $0.00005 start fee per run, plus small platform usage paid by you (a few hundredths of a cent for small runs). That's about $3.00 for 1,000 listings and $30.00 for 10,000 plus usage. With Only save rows with findings on, rows without findings aren't saved or charged. You can set a maximum cost per run in the run options.

Use it through the API, integrations or AI agents

  • Run it and get results in one call: https://api.apify.com/v2/acts/ultimatemc~gpsr-listing-checker/run-sync-get-dataset-items
  • Use it from AI agents through the Apify MCP server: https://mcp.apify.com?tools=ultimatemc/gpsr-listing-checker
  • Schedule it after a daily scraper run, send flagged rows to Slack or email with webhooks, or connect it to Make, Zapier, n8n or Google Sheets.
  • Chain it after a marketplace scraper by passing the scraper's dataset ID.

How it works

Checks are deterministic rules written from the text of Regulation (EU) 2023/988 (Articles 9, 16 and 19) and the European Commission's GPSR guidance, checked on 2026-10-31. Postal addresses are recognised by street and postcode patterns, electronic addresses by email or contact-page URLs, and countries by name, ISO code and major city lists. No AI and no external calls.

Sources:

FAQ

Do EU manufacturers need a responsible person?

No. If the manufacturer is established in the EU it is the responsible economic operator, so no separate responsible person is flagged.

Is a UK address enough?

Not for the EU. A responsible person only in the UK is flagged, because Article 16 requires one established in the EU.

Why is a website-only contact flagged?

The Commission's guidance says an electronic address means an email or a contact page, so a plain homepage gets a medium finding.

Does it output addresses or emails?

No. It only reports whether they were found and the country, which keeps personal data out of your results.

Is it AI?

No. It's a fixed set of rules, so results are repeatable.

Limitations

  • It checks text and fields, not the product, its risk assessment or technical documentation.
  • Category detection for warnings is keyword-based and can miss or over-include items.
  • Product-specific EU laws (toys, electrical, cosmetics) may need more information than GPSR Article 19.
  • Language detection only distinguishes English-only warnings from local-language ones.

Other tools by Ultimate Foresight

Found a false positive? Open an issue on the Issues tab with the listing data and what you expected, and we'll review the rule.