Evidence reviewed: 19 October 2026, Foleil build 14 source. Foleil prepared this desk comparison; it is not an independent product review.
Foleil connects food logging with your training and recovery. Its nutrition figures can come from a reference food, a packaged-food record, ingredient calculations, your own label entries or an AI estimate. Those routes carry different uncertainty.
We compared 36 common food and preparation pairs with USDA FoodData Central. The mean absolute energy difference was 13.56 kcal per 100 g. Protein and fat differences averaged 0.56 g and 0.62 g where both sources supplied a value. Micronutrient agreement was less consistent. These results do not establish accuracy for a photographed meal, or equivalence to a dedicated nutrition app.
Where Foleil's food figures come from
Reference foods: Foleil bundles 2,854 food entries from CoFID 2021, the UK food-composition dataset. The reference search runs on your device. Choose the food in the preparation described and enter the edible grams; the saved figures scale from that food's per-100 g values. UK reference averages can differ from food grown, made or prepared elsewhere.
Packaged foods: Barcode lookup and optional online name or brand search use Open Food Facts. These are community database records. Check the product, preparation and package label before using them. Name search finds a product; its nutrient values come from the subsequent barcode lookup. Online name search is off until enabled and runs when submitted.
Your labels and recipes: You can enter label values yourself and calculate a recipe from ingredient amounts and source values. Foleil does not silently convert a raw ingredient to its cooked weight or guess a volume-to-weight conversion.
Estimated entries: Photo and meal-description capture offer editable estimates. A photo does not reveal every ingredient, cooking oil or exact portion. These estimates are a separate source from the reference values tested below.
USDA was the comparison reference for this check. It is not the bundled general-food table in the source reviewed here. Additional reference-table readers in the code do not establish that those datasets are available in the app.
Carbohydrate has an important coverage limit
The CoFID source reports carbohydrate as monosaccharide equivalents. Foleil deliberately leaves its label-carbohydrate field unknown for those entries rather than treating the definitions as interchangeable. Its Open Food Facts adapter also leaves carbohydrate for manual verification and entry because the provider distinguishes available and total carbohydrate.
That means none of the 36 CoFID foods supplied a comparable Foleil label-carbohydrate value in this check. We have not produced a carbohydrate accuracy percentage. Unknown is not zero. Enter a matching label value when you need one.
Micronutrients, including recipes
The bundled reference resource supplies calcium, iron, magnesium, potassium, sodium and vitamin D where available. It also supplies sugars, saturated fat, water and omega-3 for some foods. Coverage varies: for example, vitamin D is present for 2,171 of the 2,854 reference foods, while omega-3 is present for 620. A stored zero is different from a missing or trace value. This is not complete coverage of every vitamin, mineral or amino acid the app can store.
The build 14 implementation carries available micronutrients from selected ingredient reference values into calculated recipes and their logged portions. Ingredient quantities scale the values; servings divide the total. A nutrient total stays unknown if any contributing ingredient lacks that nutrient. Nested recipes resolve to their ingredient components. Changing an ingredient label manually clears the copied extra details so old micronutrients are not silently attached to changed figures.
This does not mean every recipe has a full nutrient panel. A recipe with only calorie and macro estimates cannot supply micronutrients those inputs never contained.
How the logging routes work
- Search: select a named reference food and its preparation, then the grams eaten. Optional online product search opens the barcode-backed product record for review.
- Barcode: scan or enter a barcode, check the product, choose the supported as-sold or prepared nutrition set, and enter the amount in the source's grams or millilitres. Unsupported or absent source data stays unavailable; manual label entry remains possible.
- Photo: an available, permitted AI route estimates foods, portions and nutrition for review. On the on-device image route, recognition identifies foods and portions before a separate text step fills eligible missing nutrition. You can edit the items or choose source values. The figures remain estimates, including after review.
- Voice: on-device dictation produces editable meal text, then the meal-description flow offers an estimate and review. The dictation step and the nutrition-estimation route are separate. A spoken portion is not a weighed portion.
The measured desk check
We chose a purposive sample of 36 common food and preparation pairs before calculating differences. It includes fruit, vegetables, dry and cooked grains and pulses, eggs, fish, nuts, cheese, butter and oil. Raw and boiled versions are separate rows. This is a small, non-random sample, not a representative accuracy score for the whole database.
For Foleil, we read the exact bundled resources from the build 14 source and reproduced its per-100 g field mapping in a saved Python script. We did not run the iPhone app. For the comparison, we downloaded the official USDA SR Legacy archive, whose final release was April 2018. Every pair below names a USDA FDC ID and a CoFID food code. We compared edible-food values in the stated preparation without cooking-yield, density or portion conversions.
A missing value stays missing and is excluded from that nutrient's paired calculation. We did not replace it with zero or remove foods after seeing their differences. A preparation review before calculation replaced a salty dry-roasted peanut record with plain unsalted kernels; that selection note is retained in the sample file.
Results per 100 g
| Nutrient (unit) | Comparable pairs | Mean absolute difference | Weighted absolute difference | Mean per-food absolute % difference (positive USDA values) | Mean signed difference |
|---|---|---|---|---|---|
| Energy (kcal) | 36/36 | 13.56 | 6.66% | 12.66% (36 foods) | -7.5 |
| Protein (g) | 35/36 | 0.56 | 7.8% | 21.61% (35 foods) | -0.02 |
| Fat (g) | 36/36 | 0.62 | 5.12% | 74.53% (36 foods) | 0.19 |
| Carbohydrate (g) | 0/36 | Not comparable | — | — | — |
| Fibre (g) | 28/36 | 0.64 | 23.75% | 29.47% (22 foods) | -0.04 |
| Sodium (mg) | 32/36 | 15.41 | 31.95% | 88.45% (31 foods) | 1.47 |
| Potassium (mg) | 35/36 | 57.89 | 19.53% | 19.39% (35 foods) | -4.51 |
| Calcium (mg) | 35/36 | 12.46 | 20.13% | 29.12% (35 foods) | 6.06 |
| Magnesium (mg) | 35/36 | 9.46 | 20.99% | 22.75% (35 foods) | 0.2 |
| Iron (mg) | 35/36 | 0.49 | 33.08% | 31.92% (35 foods) | -0.05 |
| Vitamin D (µg) | 36/36 | 0.28 | 61.88% | 62.55% (5 foods) | -0.1 |
Reading the statistics: Mean absolute difference averages the size of each paired difference in the nutrient's unit. Mean signed difference is Foleil minus USDA, so negative means lower on average. Weighted absolute percentage difference is 100 × sum of absolute differences / sum of USDA values. Mean per-food absolute percentage difference gives each positive-reference food equal weight; foods with a zero USDA value cannot have that percentage calculated. The paired data supports recalculation from the stated formula; the retained calculation also records medians, maximum differences and zero-reference counts.
Energy's weighted difference was 6.66%, while its mean per-food difference was 12.66%. Those are different summaries, not an accuracy percentage. Fat's mean per-food difference was 74.53% despite a mean absolute difference of 0.62 g, because small reference amounts make percentage differences large. Both results are shown.
The largest energy difference was dried chickpeas: 320 versus 378 kcal per 100 g, a difference of −58 kcal. Dried lentils were 297 versus 352 kcal, a difference of −55 kcal. These differences remain in the results.
Micronutrient weighted differences ranged from 19.53% for potassium to 61.88% for vitamin D. For vitamin D, 31 of the 36 USDA values were zero; only five foods contributed to its mean per-food percentage. Farmed salmon was 4.7 versus 11 µg vitamin D per 100 g. The CoFID row does not specify salmon species; the USDA row is Atlantic salmon. This is a category comparison, not a matched laboratory sample.
All 36 food pairs
| Food (CoFID ID) | USDA FDC ID | Energy (kcal) | Protein (g) | Fat (g) | Carbohydrate (g) |
|---|---|---|---|---|---|
| Apple, raw with skin CoFID 14-319 | 171688 | 51 / 52 | 0.6 / 0.26 | 0.5 / 0.17 | unknown / 13.81 |
| Banana, raw flesh CoFID 14-318 | 173944 | 81 / 89 | 1.2 / 1.09 | 0.1 / 0.33 | unknown / 22.84 |
| Orange, raw flesh CoFID 14-327 | 169097 | 36 / 47 | 0.8 / 0.94 | 0.2 / 0.12 | unknown / 11.75 |
| Strawberry, raw CoFID 14-324 | 167762 | 30 / 32 | 0.6 / 0.67 | 0.5 / 0.3 | unknown / 7.68 |
| Blueberry, raw CoFID 14-325 | 171711 | 40 / 57 | 0.9 / 0.74 | 0.2 / 0.33 | unknown / 14.49 |
| Broccoli, raw CoFID 13-502 | 170379 | 34 / 34 | 4.3 / 2.82 | 0.6 / 0.37 | unknown / 6.64 |
| Broccoli, boiled without salt CoFID 13-503 | 169967 | 28 / 35 | 3.3 / 2.38 | 0.5 / 0.41 | unknown / 7.18 |
| Carrot, raw CoFID 13-496 | 170393 | 34 / 41 | 0.5 / 0.93 | 0.4 / 0.24 | unknown / 9.58 |
| Carrot, boiled without salt CoFID 13-497 | 170394 | 29 / 35 | 0.5 / 0.76 | 0.5 / 0.18 | unknown / 8.22 |
| Cucumber, raw with skin CoFID 13-523 | 168409 | 14 / 15 | 1 / 0.65 | 0.6 / 0.11 | unknown / 3.63 |
| Spinach, raw CoFID 13-572 | 168462 | 25 / 23 | 2.8 / 2.86 | 0.8 / 0.39 | unknown / 3.63 |
| Spinach, boiled without salt CoFID 13-573 | 168463 | 19 / 23 | 2.2 / 2.97 | 0.8 / 0.26 | unknown / 3.75 |
| Tomato, raw CoFID 13-517 | 170457 | 14 / 18 | 0.5 / 0.88 | 0.1 / 0.2 | unknown / 3.89 |
| Sweet potato, raw flesh CoFID 13-463 | 168482 | 87 / 86 | 1.2 / 1.57 | 0.3 / 0.05 | unknown / 20.12 |
| Sweet potato, boiled without skin or salt CoFID 13-646 | 168484 | 58 / 76 | 1.7 / 1.37 | 0.2 / 0.14 | unknown / 17.72 |
| Onion, raw CoFID 13-499 | 170000 | 35 / 40 | 1 / 1.1 | 0.1 / 0.1 | unknown / 9.34 |
| White mushroom, raw CoFID 13-505 | 169251 | 7 / 22 | 1 / 3.09 | 0.2 / 0.34 | unknown / 3.26 |
| Cauliflower, raw CoFID 13-512 | 169986 | 30 / 25 | 2.5 / 1.92 | 0.4 / 0.28 | unknown / 4.97 |
| White rice, long grain dry/raw unenriched CoFID 11-861 | 169756 | 355 / 365 | 6.7 / 7.13 | 1 / 0.66 | unknown / 79.95 |
| White rice, long grain boiled without salt CoFID 11-862 | 169757 | 131 / 130 | 2.8 / 2.69 | 0.4 / 0.28 | unknown / 28.17 |
| Brown rice, dry/raw CoFID 11-868 | 169703 | 333 / 367 | 7.7 / 7.54 | 1.5 / 3.2 | unknown / 76.25 |
| Oats, unfortified dry porridge CoFID 11-788 | 173904 | 381 / 379 | 10.9 / 13.15 | 8.1 / 6.52 | unknown / 67.7 |
| Whole chicken egg, raw CoFID 12-937 | 171287 | 131 / 143 | 12.6 / 12.56 | 9 / 9.51 | unknown / 0.72 |
| Whole chicken egg, boiled CoFID 12-940 | 173424 | 143 / 155 | 14.1 / 12.58 | 9.6 / 10.61 | unknown / 1.12 |
| Farmed salmon, raw flesh CoFID 16-356 | 175167 | 217 / 208 | 20.4 / 20.42 | 15 / 13.42 | unknown / 0 |
| Lentil, dry/raw CoFID 13-089 | 172420 | 297 / 352 | 24.3 / 24.63 | 1.9 / 1.06 | unknown / 63.35 |
| Lentil, boiled without salt CoFID 13-661 | 172421 | 92 / 116 | 7.8 / 9.02 | 0.7 / 0.38 | unknown / 20.13 |
| Chickpea, dry/raw CoFID 13-074 | 173756 | 320 / 378 | 21.3 / 20.47 | 5.4 / 6.04 | unknown / 62.95 |
| Chickpea, boiled without salt CoFID 13-662 | 173757 | 129 / 164 | 8.4 / 8.86 | 3 / 2.59 | unknown / 27.42 |
| Almond, whole kernel CoFID 14-896 | 170567 | 554 / 579 | 21.2 / 21.15 | 49.9 / 49.93 | unknown / 21.55 |
| Walnut, kernel CoFID 14-879 | 170187 | 688 / 654 | 14.7 / 15.23 | 68.5 / 65.21 | unknown / 13.71 |
| Peanut kernel, plain unsalted CoFID 14-877 | 172430 | 564 / 567 | 25.8 / 25.8 | 46 / 49.24 | unknown / 16.13 |
| Cheddar cheese CoFID 12-346 | 173414 | 416 / 403 | 25.4 / 22.87 | 34.9 / 33.31 | unknown / 3.37 |
| Butter, unsalted CoFID 17-661 | 173430 | 744 / 717 | 0.6 / 0.85 | 82.2 / 81.11 | unknown / 0.06 |
| Olive oil CoFID 17-038 | 171413 | 899 / 884 | unknown / 0 | 99.9 / 100 | unknown / 0 |
| Green sweet pepper, raw CoFID 13-318 | 170427 | 15 / 20 | 0.8 / 0.86 | 0.3 / 0.17 | unknown / 4.64 |
Every row is included. The paired results JSON retains the original source names, preparation descriptions, matching notes and all tested micronutrient values. The CSV contains every nutrient pair, including unavailable values. The sensitivity check below uses the same method with the almond row excluded.
What this check can and cannot show
This measures agreement between two food-composition datasets. It is not a chemical analysis of a meal, a test of portion estimation or a head-to-head test of nutrition apps. Cultivars, species, food formulation, water uptake, analytical methods and the age of the source data can affect the comparison. Some pairs use a broader USDA category: brown rice, mature spinach, whole lentils and Kabuli chickpeas have their matching limits recorded in the results.
There is also same-source overlap. CoFID's almond record explicitly cites USDA SR28, so that row is partly circular evidence. Excluding almonds changes energy's mean absolute difference to 13.23 kcal per 100 g and weighted difference to 6.86% across 35 foods. The raw sweet-potato row cites USDA for vitamin E, which we did not test. We have not ruled out other shared historical data origins.
The desk check does not validate search choices, packaged-food coverage, barcode scanning, voice recognition, photo estimates, recipe calculations or the journal's runtime behaviour. Source-backed values and editable capture make the inputs inspectable; their presence does not establish a universal accuracy rate.
Frequently asked questions
Is Foleil's nutrition more accurate than dedicated tracking apps?
This check does not establish that. It compares Foleil's bundled reference values with USDA for 36 stated food and preparation pairs. It includes missing data and substantial nutrient differences. A fair app comparison would need the same foods, source selections and measured portions across each app.
Are photo and voice entries included in the accuracy statistics?
No. The statistics use the bundled reference-food data. Photo and meal-description estimates have additional recognition and portion uncertainty and need their own measured evaluation.
Do recipes include micronutrients?
Calculated recipes can retain available micronutrients from sourced ingredient rows, scale them to ingredient quantities and divide them into servings. A nutrient total stays unknown if an ingredient lacks its value. This is not a claim that every recipe has complete micronutrients.
Why does a reference food show unknown carbohydrate?
The CoFID carbohydrate definition is not copied into Foleil's label-carbohydrate field. The reviewed Open Food Facts adapter also requires manual carbohydrate verification. Unknown means the chosen route did not supply a compatible value; it does not mean the food contains no carbohydrate.
Sources and reproducibility
- CoFID 2021 publication and dataset, updated 19 March 2021; accessed 19 October 2026. Contains public sector information licensed under the Open Government Licence v3.0, © Crown copyright.
- USDA FoodData Central downloads, SR Legacy, final release April 2018; archive downloaded 19 October 2026. USDA data-type documentation explains that SR Legacy includes analyses, calculations and published literature.
- Foleil build 14 source and bundled resources, reviewed 19 October 2026. The paired values and formulas above document the desk calculation. An offline reproduction script, sample manifest, source snapshots, official USDA archive and hashes are retained with the research record. The calculation did not call an AI model or a nutrition API.