Linked EPREL

Welcome to the experimental Linked Data wrapper for the European Product Registry for Energy Labelling (EPREL), the European Commission's register of every product model placed on the EU market bearing an energy label — roughly two million models across 33 product groups, operated by DG ENER.

The registration number printed on an energy label, and encoded in its QR code, is all you need: it dereferences here to an RDF description of the model. Its energy class becomes a Publications Office authority concept, its measured performance becomes QUDT quantities, its supplier gets a stable URI, and the official label artwork and product information sheets get one URI per file instead of being locked inside a ZIP.

The data is not open data. The Commission asserts copyright and sui generis database rights over EPREL, so this is a live view that fetches on request and caches for at most 24 hours — not a copy of the registry, and not something it can license onward. Every document served carries the Commission's terms; see the dataset description. If you need your own copy, request your own EPREL API key. The data is declared by the supplier — the manufacturer or importer registers each model itself, before placing it on the market. The Commission does not verify those declarations; enforcement is for the national market surveillance authorities.

Examples

Each of these shows something different about the registry, and several of them are the reason parts of this wrapper exist:

product/2726809
An AEG dishwasher, class A — the ordinary case. Energy and water consumption per cycle, noise, dimensions, the supplier in locn: terms, and links to its label and fiche.
product/293546
Another dishwasher, but its supplier entered the dimensions in millimetres where most use centimetres. EPREL records no unit at all, so the wrapper reads it off the magnitude and marks the quantity eprel:unitInferred true. About 3.8% of dishwashers are like this; a single per-group unit would describe them as ten metres wide.
product/2569791
A light source whose supplier declared an on-market date of [205, 9, 9]. The value is refused rather than served, and the reason recorded as an eprel:dataQualityNote on the document — never asserted of the product.
product/219352
A Viessmann heat pump at A+++ on the pre-2021 scale. EPREL spells that APPP; it resolves to the authority table’s ENERA3, which no string rule derives. Its act, EU_811_2013, also shows the older number-then-year code ordering.
product/441862
A tyre — a largely different field set, carried by the mapping table’s fallback rule. Its act, EU_2020_740, is the one Parliament-and-Council regulation among the 24, so its ELI is eli/reg/ rather than eli/reg_del/.
product/2342094
A TCL smartphone, from the newest product group (2023). New groups arrive with fields nobody has curated yet; they flow through as auto-derived terms rather than being dropped.
product/268608
A model the Commission withholds because the supplier has not completed identity verification. Upstream answers 403, and so does this wrapper — if the registry withholds it, we do too.

Assets

EPREL ships labels and product information sheets only as ZIP archives, so there is no way to link to the German fiche of a given model. Here each file has its own URI: label.svg, label.png, label.pdf, fiche/DE.pdf, fiche/EN.pdf (24 languages), plus the archives themselves at labels.zip and fiches.zip.

Groups, acts and suppliers

cl/product-groups is where browsing starts: from the scheme to a group, from a group to its container of models, from a model to its label and its supplier — cl/product-groups → group/{url_code} → group/{url_code}/products → product/{id}. The dataset description at index points there too, so a client that dereferences it rather than reading this page finds the same way in.

Search

Without a registration number, search finds models within one product group — EPREL has no cross-group search, and no keyword search either. Group codes are listed in cl/product-groups. Leave a field empty to not filter on it.

These three are the only filters EPREL honours; it silently ignores any other parameter and returns the whole group, so this wrapper refuses them with a 400. How each one matches was measured, not read off its name:

modelIdentifier
Case-insensitive substring: MV46 finds SMV46IX04D. * is a wildcard (SMV*X04D); spaces are literal. The result is a set of candidates, not an identification.
supplierOrTrademark
Case-insensitive substring, likewise: EG finds both AEG and ELEKTRABREGENZ.
energyClass
Exact and case-sensitive: A matches, a matches nothing. A comma-separated list is an OR: A,B.
Combining
Filters AND together. Repeating a parameter is refused, because EPREL would keep only one of the values without saying so.

Examples, one per behaviour:

search?group=dishwashers2019&supplierOrTrademark=AEG&energyClass=A
Two filters ANDed: AEG's class A dishwashers, a few hundred of its roughly 1 200.
search?group=dishwashers2019&modelIdentifier=smv46
Lower case, and only part of the identifier, still finds Bosch's SMV46KX04E and its siblings.
search?group=dishwashers2019&modelIdentifier=SMV*X04D
A wildcard: SMV4EBX04D and SMV6ZBX04D.
search?group=dishwashers2019&supplierOrTrademark=EG
Why a result is only a set of candidates: AEG, but also ELEKTRABREGENZ, and more besides.
search?group=dishwashers2019&energyClass=A,B
Class A or class B. energyClass=a, by contrast, finds nothing.
search?group=smartphonestablets20231669&supplierOrTrademark=Fairphone
Another product group: Fairphone's registered smartphones.
search?group=tyres&supplierOrTrademark=Michelin&energyClass=A
Michelin tyres in the best fuel-efficiency class.

Enumeration

Products are enumerable per product group — there is no cross-group listing, because EPREL publishes none. Each group has a paged LDP container, e.g. group/dishwashers2019/products, and product/ is the collection of those containers.

The other directories are collections too: group/, act/, cl/, and supplier/, which lists only the suppliers this wrapper has seen, since EPREL publishes no supplier listing.

Enumeration stops at offset 500 000: EPREL refuses any listing request at or beyond it. One group is past that wall today — lightsources, with 643 354 models — so roughly 143 000 of them cannot be reached by paging at all, though each remains dereferenceable by registration number. Container pages say so in their own RDF rather than presenting a truncated walk as a complete one.

The listing and search endpoints need an EPREL API key on the server; routes.json reports whether this deployment has one, so you can tell “not enabled here” from “broken”.

The same things, seen from the other wrappers

These few things — four products and a company — are used as examples across the whole linked-* family, so one thing can be followed from register to register. Nothing appears in all of them: each entry below is an overlap between two or three, and the gaps are as informative as the matches.

A Samsung TV — TQ75LS03FWUXXC
durabilité: 15 declared spare parts · EPREL: the energy label
Only matches EPREL once the UXXC regional suffix is truncated — the two registers designate the same television differently, which is the single biggest obstacle to joining them.
A Haier washing machine — GTIN 6921081531228
durabilité: parts and scores · ADEME: who answers for it at end of life
Joined by an exact key: the durability index declares the SYDEREP identifier, which dereferences straight into the REP register. No EPREL match at all.
A Fairphone 5
EPREL: battery endurance, repairability class · iFixit: teardown score and guides
The Fairphone 4 is deliberately not used: iFixit has it, EPREL cannot, because the smartphone energy-label duty only began on 20 June 2025.
A Samsung Galaxy S25 Ultra — SM-S938B
EPREL: 4855 mAh rated, repairability class C · iFixit: 5000 mAh, 12 guides
The two capacities are not a contradiction and must not be reconciled: EPREL carries the rated figure declared to the register, iFixit the typical one written by its community. Keeping both, with their provenance, is the point.
A company — Fairphone
EPREL: FairPhone B.V. · ADEME: FAIRPHONE B.V. — electricals · ADEME: the same company — batteries and packaging
The only exemplar that is not a product, and a deliberately lucky one: both registers name the same legal person. That works because Fairphone sells into France directly, with no French subsidiary — ADEME records the company with country NL. It is the exception. For the large manufacturers the two registers name different legal persons entirely: EPREL lists AB Electrolux (SE), Samsung Electronics (UK) Limited, Haier Iberia, SLU (ES) and Candy Hoover Group SRL (IT), while the French registers name the arm that places goods on the French market. The two record different roles — who filed the energy label, versus who carries the French end-of-life obligation — so companies must not be joined by name. Even here there is a wrinkle worth seeing: one company holds two Immatriculations, and the battery stream sits on the second, so reading the first alone would suggest Fairphone has no battery obligation.

These are links between landing pages only. The RDF each wrapper serves asserts no cross-wrapper statement: a join between two registers is a claim that needs evidence, and it belongs to whoever makes it, not to the data.

Representations

Suffix wins, then the Accept header, then HTML: .ttl, .nt, .rdf, .jsonld, .json (the raw upstream record), .html. Terms coined here are at vocab; SHACL shapes describing the documents are in shapes/: product.shapes.ttl (products, importing the others), supplier.shapes.ttl and concept.shapes.ttl (product groups and implementing acts); the interface manifest is at routes.json.

Source under the GNU Affero General Public License.

Data © European Union. Reuse is governed by the EPREL API Terms and Conditions.