FRESH — what it takes to say whether a packaged food is healthy, and explain why
Research summary · FRESH · July 2026

What it takes to say whether a packaged food is healthy — and explain why

Eight federal databases describe what American foods contain. They do not share an identifier. Five published expert systems can judge a food once you have the whole picture — and they disagree with each other. FRESH is the working infrastructure that closes the first problem and reports the second. See it running on 666 real products →

Ask whether a packaged food is healthy and you have asked a question no single measurement answers. It depends on nutrients, on food groups, on bioactives, on how heavily the food is processed, on what contaminants it carries, and on how much of it people actually eat.

It is not a question any single expert answers either. More than 200 food-rating systems have been published, and they disagree.

Same problem, two levels. It turned out to have the same answer at both: don't choose — integrate the measurements, run all the experts, and report the disagreement.

Two layers, and the line between them

Almost every argument about food ratings collapses two different jobs into one. Establishing what is in a food is a measurement problem with a right answer. Deciding whether that makes it healthy is a judgment. FRESH separates them into two products with two release lines, and the separation is the design decision everything else follows from.

The map · everything else sits inside this Fig 1
The two FRESH layers: Composition below the judgment line, Food above it FRESH Composition is the provenance layer. Stage one integrates eight federal databases on three incompatible keys into one record per food carrying 236 attributes for 7,083 foods. Stage two bridges 462,141 retail products onto that record, so a matched product carries 192 attributes instead of the 13 a label supplies; 86,937 are confirmed and shipped. Composition ships as versioned, checksummed releases and contains no judgment. Above the line, FRESH Food is the interpretive layer: five published expert systems produce a Meta-Score and a Stability score, resolving to four verdicts including Uncertain, on the consumer surface. One system, two products — and the line between them is the whole idea FRESH COMPOSITION — the provenance layer What foods contain, where every number came from, and what is still unmeasured. No opinions live here. STAGE ONE — INTEGRATE Eight federal databases → one record per food Three keys that don't join — resolved into one record per food 7,083 foods · 236 attributes · provenance on every value ▸ Fig 2 STAGE TWO — BRIDGE 462,141 retail products → the same record A label gives 13 attributes; a matched product carries 192 86,937 shipped · scaling is compute, not method ▸ Fig 3 · Fig 4 · Fig 5 Ships as versioned, checksummed releases. A consumer pins a version and can audit every cell without re-running the build. Reusable by anyone — a regulator, a researcher, or a competing rating system — without inheriting a single one of our opinions. THE LINE WHERE JUDGMENT ENTERS FRESH FOOD — the interpretive layer Whether that makes the food healthy. This is editorial, and it is kept swappable on purpose. RUN ALL FIVE NRF 9f.3 · NRF 4:3:3 · Nutri-Score Food Compass · FPro published systems, unmodified REPORT THE DISAGREEMENT Meta-Score — where a food sits Stability — how far the experts diverge ▸ Fig 6 FOUR VERDICTS Healthier · Neutral · Unhealthier Uncertain conventional scoring can't return this Because nothing below the line was decided here, this layer can be replaced, argued with, or ignored — and the data underneath survives it.
Everything below the line is measurement; everything above it is judgment. That boundary is why the composition layer can be handed to someone who disagrees with our ratings entirely and still be useful to them. Each figure that follows carries a tag naming where on this map it sits.

No one measurement answers it

Nutri-Score is the simplest of the five systems we run, and the one printed on packaging across Europe. It needs energy, sugars, saturated fat, sodium, fibre and protein — all of which sit on a Nutrition Facts panel — plus the fruit, vegetable, nut and legume fraction of the product.

That last term is mandatory. It is not a nutrient, it is a food-group quantity, and it never appears on packaging. Across 80,000 label cells checked, it appeared zero times.

So Nutri-Score cannot be computed from a label. Not computed poorly — not computed. And the pattern steepens as the systems get more ambitious: NRF 9f.3 takes 12 inputs, NRF 4:3:3 takes 10, Nutri-Score 7, Food Compass 54, FPro 58. Not one of the five is computable from a Nutrition Facts panel.

The missing inputs are not exotic. USDA has measured nearly all of them. It has measured them in eight different places.

USDA has the answers, in eight places

There is no single USDA food-composition database. There are several partial ones, built for different purposes over different decades, keyed three incompatible ways. Each is authoritative on its own dimension and silent on the others. Food-group values exist twice, once per vocabulary. Flavonoids exist twice the same way. A question as ordinary as how much whole grain, and how much quercetin, is in this food crosses at least two vocabularies — and joining on food name is not a join.

Eight federal sources on three keys, joined into one record per food Three groups of federal sources are keyed incompatibly: FNDDS, FPED and FlavVal by food code; SR Legacy, FPID and FDB-EXP by NDB number; the FDA Total Diet Study and the USDA NIH Iodine Database by their own identifiers. Food groups and flavonoids each exist twice, once per vocabulary. The two vocabularies are joined using a linkage USDA already publishes, so measurements travel both up and down the graph. The result is one record per food carrying 236 attributes, where no single source carries more than 149. After linking, food groups and flavonoids are complete for all 7,083 foods and nutrients reach 68.3 percent against 43 percent for FNDDS alone. Contaminants are reported differently: 34,871 cells across 4,362 food codes, each declaring the share of the food's weight the value rests on, with 2,983 at or above 90 percent coverage. Eight sources. Three keys that don't join. One fact in USDA's own files that fixes it. KEYED BY FOOD_CODE KEYED BY NDB_NUMBER OWN KEYS, MAPPED IN FNDDS 2017-18 7,083 survey foods · 65 nutrients FPED food-group equivalents · food codes FlavVal flavonoids · food codes SR Legacy 7,793 foods · up to 149 nutrients FPID the same food groups · ingredients FDB-EXP the same flavonoids · ingredients FDA Total Diet Study 271 of 307 foods mapped to USDA keys USDA / NIH Iodine 4.0 478 foods, with uncertainty Food groups exist twice. Flavonoids exist twice. Neither pair shares a key. The link between the two vocabularies is already published by USDA It carries values in both directions, so neither vocabulary is left partial SR's deeper nutrient panel rolls UP to the survey food · food-group and flavonoid axes push DOWN onto the ingredients One record per food — 236 composition attributes, each carrying its own source 7,083 foods · no single USDA source carries more than 149 Nutrient values 460,395 → 725,964 — a 58% increase, lifting a food from 65 nutrients to a median of 93 WHAT THE JOIN CLOSES — % OF POSSIBLE VALUES PRESENT, ALL 7,083 FOODS Food groups 100% Flavonoids 100% Nutrients 68.3% FNDDS alone 43% CONTAMINANTS — REPORTED WITH DECLARED COVERAGE, NOT AS A COMPLETENESS PERCENTAGE 34,871 cells across 4,362 food codes · 2,983 at ≥90% coverage · 271 of 307 FDA TDS foods mapped to USDA keys Every cell declares the share of the food's weight it rests on. An unmatched ingredient is unknown, never zero.
Why nutrients stop at 68.3% and not 100%. SR has only assayed a fraction of its own 149 analytes on any given food — vitamin D isoforms, menaquinone-4, fluoride, individual tocotrienols were simply never measured on most items — and the rollup refuses to emit a value for a recipe unless every ingredient contributed one, rather than quietly treating an unmeasured ingredient as a zero. The remainder is the edge of what USDA has measured, and it is declared on the row rather than filled. Integration can move a measurement to where it belongs; it cannot create one.

The rollup is checked against USDA's own answer. Where USDA publishes an artifact we can rebuild, we rebuild it and compare cell by cell rather than in aggregate. The FPED rebuild reproduces the published artifact with 0 mismatches across 262,071 cells. It also recovers 85 dishes that had been silently zeroed, and surfaces 6 candidate errata in the published file — findings that only appear when the comparison is per-cell.

From a shelf label to a full record

USDA's branded release catalogues 462,141 retail products, each described by a mean of 13 of the 236 attributes: whatever fits on a Nutrition Facts panel. Stage two decides which USDA food each product actually is, so it can inherit the rest. 86,937 products are confirmed and shipped to date; the pipeline is built, benchmarked and running, and extending it across the catalogue is a question of compute and funding rather than method.

The five-step branded matching process Packaged product text is standardized, narrowed to plausible candidate foods, retrieved by both lexical and semantic similarity, reviewed by a knowledge-bearing model that selects or refuses, and confirmed only when signals agree. A confirmed match ships with the full inherited record; anything else is held with a named next action rather than guessed. Packaged product text — brand names, marketing copy, all-caps, abbreviations Standardize clean the text Narrow plausible foods only Retrieve lexical + semantic Review a model picks — or refuses Confirm signals must agree Confirmed → ships with the full record Not confirmed → held, with a next action Nothing is guessed. An uncertain match stays visible; it is never silently filled.
Each step does one job, and the order matters. Nutrient values can reject an implausible match but never promote one: corn chips and potato chips are nutritionally near-identical and are not the same food. Only the review step has the world knowledge to tell smoked beef sticks from potato sticks.
What a product record gains by joining eight datasets A Nutrition Facts panel supplies about 13 of the 236 attributes FRESH tracks. The remaining attributes come from datasets already joined in stage one: FNDDS and SR Legacy supply 154 nutrient-side attributes, FPED and FPID supply 37 food-group equivalents, FlavVal and FDB-EXP supply 37 flavonoid quantities, and the FDA Total Diet Study and the Iodine Database supply 8 contaminant and trace values. On shipped products the resulting record is 75 percent complete on nutrients, 100 percent on food groups and 97 percent on flavonoids, for a mean of 192 of 236 attributes populated. Contaminant values are not reported as a completeness percentage: each cell declares the share of the food's weight it rests on, and an unmatched ingredient is treated as unknown rather than zero. A package answers 13 questions. The other 223 have to come from somewhere. of the 236 composition attributes FRESH tracks per food THE PACKAGE WHAT STAGE ONE ALREADY JOINED THE MATCHED PRODUCT RECORD Nutrition Facts 13 attributes energy, macros, sodium, a handful of vitamins FNDDS + SR Legacy 154 nutrient-side FPED + FPID 37 food-group values FlavVal + FDB-EXP 37 flavonoid values FDA TDS + Iodine DB 8 contaminant + trace Nutrients 75% Food groups 100% Flavonoids 97% Contaminants each cell declares its own coverage % shown = complete on shipped products A confirmed product carries 192 of the 236 — not 13 The 44 still absent are attributes USDA never measured on the donor either. They are declared on the row, not filled in. Contaminants aren't a completeness percentage: each cell carries the share of the food's weight the value actually rests on. An unmatched ingredient is unknown, never zero — so a contaminant value is a declared lower bound rather than a silent average.
This is the whole return on the integration work. Matching itself costs almost nothing — a product simply inherits what its matched food has — so the value comes from how complete that food's record already was. Every filled value records its origin, which is what keeps an inherited mineral from ever being mistaken for a measured one. The contaminant axis shows the discipline most clearly: rather than average across a recipe or zero-fill the ingredients nobody sampled, each value carries the fraction of the food's weight it accounts for, so it reads as a declared lower bound. One refinement is still open and stated as such — moisture concentration is not yet applied, which understates cooked foods.

How the matching performs against published work

Two 2026 papers set the state of the art for mapping food descriptions onto a reference database, and Lemay et al. published their benchmarks. We adopted them. Retrieval — putting the right food in front of the selector — is the part that is essentially solved:

82.0%
FRESH embedding arm, correct food ranked first — against Lemay's published 77%
97.7%
FRESH in the top five — against Lemay's 96%
99.0%
top-five recall for our full retrieval union, lexical and semantic combined
84.6%
of the second benchmark resolves by direct identifier join — what a unified keyspace buys

What this benchmark is, and is not. It maps one research database to another — curated dietary-recall descriptions against a few hundred candidate foods, both written in controlled scientific vocabulary. That is a far tidier problem than matching hundreds of thousands of retail products written in marketing copy. It shows our components are competitive on the field's own yardstick; it does not measure the production task, which is harder. Notably, 47% of the benchmark items have no correct answer at all, and the right response is to refuse — so scoring matched and unmatched items together is the only honest measure.

The accuracy trade-off, and where each system chooses to sit Plotting correct refusals against matched-item accuracy. The FRESH strict operating point scores 61.6 percent on matched items and 76.4 percent on correct refusals, for 68.6 percent overall. The FRESH loose operating point scores 88.0 and 39.1, for 65.1 percent overall. Lemay's published hybrid scores 82.2 and 46.6, for 65.4 percent overall, and sits between the two FRESH points on the same trade-off curve. The difference is not capability but where each system chooses to draw the line. Accepting more false matches buys more true ones — and we choose where to sit both FRESH points are the same pipeline on the same public benchmark; only the selection instruction differs accuracy when a correct answer exists → ↑ correctly refusing when no answer exists 0 100% 100% FRESH — strict 61.6 matched · 76.4 refused · 68.6 overall Lemay 2026 hybrid 82.2 · 46.6 · 65.4 overall FRESH — loose 88.0 · 39.1 · 65.1 overall We win on overall accuracy at the strict point, and on matched-item accuracy at the loose point. The line is a dial, not a limit.
Where we trail, and why it is a choice. At our production operating point we score 61.6% on matched items against Lemay's 82.2%, because our selector refuses salted-for-unsalted and raw-for-steamed substitutions — for nutrient imputation those are different foods. Change one instruction, from "find the same food" to "find the closest usable donor", and the same pipeline reaches 88.0%, above their 82.2%, at the cost of correct refusals falling to 39.1%. Where to draw that line is a decision about consequences: a surveillance database wants the strict end, where a wrong match silently corrupts every product that inherits it; a consumer recommender may want the other. FRESH exposes the choice and reports which setting produced a release rather than hard-coding it.

The matching step itself is settled science, and we say so. All three systems retrieve candidates and let a model select or refuse. The difference is what surrounds that step.

CapabilityFRESHLemay 2026Hauff 2026
Retrieve candidates, then let a model select — or refuse
Build the target database first, by merging several sources
Provenance on every value — source, method, confidence
Nutrient feasibility can veto an implausible match
Preparation form is part of identity — raw is not steamed
Expert rating systems scored on the output
present partial — Lemay wanted the nutrient gate and dropped it; Hauff names form as future work

Only the first row is a matching capability, and all three have it. The rows below it are what a database has to carry before a rating can be computed from it at all. A text-only matcher can name the right food; it cannot tell you what that food contains across every dimension a rating system asks for, or where each of those numbers came from.

And no one expert answers it either

With a complete record in hand, holes and all, the systems can finally run. Score whole-wheat bread — a food most people would call straightforwardly healthy — against roughly 6,450 US foods.

Whole-wheat bread scored by five expert systems Whole-wheat bread's percentile rank in the US food supply under five systems: FPro places it at the 12th percentile, NRF 9f.3 at the 69th, Food Compass at the 74th, Nutri-Score at the 93rd, and NRF 4:3:3 at the 99th. The Meta-Score is 74.5 and the spread is wide enough that the food is returned as Uncertain rather than given a verdict. Whole-wheat bread sits at the 12th percentile and the 99th, depending who you ask percentile of the US food supply · ~6,450 foods 0 50th 100th processing 12th FPro NRF 9f.3 · 69th Food Compass · 74th Nutri-Score · 93rd NRF 4:3:3 · 99th Meta-Score 74.5 · spread too wide to call · verdict: Uncertain
The spread is not noise. FPro is a processing score and marks the loaf down for being an industrially produced bread; NRF 4:3:3 rewards its nutrient density and places it near the top. Both are behaving correctly, because they are measuring different things. Average them and you get a confident 74th percentile — and you have destroyed the only information that mattered. Report the middle with its spread and the honest answer is Uncertain.

Run the whole stack on 666 matched retail products and the pattern holds across the shelf:

Healthier Neutral Uncertain Unhealthier

On half the shelf, the published experts do not agree closely enough to support a verdict. That counts as a finding only because of the integration underneath it — fill a missing composition value quietly and the disagreement stops being a property of the systems and becomes an artifact of the filling.

The framework itself is published, and so is its application: across 20 carbohydrate staples the experts were Uncertain on 15 of 20, and consumer belief misaligned with expert judgment on 17 of 20 — measured against 11,503 belief distributions from 1,438 US consumers.

Stated plainly

The honest weakness is over-refusal, not retrieval. FRESH ranks the correct food first more often than the published reference (82.0% against 77%) and then declines to certify a share of those correct retrievals. That is why the strict setting reports 61.6% on answerable items against the hybrid's 82.2%. It is a deliberate, tested choice, and the loose setting shows the ceiling is 88.0%. No single setting dominates every column.

Where others are ahead of us. Hauff shows a fine-tuned model beating an individual human expert and names labeled training data as the bottleneck; we hold such a corpus and have not used it that way yet. Lemay set the external-benchmark discipline, which we adopted only after the fact.

And the gold labels are themselves a loose reference. We found published items scored wrong that are correct, and items scored correct that are only approximations. Agreement with those choices is not the same thing as accuracy — which is why no purpose-neutral gold standard for this task exists yet. Building one is the gap a shared public framework is best placed to close.

Literature

  1. Erndt-Marino J, O'Hearn M, Menichetti G. An integrative analytical framework to identify healthy, impactful, and equitable foods: a case study on 100% orange juice. International Journal of Food Sciences and Nutrition. 2023;74(6):668–684. doi:10.1080/09637486.2023.2241672
  2. Erndt-Marino J, Ghirardelli A. Educational gaps and communication priorities for the healthfulness of carbohydrate foods. Journal of the American Nutrition Association. 2026. doi:10.1080/27697061.2026.2687436
  3. Lemay DG, Strohmeier MP, Stoker RB, Larke JA, Wilson SMG. Evaluation of large language models for mapping dietary data to food databases. The Journal of Nutrition. 2026;156:101678. doi:10.1016/j.tjnut.2026.101678
  4. Hauff P, Krems C, Kohl J. Leveraging large language models to maintain a branded food product database. npj Science of Food. 2026;10:191. doi:10.1038/s41538-026-00909-1
  5. Jankelow AM, et al. NutriMatch. npj Digital Public Health. 2026;1:1. doi:10.1038/s44482-025-00001-7