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.
Each of these shows something different about the registry, and several of them are the reason parts of this wrapper exist:
locn: terms, and links to its label and fiche.eprel:unitInferred true. About 3.8% of dishwashers are
like this; a single per-group unit would describe them as ten metres
wide.[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.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.eli/reg/ rather than eli/reg_del/.403, and so does
this wrapper — if the registry withholds it, we do too.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.
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.
supplier/{guid} — EPREL publishes no supplier
endpoint, so a supplier becomes resolvable once one of its models has been
fetched. Try
AB
Electrolux.
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:
modelIdentifierMV46 finds
SMV46IX04D. * is a wildcard
(SMV*X04D); spaces are literal. The result is a set of
candidates, not an identification.supplierOrTrademarkEG finds both AEG and
ELEKTRABREGENZ.energyClassA matches, a matches
nothing. A comma-separated list is an OR: A,B.Examples, one per behaviour:
SMV46KX04E and its siblings.SMV4EBX04D and SMV6ZBX04D.energyClass=a, by contrast,
finds nothing.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”.
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.
TQ75LS03FWUXXCUXXC regional suffix is truncated — the two registers designate the same television differently, which is the single biggest obstacle to joining them.6921081531228SM-S938BNL. 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.
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.