A barcode is a lookup key
GS1 hands out a company prefix, the company assigns an item reference, a check digit closes it out. That's the whole payload. There's no calorie field in it and no serving size field. The bars point at a record that lives somewhere else.
So the interesting question is never how good the scanner is. Reading a clean UPC is the easy part, and the one in LockedIn runs MLKit on the phone. The question is what sits behind the number. Rows in a food database come from roughly three places. Manufacturer feeds are the cleanest and cover the least. Public datasets like the USDA's branded foods file carry label data submitted by manufacturers, but every record is a snapshot from the day it was submitted. And user submissions are a person typing a panel into a form on their phone, which is how coverage reaches hundreds of thousands of items and also how a decimal point ends up one place to the left.
A bad row comes back with exactly the same confidence as a good one. Your screen reads 180 calories either way.
Serving size is where most of the error lives
Here's the failure I run into most. You buy a bag of frozen chicken breasts. The panel says 4 oz (112 g) raw, 110 calories. The row filed under that barcode says one serving equals one breast. Breasts in that bag run anywhere from 140 to 260 grams. You cook two, log two servings, and the app tells you 220 calories when you ate closer to 450. Every nutrient value in that row was copied off the label correctly. The portion definition is what broke.
Then there's the stale entry, which has a specific and datable cause. The FDA's updated Nutrition Facts rule, published in 2016 with compliance dates of January 2020 for large manufacturers and January 2021 for smaller ones, revised the reference amounts that set serving size. Ice cream went from a half cup to two thirds of a cup. Soda went from 8 ounces to 12. Yogurt went from 8 ounces to 6. The barcode on the package didn't change when the panel did, so a row typed in 2017 keeps answering to it and keeps looking plausible.
An error in the calorie field is additive, so it costs you what it costs you. An error in the serving size is multiplicative. Get the portion wrong by a factor of two and it stops mattering how carefully somebody transcribed the rest of the panel.
The label was rounded before anyone typed it in
Even a perfect row copied off a current package will refuse to reconcile, and the reason is written into the regulation. Under 21 CFR 101.9, calories between 5 and 50 round to the nearest 5, and calories above 50 round to the nearest 10. Fat, carbohydrate and protein under half a gram are declared as zero. That last rule is why cooking spray reads 0 calories per spray and a stick of gum reads 0 grams of sugar. Neither one is true, they are legal.
Run the Atwater math on a protein bar and you can watch it come apart honestly. Say the panel reads 210 calories with 21 g protein, 24 g carbohydrate and 7 g fat, and 15 g of that carbohydrate is fiber while 6 g is sugar alcohol. Multiply by 4, 4 and 9 and you get 243. Nothing is wrong. The manufacturer used the specific caloric factors the regulation allows for fiber and for polyols like erythritol, which don't deliver 4 calories per gram.
The package itself also has room to move. The compliance rules in 21 CFR 101.9(g) treat calories, sugars, fat and sodium as acceptable when the food comes in no more than 20 percent above the declared value. A 200 calorie bar can hold 240 calories and stay compliant. No database on earth can correct for that, and no app can tell you it happened.
Why the same product has several barcodes
Barcodes are assigned per package configuration. Two sizes of the same soda get two different numbers. If a row got attached to the wrong GTIN, the scan is describing a different amount of liquid with total conviction, a 12 ounce can standing in for a 20 ounce bottle. A multipack has its own barcode on the outer carton, separate from the barcode printed on each unit inside, and the outer one usually carries whole-carton nutrition.
Regional variants are the sneaky case. The same brand sells a different formulation in the UK than in the US, sometimes at a meaningfully different sugar content, and the two carry different numbers that a global database may or may not keep straight. Manufacturers also reformulate without changing the barcode at all, which means a row can be a faithful copy of a panel that no longer exists on any shelf.
The check I run on a new scan
Four steps, and it takes longer to read this than to do it.
- Read the serving size first. Before the calories, before anything. If the app says 100 g and the package says 55 g, you found the problem in three seconds.
- Do the 4/4/9 math. Protein times 4, carbs times 4, fat times 9. Land within about 10 percent of the stated calories and the row is probably fine. Way off, with no fiber or sugar alcohol to explain it, and somebody fat-fingered a field.
- Weigh it once. For anything you eat weekly, put it on a scale one time and write down what your portion really is. My "1 tablespoon" of peanut butter turned out to be 24 grams, not 16, and it had been quietly costing me 50 calories a day.
- Keep the correction. Log the portion you weighed, and if the food is part of something you eat over and over, save the whole thing as a meal so the corrected version is what comes back tomorrow.
How accurate does this need to be
Less accurate than you'd guess, in one specific way. What matters for reading a trend is that your error stays consistent. If every scan runs 8 percent high, that bias sits in every single day equally, your weight line over three weeks still points where it points, and you adjust your target to match. Random error is the expensive kind, where Monday runs 15 percent low, Thursday runs 20 percent high, and the average tells you nothing you can act on.
For scale: the 2013 AHA/ACC/TOS obesity guideline describes a 500 to 750 calorie per day deficit as a common starting point for adults working on weight loss. A systematic 200 calorie per day logging error eats a third of that before you've made a single decision about food. And self-reported intake already skews low. The OPEN study, which compared what about 480 adults reported eating against doubly labeled water measurements, found underreporting on the order of 30 percent with food frequency questionnaires and 12 to 14 percent with 24 hour recalls.
Which points at a boring conclusion. Weigh the twenty or so foods you eat constantly and get those right. Scan the rest, glance at the serving size line before you tap save, and get on with your day.