← Blog

Bad food data wrecks a cut — but not the way you think

The folk theory is that calorie databases are full of strangers' guesses. We counted ours: the crowd is 33 rows out of 1,941,073, and every impossible row we can find sits in the tier labelled authoritative. The expensive mistake isn't a wrong number. It's the right number for the wrong food.

There’s a standard explanation for why a cut stalls when the training hasn’t changed: the food database is full of numbers strangers made up, so the deficit was never real.

It’s a satisfying story. We went and counted, and it isn’t ours. Here’s what’s actually in our catalog, what it actually costs you, and which part of the folk theory survives contact with the data.

Every number below is a query against the production catalog on 21 September 2026.

The crowd is 33 rows

Our public catalog is 1,941,073 rows. By where they came from:

Source Rows Share
USDA FoodData Central, Branded set 1,792,661 92.35%
Open Food Facts 130,702 6.73%
USDA FoodData Central, lab-analysed 13,224 0.68%
Our own research agent 3,263 0.17%
Restaurant chains’ published figures 1,088 0.06%
Manufacturer direct 102 0.01%
Created by a user 33 0.0017%

Thirty-three. That’s the crowd.

The overwhelming majority is manufacturer-submitted label data that USDA republishes — companies reporting their own products. Not strangers guessing, and not us guessing either.

We can’t audit anyone else’s database, so this isn’t a claim about other apps. It’s a claim about the structure of the problem: the bulk of any large food catalog is label data, and label data is where you should expect the failures to be.

Six chicken breasts, all of them correct

Here is what a cut actually leaks through.

Search our catalog for chicken breast and — staying inside a sane calorie band, 60 to 400 per 100 g — you get 12,079 rows. Six of them, spread across the range:

Per 100 g The row Source
95 cal Raley’s — tarragon seasoned chicken breast with roasted fingerling potatoes USDA Branded
130 cal Dietz & Watson — sriracha chicken breast USDA Branded
165 cal Safeway — grilled chicken breast skewers with sweet teriyaki USDA Branded
200 cal J&B Wholesale — pecan encrusted chicken breasts USDA Branded
250 cal Tyson — breaded nugget-shaped chicken breast patties USDA Branded
300 cal Reser’s — rotisserie chicken salad with chicken breast meat Open Food Facts

Not one of those is wrong. Every one is a real product that genuinely has “chicken breast” in its name, reported by the company that makes it. Five of the six carry our highest provenance tier.

And they are not the same food. Pecan-encrusted is not sriracha deli meat is not nuggets.

The quartiles across all 12,079: 107 cal per 100 g at the 25th percentile, 130 at the median, 206 at the 75th.

So: 200 g of “chicken breast” a day. Pick a 25th-percentile row and you log 214 calories. Pick a 75th-percentile row and you log 412. Both rows accurate, both plausibly named, 198 calories a day apart. Over a twelve-week cut that’s 16,632 calories you either did or didn’t account for — and that’s one ingredient, eaten once a day.

A caveat on converting that to pounds, because the usual move here is to divide by 3,500 and announce a number. That rule is known to be wrong — it assumes static energy balance and consistently overestimates real weight loss. The honest version is that 16,632 calories is a large number in the direction of “this is why the math didn’t work”, and not a promise of 4.75 pounds.

This is the part of the folk theory that survives. Bad data does wreck a cut. But the mechanism isn’t a stranger’s guess — it’s the right number attached to the wrong food, and no amount of database cleaning fixes it, because there’s nothing to clean.

The rows that really are broken, and where they live

Some rows are genuinely impossible. We shipped a rule for one class of them this month: protein plus carbohydrate plus fat cannot outweigh the serving they describe, since those are parts of the food’s mass.

Against 1,893,345 public rows carrying a serving weight and all three macros, it flags 3,748 — 0.198%. By source:

Source Impossible rows
USDA Branded 3,436
Open Food Facts 312
Everything else 0

Zero from the research agent. Zero from users. Every single one is in the tier we label authoritative, because that tier is honest about where a number came from and says nothing about whether the company typed it in correctly.

The shape is always the same: nutrition stated per 100 g, serving weight stated for the actual portion. A 52 g protein bar declaring 12 g protein, 68 g carbs and 12 g fat is 92 g of macros in a 52 g bar. It’s also 430 derived calories against 450 stated — so every energy-based sanity check in the world waves it through. Consistent on energy, impossible on mass. We wrote that one up in detail.

Those 3,748 are flagged at every write path now, so the class is closed going in. The rows already sitting in the catalog are a separate job and we’re not going to claim otherwise.

What a provenance badge can and can’t tell you

This is where we’d push back on the usual advice, including advice we’d have given ourselves a year ago.

“Check the source, trust the high tier” is half right. Every food in Macroline shows a badge at the moment you log it, and that badge names the source — USDA Branded, Open Food Facts, Restaurant, AI estimate — rather than stamping it “Verified”. That was deliberate. A generic approval word reads as this number is correct, and no one can promise you that.

What the badge actually answers is who said so. USDA Branded means a manufacturer submitted it under labelling rules. AI estimate means we derived it and you should treat it as a derivation. That’s a real signal and it’s worth reading.

What it cannot answer is whether this is the food you ate. Five of those six chicken breasts carry the same authoritative badge and sit 200 calories apart. Provenance tells you the number is well-sourced. Only the brand and the serving weight tell you it’s yours.

So the two things actually worth checking, every time, are the ones next to the name: whose product is this, and what weight is the number quoted at.

What helps, concretely

Three things, all of which are just “make the row stop moving”:

Read the brand, not the name. The name is the least informative field on a food row. “Chicken breast” is shared by 12,079 rows. The brand and the serving weight are what make it a specific object.

Make your staples the same row every day. Favourites and saved meals exist for exactly this — not as a convenience feature, but so the twenty foods you eat constantly stop being a fresh guess each time. Consistency here is worth more than accuracy: a staple that’s 5% off but identically 5% off every day still gives you a trend line you can read. A staple that’s re-picked daily gives you noise.

Treat an estimate as an estimate. When there’s no label — a restaurant plate, a home recipe — a derived number is the only option and it’s a legitimate one. It’s badged as an estimate because that’s what it is. The rule we’d suggest is simply that the more of your week is estimated, the less precision you can claim about your deficit. Both kinds of day are fine. Just don’t average them and call the result exact.

One thing we do behind the scenes that matters here: your diary stores a snapshot of the macros as they were when you logged. If we correct a food row next month, your history doesn’t silently rewrite itself. A log you can’t trust to stay put isn’t a record.


Audit the data layer before you blame the program — that part of the advice was always right. Just audit the correct layer. In our catalog the strangers aren’t the problem, the manufacturers are where the impossible rows live, and the single most expensive thing you can do is log a well-sourced number for a food you didn’t eat.

Every figure here is a query against the production catalog on 2026-09-21. The mass-conservation rule is macros > serving × 1.1 + min(1.5 g, serving), stated in full above so you can run it yourself against any food you’re looking at. Product names are quoted from the USDA Branded and Open Food Facts records as they stand in our catalog, and are the trademarks of their respective owners.