EU Nutrition Declaration Checker
Paste the declaration exactly as it is printed. You get back the energy recalculated from the Annex XIV factors, the rounding tier every value has to sit on, and — for each line — the range an official control will accept.
🔒 Your formulation data never leaves your browser.
Where the numbers come from
Two documents, and they do not carry the same weight. Regulation (EU) No 1169/2011 is the law: it fixes which seven items the declaration contains, the order they appear in, the per 100 g basis, and the conversion factors used to calculate energy. The rounding tiers and the tolerances come from a Commission guidance document agreed with the Member States in December 2012, which states on its first page that it has no formal legal status. This tool keeps the two apart: findings drawn from the Regulation are errors, findings drawn from the guidance are warnings, and each one says which it is.
kcal is not kJ divided by 4.184
Annex XIV gives two independent columns. Carbohydrate is 17 kJ/g and 4 kcal/g — a ratio of 4.25. Fat is 37 and 9 — a ratio of 4.111. The energy pair on a label is therefore two separate calculations, and converting one into the other lands a kilocalorie or two out. It is the most common error in the energy row precisely because the shortcut looks like ordinary unit conversion.
| Component | kJ/g | kcal/g |
|---|---|---|
| Carbohydrate (except polyols) | 17 | 4 |
| Polyols | 10 | 2.4 |
| Protein | 17 | 4 |
| Fat | 37 | 9 |
| Salatrims | 25 | 6 |
| Alcohol (ethanol) | 29 | 7 |
| Organic acid | 13 | 3 |
| Fibre | 8 | 2 |
| Erythritol | 0 | 0 |
Carbohydrate means something different here
Annex I defines carbohydrate as including polyols, and defines fibre separately — so fibre is not part of the carbohydrate figure, and it carries its own 8 kJ/g. In the US it is the other way round. A label ported across without changing that one cell gets both the carbohydrate row and the energy row wrong.
What an official control actually compares
Not the laboratory result against the printed number. The guidance widens the printed number back to every value that would round to it, applies the tolerance band for that nutrient at that level, and rounds the ends back again. A declaration of 8.5 g of sugars accepts anything from 6.5 to 11 g. That three-step calculation is what the range column shows, and each row opens to reveal the working.
What this tool does not cover
Vitamins and minerals, which need the reference intakes and a significant-amount judgement; the tolerances for food supplements and for nutrients carrying a nutrition or health claim, both of which require deciding first whether a claim has been made; and languages other than English. It also checks a declaration for internal consistency — it cannot tell you whether the values describe the product in the pack.
Every check this tool runs (13 rules)
EUN-001 A mandatory line is missing
Article 30(1) fixes the content of the nutrition declaration: energy value, fat, saturates, carbohydrate, sugars, protein and salt. All seven are mandatory together — a declaration that stops after protein, or that omits saturates because the value is zero, is incomplete rather than shortened.
Fix: Add the missing line. A nutrient that is genuinely absent is still declared, as "0 g" or with the negligible-amount wording.
EUN-002 A line appears that the declaration may not contain
The content of the declaration is a closed list: the seven mandatory items, plus mono-unsaturates, polyunsaturates, polyols, starch, fibre and vitamins or minerals present in significant amounts. Trans fat, cholesterol, omega-3 and sodium-as-a-row are all outside it. This is the single most common failure when a US Nutrition Facts panel is ported to an EU pack, because there the same rows are required.
Fix: Remove the row. Sodium is expressed as salt; trans fat and cholesterol have no place in the EU declaration at all.
EUN-003 Energy is not given in both kJ and kcal
The energy value is declared in kilojoules and kilocalories together, in that order. One unit alone is not a compliant declaration, however unambiguous it looks.
Fix: Print both, kJ first: "Energy 1435 kJ / 343 kcal".
EUN-004 Declared energy does not follow from the Annex XIV factors
The energy value is calculated with the conversion factors in Annex XIV, applied to the amounts actually present. Two definitions decide the result and both differ from the US ones: carbohydrate includes polyols, so only the non-polyol part carries 17 kJ/g, and fibre is not part of carbohydrate — it is a separate 8 kJ/g line. A figure that cannot be reproduced from the declared macronutrients within their own rounding slack points at one of these.
Fix: Recalculate: (carbohydrate − polyols) × 17 + polyols × 10 + protein × 17 + fat × 37 + fibre × 8 kJ, plus alcohol and organic acid where present.
EUN-005 kcal looks converted from kJ instead of calculated
Annex XIV gives kJ and kcal as two separate columns, and the ratio between them differs by nutrient — 4.25 for carbohydrate and protein, 4.111 for fat. Dividing the kJ figure by 4.184 therefore lands a kilocalorie or two away from the value the factors produce. It is the most common way the energy row goes wrong, precisely because the shortcut looks like unit conversion.
Fix: Compute the kcal figure from the kcal column of Annex XIV, not from the kJ result.
EUN-006 The declaration is not expressed per 100 g or per 100 ml
The mandatory declaration is expressed per 100 g or per 100 ml. A per-portion column may be added alongside, but it cannot replace the 100 g basis — which is what makes two products comparable on a shelf.
Fix: Add the per 100 g (or per 100 ml) column; keep the portion column as a second column if you want it.
EUN-007 The lines are not in the Annex XV order
Annex XV fixes the order: energy, fat with its sub-lines, carbohydrate with its sub-lines, fibre, protein, salt. Fibre after protein, or salt in the middle, is a deviation from the prescribed presentation even when every value is right.
Fix: Reorder the rows to match Annex XV.
EUN-008 Sodium declared where salt is required
The EU declaration carries salt, not sodium, and Annex I defines it as a calculated equivalent: salt = sodium × 2,5. A pack that keeps the sodium row from a US label understates the figure a shopper reads by a factor of two and a half.
Fix: Multiply the sodium figure by 2.5 and declare the result as salt.
EUN-009 A sub-line exceeds the line it sits under
Saturates, mono-unsaturates and polyunsaturates are parts of fat; sugars, polyols and starch are parts of carbohydrate, and since sugars exclude polyols by definition the three are additive. Any of them exceeding its parent — or the macronutrients summing past 100 g per 100 g — is arithmetically impossible rather than merely unlikely.
EUN-010 The printed value has a precision the rounding guidance does not allow
The Commission guidance sets the number of decimals by level, not by preference: at or above 10 g a nutrient is declared to whole grams, below that to 0.1 g, and salt and sodium to 0.01 g below 1 g. "12.4 g of carbohydrate" or "8.25 g of fat" are values the guidance has no tier for, which means one of them was rounded with a spreadsheet default.
Fix: Round to the tier this tool shows for that nutrient at that level.
EUN-011 The amount is negligible and has its own wording
Below a threshold the guidance allows "0 g" or "less than x g" instead of a number, and the threshold differs by nutrient: 0.5 g for fat, carbohydrate, sugars, protein, fibre, polyols and starch; 0.1 g for saturates and the other fatty acids; 0.005 g for sodium; and 0.0125 g for salt — which is declared as "<0.01 g", a threshold and a wording that deliberately do not match.
EUN-012 A measured value falls outside the tolerance for the declared one
Official controls do not compare a laboratory result with the printed number directly. They widen the printed number back to every value that rounds to it, apply the tolerance band for that nutrient at that level, and round the ends back — so a declaration of 8.5 g of sugars accepts anything from 6.5 to 11 g. A result outside that computed range is what an inspector acts on.
Fix: Either re-declare from the measured value, or check whether the sample represents the product over its shelf life.
EUN-013 Salt and sodium do not agree
When both figures appear, they have to be the same quantity expressed two ways: salt = sodium × 2,5. A pair that does not satisfy it means one of the two was measured on a different sample or converted with a different factor.