How accurate are food databases in calorie-counting apps?
USDA entries vs user-submitted entries, why one banana shows five numbers, and a 20-second check for any entry.
How accurate are food databases in calorie-counting apps?
It depends on the entry, not the app. Most food databases are a mix of three sources: laboratory-analyzed reference values such as USDA FoodData Central, manufacturer label data pulled in by barcode, and entries typed in by other users. The first two are reliable within known limits. The third is the one that produces five different numbers for "banana".
Reference values are averages of real samples, so your banana will differ a little from the USDA banana. Label data is bound by the 20% tolerance in 21 CFR 101.9. User entries have no such floor: a serving size can be wrong, a value can be copied from a different product, or a cooked food can be logged under a raw name. Learning to tell these apart is most of the skill.
Why "banana" shows five numbers
Take the simplest case. USDA lists a raw banana at 89 kcal per 100 g, with reference portions of 101 g (small), 118 g (medium) and 136 g (large). Those three sizes alone give 90, 105 and 121 kcal. Add an entry someone created for "1 banana" from the one on their counter and one copied from a dried banana chip label, and a search returns five values that all look plausible.
Across a day, a 15 kcal banana difference does not matter. The entries that do matter are the ones where density is wrong by a multiple, not a percentage. Those usually involve one of the following.
| Problem | Example (USDA, per 100 g) | Size of error |
|---|---|---|
| Raw vs cooked confusion | Dry rolled oats 379 kcal vs cooked oatmeal 71 kcal | About 5× per gram |
| Skin on vs meat only | Chicken wing with skin 254 kcal vs chicken breast meat only 165 kcal | About 1.5× |
| Fat level not named | Whole-milk Greek yogurt 97 kcal vs nonfat Greek yogurt 59 kcal | About 1.6× |
| Packed in oil vs water | Sardines in oil, drained 208 kcal vs tuna in water, drained 86 kcal | About 2.4× |
| Serving unit guessed | "1 cup" of cooked pasta: 124 g not packed vs 151 g packed | About 20% |
USDA entries vs user-submitted entries
USDA FoodData Central is the reference most apps build on. Its core entries come from laboratory analysis of sampled foods, reported per 100 g with standard portion weights. It also carries a branded-foods section built from manufacturer labels. When an app shows a plain food with a precise, unrounded value such as 165 kcal and 31.02 g protein per 100 g for cooked chicken breast, that is usually a USDA-derived entry.
User-submitted entries are useful for restaurant dishes and regional foods the reference sets do not cover. They are also where errors live. The tell-tale signs are round numbers with no decimals, missing macros, serving sizes like "1 plate", and macros that do not add up: protein and carbs at 4 kcal per gram plus fat at 9 should land within a few percent of the listed calories.
Worked example: checking an entry in 20 seconds
You search "chicken breast" and see two entries. Entry A: 165 kcal, 31 g protein, 0 g carbs, 3.6 g fat per 100 g. Entry B: 110 kcal, 23 g protein, 0 g carbs, 1 g fat, with the serving listed as "1 piece".
- Entry A macro check: 31 × 4 + 0 × 4 + 3.6 × 9 = 124 + 32 = 156 kcal, within 6% of 165. Consistent with the USDA cooked value.
- Entry B macro check: 23 × 4 + 1 × 9 = 92 + 9 = 101 kcal, close to 110, so internally consistent. But the values sit well below the USDA cooked entry, which usually means it was built from a raw weight, where water dilutes the protein. You weighed the chicken cooked, so Entry A is the match.
- For a 150 g cooked portion: Entry A gives 248 kcal and 47 g protein; Entry B gives 165 kcal and 35 g protein. The difference is 83 kcal and 12 g of protein on one item.
How to pick the right entry
- Scan the barcode for anything packaged. Label values are the manufacturer's own numbers and are held to the 20% tolerance.
- Prefer entries with full names. "Chicken, broilers or fryers, breast, meat only, cooked, roasted" is a USDA description. "Chicken" is not.
- Match the state. Raw, cooked, dry, drained, with skin, without skin.
- Log in grams. Portion labels such as "1 medium" are fine for fruit and risky for everything else.
- Run the macro check on anything that looks off.
- Reuse what you verify. In Cal.AI, a food corrected through Fix Results is saved for one-tap reuse, so you check each food once.
Common mistakes
- Picking the first search result because it is first.
- Choosing the entry with the lowest calories. That is the one most likely to be wrong.
- Using a user entry for a packaged food that has a barcode.
- Ignoring the state of the food. Raw and cooked differ by multiples, not percentages.
- Assuming one app's database is accurate and another's is not. The same USDA entry appears in most of them; the difference is which entry you pick.
Frequently asked questions
Are USDA food database values accurate?
USDA FoodData Central reference values come from laboratory analysis of sampled foods and are reported per 100 g with decimals. They are averages, so a specific apple or steak will vary around them, but they carry no 20% label tolerance and no user typos. For plain foods they are the most reliable numbers available.
Why does the same food have different calories in different apps?
Different apps draw on different sources, define servings differently, and may round values. One may list chicken breast cooked and another raw, and both are correct for their state. Pick one app, favor USDA and barcode entries, log in grams, and stay consistent so your errors are stable rather than random.
Is a barcode more accurate than a photo for packaged food?
Yes. The barcode returns the label values, which are the manufacturer's measured numbers held to the 20% tolerance in 21 CFR 101.9. A photo of a packaged snack has to guess the product and the amount. Use the barcode, then set the amount to what you actually ate rather than one serving.
How does Cal.AI handle database entries?
Cal.AI offers barcode, food search, manual entry and photo scan. For packaged foods, scan the barcode. For plain foods, search and set the weight. After a photo scan, Fix Results lets you rename an item, swap an ingredient or adjust the portion, and the corrected food is saved for one-tap reuse.
Sources
- U.S. Department of Agriculture. FoodData Central. USDA
- 21 CFR §101.9(g) — nutrition labeling compliance (the 20% tolerance). eCFR
- U.S. Food and Drug Administration. How to Understand and Use the Nutrition Facts Label. FDA