Accuracy Report
How accurate is 0xCal?
We test 110 foods weekly — everyday staples, homemade meals, restaurant dishes, international cuisine, common misspellings, and diet-specific recipes — against USDA reference values and compare the results head-to-head with other popular tracking apps. Accuracy is tracked over time to make sure our AI stays sharp.
Accuracy by category
How each provider performs across different food types.
Detailed results
Per-food calorie comparison against USDA reference.
Special diet accuracy
When a user has a predefined diet (keto, low-carb, high-protein, mediterranean, paleo, vegan, vegetarian), 0xCal adjusts ingredients and macros to match. Each diet is judged on the macro that actually defines it — carbs for keto and low-carb, protein for high-protein and vegan, fat for mediterranean — and 0xCal, MyFitnessPal and Fitatu are all scored on the same headline macro so the comparison is apples-to-apples.
Methodology
Each food item is a standard USDA-recognized portion (e.g. "1 medium banana", "100g chicken breast"). Ground truth values come from the USDA FoodData Central database.
- This benchmark runs automatically every week. Accuracy levels are tracked continuously to ensure our AI solution stays as accurate as possible and to catch any regressions early.
- 0xCal results are generated by sending each food description as a single message to our AI pipeline, with no additional context.
- MyFitnessPal and Fitatu values are from the top search result for each food in the respective app.
- Accuracy for any single item is calculated as
100 - |estimate - actual| / actual * 100. Regular items are scored on calories (kcal); special-diet items are scored on the macro that defines the diet (e.g. carbs for keto) — see the special-diet bullet below. For macros (carbs/protein/fat) we floor the denominator at 5 g so a 2 g miss on a 3.5 g net-carb keto item doesn't collapse to 0% — small absolute deltas on tiny ground-truth values still register as directionally useful, while large misses still penalise normally. - The typos category tests messy real-world inputs (e.g. "mackdonal chiken nugits", "starbcks vanila frapachino"). Database-lookup apps like MyFitnessPal and Fitatu return no results for these, while AI-based tools can still understand the intent.
- The headline accuracy at the top of the page is a single blended average: regular items contribute kcal accuracy, special-diet items contribute the diet's headline-macro accuracy (apples-to-apples — 0xCal's diet-aware estimate vs. the macros recorded for MyFitnessPal/Fitatu's top result). When a competitor returns no result on a special-diet item it counts as 0%, the same penalty typos already get.
- The special-diet section evaluates how well each provider returns macro-correct values when the user is on a specific diet. 0xCal is scored twice on these items: once with the user's
specialDietset (diet-aware) and once without (baseline) — both calls go to the same model, only the system prompt changes. Each diet has its own headline macro: carbs for keto, low-carb and paleo; protein for high-protein, vegan and vegetarian; fat for mediterranean. The headline column on every per-diet table reflects the macro that actually constrains that diet. - Provider values for special-diet items are the typical top hit a real user sees when they search the same phrase in MyFitnessPal or Fitatu — usually a diet-blind generic match (e.g. regular shepherd's pie when you asked for the cauliflower-mash version). For each top hit we record both the kcal and the headline-macro grams (e.g. carbs for keto), so the per-diet table compares 0xCal and the competitors on the same axis.
no resultmeans the search returned nothing usable, and that item is skipped from the provider average so non-coverage doesn't double-penalise. - Single-ingredient foods link to USDA FoodData Central (values shown per 100 g; ours are for the stated serving). Composite/homemade and diet items show a full ingredient breakdown — click the USDA value to open the corresponding source page (USDA FDC, brand site, or recipe reference) so you can verify the macro yourself.
- For special-diet items, the ingredient breakdown is built from a verified USDA per-100 g catalog (
lib/fdc-catalog.json). Every ingredient is pinned to a specific USDA FoodData Central FDC ID — the same script (scripts/build-fdc-catalog.ts) re-fetches the catalog from the USDA API, so the totals are reproducible and any USDA-side drift surfaces as a diff rather than a silent regression. Branded components without a USDA equivalent (e.g. Beyond Burger patty, Mr. Tortilla 1-net-carb tortilla) are inlined with the manufacturer's published macros and a direct link to the product page. - Net carbs for keto and low-carb items. Strict-keto and low-carb users count net carbs (total carbs minus fiber), and that's what packaging advertises ("1 net carb tortilla", "0 net carb shirataki"). The catalog records dietary fiber per ingredient, and the keto/low-carb ground-truth carbs in the table below are net carbs (e.g. ½ avocado is 1.8 g net, not 4 g total; 1 oz almonds is 2.5 g net, not 6 g total). For 0xCal we tell the model in the system prompt that, for keto/low-carb users, the
carbsfield in its JSON response IS net carbs (not total), and we require it to surface the breakdown in the user-facing message — every diet-aware reply ends with a line like "Net carbs: 8 g (12 g total − 4 g fiber)", so the user can sanity-check the math and the model is forced to do the subtraction out loud rather than in its head. The benchmark calls the samecallOpenAIthe iOS app does, with no benchmark-specific flags. Competitor values stay as the carb number their app surfaces in the top result, which is total carbs by default — so when MyFitnessPal returns 50 g for a fathead bagel, the user sees 50 g, and that's what gets graded against the 12 g net-carb truth. All other diets keep total carbs as the headline since that's the convention for those macros.
Try it yourself.
0xCal is available on iPhone -- snap a photo or type what you ate and see the accuracy for yourself.