Why calorie apps disagree, and how to be less wrong
By Cook EZ editorial · Published: 2026-08-25 · Updated: 2026-08-25 · 6 min read
Two apps will give two numbers for the same sandwich because they are not measuring the sandwich. They are retrieving different database rows, different serving sizes, and different guesses about oil. This article names those error sources, cites USDA FoodData Central, the FDA label rule, and Mifflin-St Jeor, and then describes a logging practice that is useful even though it is imperfect.
A calorie app is a database plus your honesty
USDA FoodData Central is a laboratory-linked and compiled nutrient database for generic foods. Open Food Facts is a crowdsourced catalog of packaged products. Restaurant PDFs are marketing nutrition. User-generated entries in some apps are a fourth pile, sometimes typed at midnight. If App A uses a branded bagel at 270 kcal and App B uses a generic bagel at 320 kcal, both can be internally consistent and still disagree. Cook EZ prefers FDC generics, OFF and barcode cache for packages, and the ingredient math on recipes you generated. It does not scrape a stranger's "healthy sandwich."
Your honesty is the larger term. Skipping oil, logging a pint as one serving, and forgetting the latte will dwarf a 20 kcal database discrepancy. Fix behavior before you switch apps in anger.
The FDA Nutrition Facts label is the law for that package. If OFF disagrees with the cup in your hand, the cup wins. Reformulations happen. Crowdsourced rows lag.
Restaurant PDFs often use a different fryer oil than the kitchen used tonight. Treat them as a starting slider. Shine on the plate means oil. Add it. FoodData Central roasted-vegetable rows will undercount diner vegetables almost every time.
Serving size is a legal amount
Reference Amounts Customarily Consumed set the serving on the label. Dual columns exist because a package might be eaten at once. Logging tools that default to "1 serving" will undercount if you ate two. Read grams. Log grams. The word "serving" is doing too much work in casual speech.
Granola is the classic trap. The label serving is often 40 to 55 g. A breakfast bowl is 80 to 100 g. The app is not wrong. The bowl is larger than the legal serving.
Recipe cards that say "4 servings" assume even division of the pot, including the oil. If you ate the cheesy top and left the watery bottom, you did not eat 1 of 4. Edit the log.
Alcohol grams are energy. A diary that tracks macros and skips wine is a diary that cannot explain the weekend scale bump. Log the pour you actually poured. Measure the glass once.
Ice in a drink is not a loophole. The label is for the liquid as sold. A melted frozen coffee is the whole cup. Log the cup. The FDA serving on a bottle of juice is often less than the bottle. Dual columns exist for this.
Water weight and invisible oil
Cooked versus raw rows are a structured error. See FoodData Central for both. Mixing them is how people "prove" the app is broken. Match the state.
Oil absorption is unstructured. FDC roasted broccoli may assume little added fat. Restaurant broccoli often glistens. A tablespoon of oil is about 120 kcal. Photo models miss this unless you add it. Add it.
Frying: breading picks up fat. A generic "chicken, fried" row is closer than "chicken, roasted" for a cutlet from a diner. It is still not that diner's fryer. Estimate high on fried food if you are in a deficit and want the diary to stay honest.
If you switch from App A to Cook EZ, do not compare Tuesday in A to Wednesday in Cook EZ as a scientific trial. Compare three weeks of one method. Database swaps reset the fiction.
The target is a model too
Mifflin-St Jeor (PubMed 2305711) estimates resting energy from sex, age, height, and weight. Activity multipliers estimate TDEE. Neither is a metabolic chamber. If your app's remaining calories assume 800 kcal of "exercise" from a watch that counted a car ride, the target is fiction. Cook EZ's calorie calculator uses Mifflin-St Jeor plus an activity factor you choose. Pick the factor that matches your week, then watch a 3 to 4 week trend.
People call the diary wrong when they hit the target and do not lose weight. Possible causes: portions, NEAT, water, hormones, the target was too high, the watch was too optimistic, or three weeks is not enough. The Dietary Guidelines are about patterns. A deficit is arithmetic over time. One Tuesday proves nothing.
Very low targets make the app look "accurate" because you are hungry and think about food all day. That is not a quality metric. Guardrails exist for a reason.
Watches that add 400 kcal of "active calories" on top of a "very active" TDEE factor are how people eat back a deficit they never had. Pick one system. Mifflin-St Jeor plus a modest factor, or a watch, not both stacked.
If you cook oil in a pan and leave half of it behind, you did not eat the full tablespoon. That is a real error in the other direction. Wipe or weigh the pan residue once if you are arguing with a 200 kcal gap.
A practice that is less wrong
Barcode packages (free in Cook EZ). Weigh daily dense foods. Log recipes from servings eaten. Plate-photo mixed meals with oil edits. Repeat recents. Skip user-generated mystery foods from other platforms.
Use the same app for three weeks. Switching databases every Friday guarantees disagreement with last week's "truth." Precision is relative to a consistent method.
Log alcohol. Log cooking fat. Log the extra toast. The app cannot be less wrong than the input. FSIS leftover logging is the same food later. Reheat to 165 °F. Do not log the whole pot on Sunday unless you ate it.
Being less wrong is weighing peanut butter forever and estimating lettuce forever. Density decides the effort. The portion-size article in this blog is the field manual.
Allergens are not a calorie problem
A diary that logs soy sauce does not certify the sauce gluten-free. Calorie apps are "wrong" in a medical sense when they treat food as only energy. Read labels. AI can miss wheat in sauces. The number 10 kcal next to soy sauce is not the important line for a wheat-allergic person.
Open Food Facts allergen tags can help and can lag. The package is the source.
If you use Cook EZ, generate with allergies on, then log what you actually cooked. Those are two jobs. Keep them two jobs.
Allergen logging is still not safety. A 10 kcal soy sauce line can be an emergency. Keep generate constraints and diary honesty in two hands.
Cook EZ recipe logs beat mixed-app user foods because the ingredient list is the one you generated. Edit oil. Then the number is your pot, not a stranger's sandwich named "healthy."
What accuracy to expect
Packaged food with a barcode and a scale: often within the label's rounding. Home recipes with weighed ingredients: good enough for weekly trends. Restaurant mixed plates: plus or minus a few hundred kcal unless you are a very careful editor. That last category is still worth logging so the day is not a hole.
Labs use bomb calorimeters and then apply Atwater factors. Your phone does not. Nobody at the table is doing a proximate analysis. Use the diary as a steering wheel, not as a court.
If you need clinical precision (renal diets, supervised deficits), you need a clinician and possibly weighed meals. A food app is a kitchen tool.
Clinical diets (renal, diabetes insulin dosing) need a clinician. An app disagreement of 50 kcal is noise. An app that ignores potassium is a different failure. Know which problem you have.
If two FDC rows exist for the same food, pick the cook method you used. "Chicken, fried" versus "chicken, roasted" is a structured 100 kcal gap. That gap is not the app lying. It is you picking the closer row. When unsure, pick the fattier row if the food was glistening.
Pick one yogurt. Scan the barcode. Compare the diary to the FDA panel in grams. If they match, trust that path. If they do not, change the grams to the cup in your hand. Then go cook dinner. The argument with the other app can wait.
Questions
Why did two apps disagree by 200 kcal on lunch?
Different database rows, different serving sizes, or different oil assumptions. Check grams and cook state before you trust either number.
Which source should I prefer?
The FDA label on the package you hold, then USDA FoodData Central generics, then Open Food Facts for barcodes. Be wary of anonymous user entries.
Is my TDEE wrong or my log wrong?
Often the log (oil, portions). Then the activity factor. Mifflin-St Jeor is a population estimate. Watch three to four weeks.
Should I log restaurant meals?
Yes, with a plate photo and oil edits, or you will have mystery days. Accept a wider error bar.
Sources
Open this in Cook Mode
Photograph the dish or type the title. Cook EZ writes the steps for your kitchen, then you can log the plate.