Guides

How to read a food label

The short answer#

Two mistakes account for most of the error people make with labels:

  1. Reading the per-100 g column as if it were the portion. A 250 g ready meal is two and a half times its 100 g column.
  2. Reading a missing number as a zero. Missing means nobody recorded it. It does not mean none.

Everything else — protein, carbohydrate, fat, energy — is straightforward arithmetic once you know which column you are in.

The two columns#

European and UK labels are required to give values per 100 g or per 100 ml. A second column, per portion, is optional and the manufacturer chooses the portion. US labels lead with a serving size instead, and that serving is now supposed to reflect what people actually eat rather than an aspirational amount.

So the same biscuit can present as “99 kcal per serving” and as “480 kcal per 100 g” without either being false. The per-100 figure is the one that lets you compare two products; the per-portion figure is the one that tells you what you are about to eat, if your portion matches theirs.

When you scan a barcode, the app is reading the per-100 basis and scaling it to the weight you enter. That is why changing the grams changes every number at once, and why weighing the portion is worth more than any other single habit in food logging.

What the energy number includes#

Energy on a label is calculated, not measured in a bomb calorimeter. It comes from adding up the macronutrients at fixed factors — roughly 4 kcal per gram of protein, 4 per gram of carbohydrate, 9 per gram of fat, and smaller contributions from fibre, alcohol and polyols.

Two consequences worth knowing:

  • The numbers should add up, roughly. If protein, carbohydrate and fat times their factors land far from the stated energy, something is off in the record.
  • Rounding is legal and cumulative. Small values may be rounded to the nearest whole gram or to zero. Ten servings of something labelled “0 g fat” can carry real fat.

The fields that are allowed to be missing#

Mandatory on a European or UK label: energy, fat, saturates, carbohydrate, sugars, protein and salt. Fibre is not mandatory. Neither are most vitamins and minerals unless a claim is made about them.

This matters more than it sounds, because a food database inherits whatever the label carried. Open Food Facts — the open database this app reads — is contributed by people photographing packets, so a record can be missing a field simply because the packet did not print it.

SmartCrunch handles that by refusing to guess. A missing sodium figure is reported as unknown, not as zero, and each daily total shows how many of the day’s entries it was actually computed from. Below half, the total is not shown as a number at all.

The alternative — counting the gap as zero — makes a day of packaged food look cleaner the less information you have about it, which is precisely backwards.

Claims, and what they are allowed to mean#

Front-of-pack wording is regulated, so the phrases have thresholds behind them. In the UK and EU, roughly:

  • “Low fat” — no more than 3 g per 100 g of food.
  • “Fat free” — no more than 0.5 g per 100 g.
  • “Low sugar” — no more than 5 g per 100 g.
  • “Source of fibre” — at least 3 g per 100 g; “high fibre”, at least 6 g.
  • “Reduced” — at least 30% less than a comparable product, which says nothing about the absolute amount.

“Reduced sugar” is the one that catches people: a third less than a very sweet thing is still a sweet thing.

Traffic lights are per portion#

The colour-coded front-of-pack scheme used in the UK is voluntary and it is calculated on the manufacturer’s portion. Two products with identical per-100 figures can show different colours if one declares a smaller portion. Read the back.

A short routine that works#

  1. Find the per-100 column.
  2. Weigh what you are actually eating.
  3. Scan the barcode, then set the grams to what you weighed.
  4. Check whether the record looks complete — the app will tell you what it does not know.
  5. If it is missing something you care about, the packet in your hand is the authority, and you can correct the entry.

None of this requires arithmetic on your part. It requires the weight, which is the one number no database can know for you.