How we check accuracy
We do not publish an accuracy percentage yet. This page describes how the data is built and checked, and shows the results of the code checks of the current release.
Where the numbers come from
- Code copies every value from the USDA and CIQUAL source files, with the source record, nutrient id and retrieval date. No model types a number.
- AI makes only recorded judgments: matching records of the same food, the preparation state of a food, density references for drinks, cooking-yield references for dishes and translations of names. Two independent passes; disagreements are settled against the source; the method and a confidence are stored with the result.
- Code checks run on every generic food, every branded record and every dish. Records that fail an error-level check are held back and not served.
- Re-checks: AI verifiers re-check random and targeted samples against the sources between releases; every fix is logged, and every response carries the dataset version.
What the code checks look for
- Energy against macronutrients (Atwater factors), and the sum of protein, fat, carbohydrate, alcohol and water.
- Physical limits: sodium above what pure salt contains, fat above 100 g, likely 1000-fold unit errors.
- Consistency: salt against sodium, sugars and fibre against carbohydrate, saturated fat against fat, fibre in animal-only foods.
- Basis: per 100 g against per 100 ml; drinks are converted to per 100 g only with a density reference that matches the product.
- Barcodes: every GTIN must pass the GS1 check digit; ambiguous readings are held back.
- A missing value is never zero: unreported nutrients stay empty in the data and in recipe totals.
Results of the code checks
| record type | check | severity | records |
|---|---|---|---|
| branded | label rounding | warning | 12,080 |
| branded | core present | warning | 8,976 |
| branded | gtin conflict | warning | 8,088 |
| branded | portion present | warning | 5,338 |
| branded | fallback record | warning | 625 |
| branded | basis ml nonliquid | warning | 246 |
| generic | salt sodium consistency | error | 14 |
| generic | fiber animal | error | 9 |
| generic | sugars le carb | error | 6 |
| generic | atwater | error | 3 |
| generic | macro sum water | error | 3 |
| generic | portion present | warning | 3,977 |
| generic | core present | warning | 571 |
| generic | salt sodium mismatch | warning | 168 |
| generic | fiber animal trace | warning | 26 |
| record type | check | records |
|---|---|---|
| branded | gtin valid | 3,991 |
| branded | atwater | 3,610 |
| branded | macro sum | 1,819 |
| branded | energy max | 1,212 |
| branded | sugars le carb | 686 |
| branded | sodium physical max | 575 |
| branded | core absent | 470 |
| branded | satfat le fat | 320 |
| branded | fiber le carb | 267 |
| branded | fat max | 266 |
| branded | sodium range | 57 |
| branded | sodium unit error | 34 |
| branded | fiber animal | 22 |
| branded | kj kcal consistency | 4 |
| generic | salt sodium consistency | 14 |
| generic | fiber animal | 9 |
| generic | sugars le carb | 6 |
| generic | macro sum water | 3 |
| generic | atwater | 3 |
Read from the dataset's QA report for release 1.0.0.
Known limits
- Branded values are as reported by brand owners to USDA; we check them for plausibility, not against the product.
- Where a source does not report a nutrient, it stays empty; we do not estimate it.
- Expert review by a dietitian of a sample of records is planned and not done; until then the data is code-checked and AI-verified only.
Found an error? Write to support@nutrientgraph.com with the food id and meta.dataset_version.