FSFoodScore

Transparent by default

How the FoodScore works

FoodScore is a single 0–100 number computed deterministically from per-100g nutrient data. The algorithm is public and reproducible. No editorial bump, no lobby influence, no secret sauce.

Reference framework

USDA DGA 2020-2025

Daily Value system

FDA 2016 rule

Process level

NOVA classification

1. Inputs

Every food in our database is normalised to per 100g. We source data primarily from USDA FoodData Central (Foundation and SR Legacy for generic foods, Branded for packaged products) and cross- reference against FDA-mandated labels. The algorithm reads these fields:

  • Macronutrients: calories, total fat, saturated fat, trans fat, fiber, protein, added sugar
  • Minerals: sodium, potassium, calcium, iron, magnesium, phosphorus, zinc
  • Vitamins: A, C, D, E, K, B12, folate, riboflavin
  • Fatty acids: omega-3 (ALA + EPA + DHA)
  • NOVA class (1–4) from ingredient list

2. Base score

Every food starts at 50. From there we add bonuses for positive nutritional contributions and subtract penalties for shortfalls. The final score is clamped to 0–100.

3. Bonuses

CriterionRuleCap
Fiber+1.5 per gram above 1g/100g+12
Protein+1 per gram above 4g/100g+10
Micronutrients ≥ 10% DV+2 per qualifying nutrient+12
Omega-3 ≥ 0.5g+5 flat+5
Healthy fat profile (NOVA 1-2 only)Total fat ≥ 8g and saturated fat < 35% of total fat+10
Whole foodNOVA 1: +10 / NOVA 2: +8+10

Total bonuses are capped at +35. This ensures that a heavily fortified ultra-processed breakfast cereal cannot score higher than a whole food that naturally delivers similar micronutrients.

4. Penalties

CriterionRuleCap
Added sugar-1.5 per gram above 2g/100g-25
Saturated fat-2 per gram above 3g/100g-15
Sodium-1 per 150mg above 200mg/100g-12
Trans fat present-20 flat
Ultra-processed (NOVA 4)-10 flat
Processed (NOVA 3)-5 flat
Empty calories-15 if protein + fiber < 2g AND added sugar > 5g
Concentrated ultra-processed fat-3 if NOVA 4 AND total fat ≥ 15g AND saturated fat ≥ 3g

5. Verdict bands

ScoreVerdict
90–100Excellent
75–89Very good
60–74Good
45–59Decent
30–44Poor
0–29Avoid

6. What FoodScore is not

FoodScore is a quality indicator for a given 100g of food, not a prescription. It does not account for portion size, allergies, individual medical needs, or dietary patterns. A high-scoring food eaten in excess is still too much. A low-scoring food eaten occasionally in a balanced diet is not a crisis.

Unlike EWG Food Scores, we do not use the outdated 2004 UK Ofcom traffic-light methodology. Unlike some commercial apps, we are not funded by any food brand or certification body.

7. Changelog and governance

When calibration changes, we publish the diff. All formula constants are documented in the public src/lib/foodscore.ts source file. Quarterly data refreshes pull the latest USDA FDC dataset.

See the about page for editorial principles, and the contact page to report a data issue.