Germany EPR report format
Last verified
Germany reports in a XML file of 8 columns laid out by Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register. Reviewed September 30, 2026. Instica measures, estimates and prepares the file from your weights; you sign in to the portal and submit it yourself.
The free plan is enough to start. We estimate and prepare; you sign and submit.
Germany: the report file at a glance
Germany: this page describes the report file that Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register accepts. The layout comes from a published specification, so the columns, their order and their codes follow the recipient’s own document. The file is a XML file, with 8 columns, 8 of them required.
The file is one XML document whose elements are the columns below. It is encoded as UTF-8-SIG, and decimals use a comma. Weights are in kilograms, reported for the calendar year.
Numbers are rounded to 3 decimals, halves round up (Instica’s rounding choice, not set by the regulator), line by line. Plastic component counts are not part of this file. The table below lists every attribute with its value; the sections after it explain each column, give a worked example, and list the checks that run before you upload.
| Attribute | Value |
|---|---|
| Recipient | Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register |
| Submission channel | LUCID XML upload. The customer signs in, uploads the file, checks the displayed data and confirms. |
| File type | XML |
| Character encoding | UTF-8-SIG |
| Decimal separator | comma |
| Header row | not applicable (XML elements) |
| Reporting period | the calendar year |
| Weight unit | kilograms |
| Rounding | 3 decimals, halves round up (Instica’s rounding choice, not set by the regulator) |
| Plastic component counts | no |
| Columns | 8 (8 required) |
| Status of the layout | published by the recipient |
Where this file layout comes from
The layout of the Germany file is taken from a specification that Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register publishes. Instica reads the specification, records the columns, codes and rules it states, and keeps the passage it relied on next to this page. Where the specification and this page ever differ, the specification is right, and the source link below opens it.
The recipient also offers an official sample or template, linked below. Compare your prepared file with it before you upload; the sample is the quickest way to see whether a column is out of place.
Original wording
Mass: packaging material mass in kg to the third decimal place without thousands separators (decimal place demarcated with comma).Source: verpackungsregister.org
Specification as recorded (English):
Original wording
XML producer volume report with elements VersionNoInterface, PackagingTypeCode, TypeOfReportCode, ReportingPeriodFrom, ReportingPeriodTo and one SystemOperator with its SystemOperatorID and a Material list (MaterialCode, Mass).Source: verpackungsregister.org
Note recorded in the data (English):
Original wording
Schema read from https://www.verpackungsregister.org/fileadmin/LUCID/Hersteller_Datenmeldung_Schema.xsd and sample from https://www.verpackungsregister.org/fileadmin/files/LUCID/Hersteller_Datenmeldung_Beispiel.xml. The guide requires UTF-8 with BOM. The guide's material table is read from extracted PDF text, so the VerpackG column assignment of 60000 is inferred from the table layout.Source: verpackungsregister.org
Every column, with its meaning and an example
The Germany file has 8 columns, listed in file order in the table below. Every column is required. Each column is then explained on its own: what goes in it, where Instica takes the value from, and the mistake that most often breaks it.
Values in the “filled from” column come from the data you have measured or entered in Instica: a fixed value is the same on every row, a material line value changes from row to row, and a report value is the same for the whole file.
| Column | Type | Required | Unit | Filled from |
|---|---|---|---|---|
| VersionNoInterface | text | Yes | None | fixed: 1.0 |
| PackagingTypeCode | text | Yes | None | fixed: V |
| TypeOfReportCode | list value | Yes | None | fixed: HJM1 |
| ReportingPeriodFrom | date | Yes | None | the report itself |
| ReportingPeriodTo | date | Yes | None | the report itself |
| ListOfSystemOperators/SystemOperator/SystemOperatorID | text | Yes | None | your registration identity |
| ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MaterialCode | list value | Yes | None | each material line |
| ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/Mass | decimal | Yes | kilograms | each material line |
“VersionNoInterface”
Note recorded in the data (English):
Original wording
Technical interface version; the guide gives 1.0.Source: verpackungsregister.org
“PackagingTypeCode”
Note recorded in the data (English):
Original wording
Code for packaging. Other codes are not permitted at this time.Source: verpackungsregister.org
“TypeOfReportCode”
Note recorded in the data (English):
Original wording
HJM1 is the year-end volume report, a full report. Instica's choice of report type; the customer can change it in the file before upload.Source: verpackungsregister.org
“ReportingPeriodFrom”
“ReportingPeriodTo”
“ListOfSystemOperators/SystemOperator/SystemOperatorID”
Note recorded in the data (English):
Original wording
ZSVR identification number of the customer's dual system operator (guide table 2.3.4). The customer supplies it.Source: verpackungsregister.org
“ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/MaterialCode”
Note recorded in the data (English):
Original wording
VerpackG material codes for reports 2019 to 2026. 10000 glass, 20000 paper, paperboard and cardboard, 30000 ferrous metals, 40000 aluminium, 50000 plastics, 60000 beverage cartons, 70000 other composite packaging, 80000 other materials. Reports from 2027 use the VerpackDG codes, which are not encoded here.Source: verpackungsregister.org
“ListOfSystemOperators/SystemOperator/ListOfMaterials/Material/Mass”
A worked example, row by row
The worked example is a synthetic XML document for Germany. It shows the elements in the order the layout expects, with invented weights. The sample is written by Instica for tests and for this page, and it is not a filing.
Read it from the top: the header elements state the version, the type of report and the period, and the lines below carry one material each with its weight.
- VersionNoInterface: 1.0
- PackagingTypeCode: V
- TypeOfReportCode: HJM1
- ReportingPeriodFrom: 2026-01-01
- ReportingPeriodTo: 2026-12-31
- SystemOperatorID: DE1111111111111
- MaterialCode: 10000
- Mass: 1250,500
- MaterialCode: 20000
- Mass: 830,250
- MaterialCode: 30000
- Mass: 54,125
The elements the example uses are “VersionNoInterface”, “PackagingTypeCode”, “TypeOfReportCode”, “ReportingPeriodFrom”, “ReportingPeriodTo”, “SystemOperatorID”, “MaterialCode”, “Mass”, “Root” and “ListOfSystemOperators” and others.
Compare it with the official sample linked in the origin section above.
How Instica groups your materials into lines
Before the file is written, Instica groups your measured weights into the lines the layout asks for. For Germany the grouping uses the category list “DE-ZSVR-material-codes”, version VerpackG 2019-2026, and one line is written for each distinct combination of “system_operator_id” and “material_code”.
Two products that share a category are added together on one line; two products in different categories stay on separate lines. Each weight keeps its data-quality tier (measured, supplier, estimated or declared) inside Instica, and the file carries only the rounded total.
Note recorded in the data (English):
Original wording
One Material element per material code. epr/data/material_taxonomy.yaml holds the CalRecycle categories only, so the product lines must carry the ZSVR material code as their category code. A material with 0,000 kg may be left out instead of written.Source: verpackungsregister.org
The checks Instica runs before you upload
Instica runs 5 checks on the Germany file before you take it to the portal: 5 that block the file. A blocking check means the recipient’s service would very likely refuse or misread the file, so fix the row it names and prepare the file again.
A check is a test of your file, never a judgement of your business. Passing every check shows that the file has the right shape; it does not show that the numbers are right, which is why every weight keeps its data-quality tier.
| Check | Kind | Columns | Level |
|---|---|---|---|
| required-columns | required-value check | system_operator_id, material_code, mass | Blocks the file |
| material-known | allowed-values check | material_code | Blocks the file |
| mass-format | pattern check | mass | Blocks the file |
| report-type-format | pattern check | type_of_report_code | Blocks the file |
| unique-material | uniqueness check | system_operator_id, material_code | Blocks the file |
required-columns
material-known
mass-format
report-type-format
unique-material
Why a file gets sent back, and what to look at
A report file is sent back for a handful of repeating reasons. The list below is written from the layout for Germany; each item says what to look at first. Instica’s own messages are short, so this section explains the cause behind them.
- The wrong encoding. The file is expected as UTF-8-SIG. Names with accents or other special characters turn into symbols when a file is saved in another encoding; if a name looks broken, save the file again as UTF-8-SIG.
- The wrong decimal separator. Decimals use a comma in this layout. Using the other mark can make a weight read as text or as a thousand times too large.
- Weights in the wrong unit. Weights are in kilograms. A figure in another unit is a legitimate number and still a wrong one, so convert before you prepare the file. Instica keeps your original unit and converts at the end.
- The wrong period. The layout reports for the calendar year. A file covering a different span, or two periods mixed on one set of rows, is the commonest reason for a correction request.
- Duplicate lines. The same combination of columns appears on two rows. Merge the rows and add the weights; one line per combination is the rule.
- A value outside the list or pattern. A code or category is spelled differently from the recipient’s list. Copy the value from the list rather than retyping it.
- Blank or negative weights. A blank cell, a negative weight or a text value in a weight column fails before any other check. Remove empty rows, and enter a true zero where nothing was supplied.
- A layout that is not yet published. The recipient can change its layout between reporting periods. Check the specification again before each submission; this page is updated at its next review.
From file to portal: the steps you take yourself
Instica prepares the file; you sign in and submit it yourself. For Germany the recipient is Stiftung Zentrale Stelle Verpackungsregister (ZSVR), LUCID packaging register.
Instica never asks for, stores or uses your portal credentials, and it never submits anything for you. The steps below are what you do once the file is ready.
Submission channel recorded in the data (English):
Original wording
LUCID XML upload. The customer signs in, uploads the file, checks the displayed data and confirms.Source: verpackungsregister.org
- Finish measuring: confirm that every product has its packaging weights and that no weight is flagged as unresolved.
- Prepare the file in Instica. It writes the XML file in the layout above and runs the 5 checks.
- Open the file and read it with your own eyes: the period, the totals and a few lines you can verify against your records.
- Compare the file with the official sample, if the recipient offers one.
- Sign in to the recipient’s service with your own credentials. Instica never stores regulator-portal credentials; you sign and submit the report.
- Upload the file, or key the numbers into the form if the service does not take a file, and read the summary the service shows you.
- Confirm and submit. The signature and the submission are yours; keep the confirmation the service gives you.
- Download the file again from Instica for your records; it is locked once you finalise the report.
Questions about the Germany report format
What file does Germany use for the EPR report?
The layout described on this page is a XML file with 8 columns, encoded as UTF-8-SIG. It follows the recipient’s published specification.
Does Instica submit the report for me?
No. Instica measures, estimates and prepares the weights and the file. You sign in to the recipient’s service with your own credentials and submit it yourself; Instica never stores portal credentials.
Which unit and period does the Germany file use?
Weights are in kilograms, reported for the calendar year, rounded to 3 decimals, halves round up (Instica’s rounding choice, not set by the regulator).
Is the example file a real filing?
No. The example is synthetic: the weights are invented and it was written to show the shape of a finished file. It must never be submitted.
What if the recipient changes the layout?
The recipient’s specification prevails. This page is reviewed on a schedule, and every review shows the date it was last checked; open the source before each submission.
How to read this page
Sources
- verpackungsregister.org retrieved
Original wording: Mass: packaging material mass in kg to the third decimal place without thousands separators (decimal place demarcated with comma).