UPV Classificatiechecker — Producentenverantwoordelijkheid NL
Pricing
from $3.00 / 1,000 classificatie-resultaats
UPV Classificatiechecker — Producentenverantwoordelijkheid NL
Bepaal op basis van een productomschrijving of GN/HS-code onder welke UPV-categorie (Uitgebreide Producentenverantwoordelijkheid) een product in Nederland valt: wettelijk, vrijwillig, of financieel.
UPV Classificatiechecker — Uitgebreide Producentenverantwoordelijkheid 🇳🇱
Check in seconds whether a product falls under one of the Dutch UPV (Uitgebreide Producentenverantwoordelijkheid / Extended Producer Responsibility) categories — textiles, packaging, batteries, mattresses, and 9 more — and whether that obligation is legally mandatory, voluntary, or a financial-only contribution.
When should an AI agent use this?
- "Does a kindermatras (children's mattress) fall under a Dutch UPV category, and is it mandatory or voluntary?"
- "Check whether our winterjassen (winter coats) product line triggers a UPV textile obligation."
- "We sell 60,000 kg of packaging per year — does that cross the UPV packaging threshold?"
- "Which of these 20 products in our catalog are subject to a wettelijke (legal), vrijwillige (voluntary), or financiële (financial-only) UPV obligation?"
- "Is 'vochtige doekjes' (wet wipes) a full UPV responsibility scheme or just a financial contribution?"
- "Given a direct category code like 'batterijen' or 'vistuig', what UPV obligation applies?"
Why this matters
UPV isn't one regulation — it's a growing family of product categories (textiles, packaging, single-use plastics, mattresses, fishing gear, flat glass — with shoes, diapers and furniture already announced for future inclusion). Even businesses that think they're outside UPV's scope can be caught by surprise through packaging or components. This Actor gives a fast first answer per product line, so you know when to dig deeper.
What this Actor does
- Maps a free-text product description (or a direct category code) to 1 of 13 UPV categories
- Distinguishes between wettelijk (legally mandatory), vrijwillig (voluntary sector covenant), and financieel (financial contribution only, e.g. under the Single-Use Plastics directive)
- Applies the 50,000 kg/year packaging threshold when a quantity is supplied
- Supports bulk classification of an entire product catalog in one run
- Flags match confidence (
hoog/middel/laag) — free-text matching against product descriptions is inherently approximate, and this Actor shows that honestly instead of pretending certainty - 100% static rule engine — no scraping, no external API calls at runtime
Input
| Field | Type | Description |
|---|---|---|
productomschrijving | string | Free-text product description, e.g. "kindermatras" or "partij winterjassen" |
categorie | string | Direct category code instead of free text, e.g. "textiel", "verpakkingen", "batterijen" — takes priority if both are given |
jaarlijkseHoeveelheidKg | integer | Only relevant for the verpakkingen category: annual packaging weight in kg, for the 50,000 kg threshold check |
producten | array | Bulk mode: a list of objects with the same fields above (plus an optional label per item) |
trackWijzigingen | boolean | Compares each product's UPV status against the previous run (via this Actor's key-value store) and flags an actual status change. Default false |
Output
{"input": { "productomschrijving": "partij winterjassen en truien voor de webshop" },"matches": [{"code": "textiel","codeTitel": "Textiel (consumentenkleding, bedrijfskleding, huishoudtextiel)","productgroepNaam": "Textiel","categorie": "wettelijk","matchZekerheid": "hoog","toelichting": "Van kracht sinds 1 juli 2023. ...","volgendeStap": {"uitvoeringsorganisatie": "Stichting UPV Textiel","registratieUrl": "https://www.stichtingupvtextiel.nl/aanmelden/","aanmeldtermijn": null,"opmerking": "Jaarlijkse rapportageplicht vanaf augustus 2026 aangekondigd — verifieer de exacte datum bij Stichting UPV Textiel."}}],"status": "wettelijk_verplicht","toelichting": "Match met wettelijke UPV-categorie(ën): Textiel. ...","disclaimer": "Dit is een indicatieve classificatie ... GEEN juridisch bindend advies.","regelsetLaatstGeverifieerd": "2026-07-12","wijzigingsAlert": null}
status:wettelijk_verplicht,vrijwillig_van_toepassing,financiele_bijdrage_verplicht,onder_drempel,buiten_scope, oronbekendregelsetLaatstGeverifieerd: the date the underlying UPV rule set was last checked against ilent.nl/afvalcirculair.nl. UPV is a growing family of categories (shoes, diapers, and furniture have been announced) — this field tells you how fresh the classification logic is, so you know when to double-check.matches: can contain more than one category if a product spans multiple UPV categoriesvolgendeStap(per match): the executing organization and registration URL, live-verified on 2026-07-16 per category.uitvoeringsorganisatie/registratieUrlarenullwhen no reliable current source was found (never a guess) —opmerkingexplains why, and flags categories where the organizational setup was itself unsettled/in transition at verification time (notably the three financial-only SUP categories).wijzigingsAlert:nullunlesstrackWijzigingenis enabled and a real status change vs. the previous run was detected — see below- If nothing matches your free-text description, the response suggests the exact category codes you can try directly instead
Change tracking (trackWijzigingen, optional, separately charged)
With trackWijzigingen: true, each product's UPV status is compared against the previous run (stored in
this Actor's key-value store) and, when it actually changed, wijzigingsAlert is filled:
{ "wijzigingsAlert": { "vorigeStatus": "onder_drempel", "huidigeStatus": "wettelijk_verplicht" } }
Products are identified across runs via the optional label field (recommended for scheduled/bulk runs) —
without a label, the actor falls back to a key derived from categorie+productomschrijving, so changing
that text without a label is treated as a different product, not a status change of the same one. Charged
as wijzigings-alert, only when a status change is actually detected (never on the first run for a product).
Bulk runs (more than 1 product) also get one summary record at the end (catalogus-samenvatting event, $0.015 flat per run):
{"type": "catalogusSamenvatting","aantalProducten": 20,"perStatus": { "wettelijk_verplicht": 12, "vrijwillig_van_toepassing": 2, "financiele_bijdrage_verplicht": 1, "onder_drempel": 1, "buiten_scope": 4, "onbekend": 0 },"uniekeProductgroepen": ["Textiel", "Verpakkingen", "Batterijen"],"aantalMetLageMatchZekerheid": 3}
The 13 UPV categories covered
Wettelijk (mandatory): autobanden, auto's, batterijen, elektrische/elektronische apparatuur, textiel, verpakkingen, vistuig Vrijwillig (voluntary): papier en karton, vlakglas, consumentenmatrassen Financieel (financial contribution only): vochtige doekjes, ballonnen, tabaksfilters
Use cases
- Webshop owners & importers: check your product catalog for UPV obligations before you start selling
- Compliance consultants: bulk-classify a client's full product range in one run
- Sourcing/procurement teams: flag which new product lines will trigger a new UPV registration
- AI agents: structured JSON output, ideal as an MCP tool for compliance-assistant workflows
Pricing
This Actor uses Apify's Pay-Per-Event (PPE) pricing model.
- Actor Start: $0.00005 (Apify default)
- classificatie-resultaat: $0.006 per classified product (increased from $0.003 — every match now
includes actionable
volgendeStapinfo: the executing organization and registration URL, not just a bare category label) - catalogus-samenvatting: $0.015 flat, only charged once per run with 2+ producten
- wijzigings-alert: $0.01 extra, only with
trackWijzigingenenabled and an actual status change detected vs. the previous run
Legal
- Based on official Dutch sources (ilent.nl, afvalcirculair.nl / Rijkswaterstaat), cross-referenced 2026-07-12.
- This is an indicative classification, not legal advice. Free-text matching against product descriptions is inherently approximate — see
matchZekerheidper result. Always verify with ilent.nl or a compliance advisor before making registration decisions. - No personal data is processed — only product-level classification data.
FAQ
Q: My product description didn't match anything — does that mean I'm not covered?
A: Probably, but the rule set isn't exhaustive and free-text matching has limits. Try a direct categorie code (the response lists all 13 codes when nothing matches) or check ilent.nl yourself.
Q: Are shoes covered under Textiel? A: Some secondary sources mention shoes joining UPV Textiel from 2026, but this Actor's rule set does NOT assume that — it's not confirmed on the official ILT page at the time of writing. Verify separately if this applies to you.
Q: What's the difference between "wettelijk", "vrijwillig" and "financieel"? A: "Wettelijk" means a full legal producer-responsibility scheme applies (registration, reporting, financing waste management). "Vrijwillig" means there's a sector covenant but no legal obligation. "Financieel" means only a financial contribution is required (typically under the EU Single-Use Plastics directive), not a full responsibility scheme.
Related Actors
- ../nis2-sbi-sector-mapper — the sibling Dutch regulatory-classification checker, built on the same shared rule-engine, but for NIS2/Cyberbeveiligingswet instead of UPV/Uitgebreide Producentenverantwoordelijkheid. Run both Actors against the same company/product data for a combined view of your Dutch regulatory exposure (UPV producer responsibility + NIS2 cybersecurity duties) — there is no integrated call between them, this is a manual two-Actor workflow.
Keywords
upv, uitgebreide producentenverantwoordelijkheid, extended producer responsibility, textiel, verpakkingen, compliance, circulaire economie, netherlands, mkb
Changelog
0.4.0 - Next-step info & change tracking
- Every match now includes
volgendeStap: the executing organization and registration URL per UPV category, live-verified 2026-07-16 (nullfields where no reliable current source was found — never a guess, with anopmerkingexplaining the gap).classificatie-resultaatincreased from $0.003 to $0.006 to reflect this added actionable value. - Added
trackWijzigingen(opt-in) — compares each product's status against the previous run via a named key-value store, exposed aswijzigingsAlert. Newwijzigings-alertevent ($0.01), only charged on an actually detected status change. Products are identified vialabel, or a fallback key derived fromcategorie+productomschrijving.
0.3.2
- Store description no longer promises GN/HS-code input support — there is no official GN/HS-code table for
UPV categories, only free-text
productomschrijvingand directcategoriecodes are supported. Text correction only, no pricing change. - Related Actors section now explicitly points out the NIS2 SBI Sector Mapper cross-reference is a manual two-Actor workflow (no integrated call). No pricing change.
0.3.1 - Bugfix
classificatie-resultaatis no longer charged when the result status isonbekend(empty/meaningless request) — the customer received nothing to classify, so they aren't billed for it.
0.3.0
- Added a
catalogus-samenvattingrecord at the end of bulk runs (2+ producten): counts per status, unique matched productgroepen and how many results include at least one low-matchZekerheidmatch worth a manual review. New charged event ($0.015 flat per run), confirmed by the user (2026-07-14).
0.2.0
- Added
regelsetLaatstGeverifieerdto every result — the date the UPV rule set itself was last checked against ilent.nl/afvalcirculair.nl, for transparency as the category list grows. No pricing change.
0.1.0 - Initial release
- Free-text and direct-code classification against 13 UPV categories (wettelijk/vrijwillig/financieel).
- 50,000 kg/year packaging threshold check.
- Bulk classification via the
producteninput field. - Match-confidence flagging (
hoog/middel/laag) for transparency. - Built on the shared
shared-rule-enginepackage (also used by the NIS2 SBI Sector Mapper).