Methodology · version 1.0
How Food.FM scores food
Every number in the app comes from the rules on this page. The tables below are generated from the same code the app runs, so they can’t drift out of date.
Principles
- Open. No hidden weights. Each product shows its own calculation under “Show the math”.
- Context over alarm. Additives are judged by the weight of evidence, not by how chemical their name sounds. Portion and food type matter.
- Processing counts. How a food is made is 30% of the score, and ultra-processed foods can’t be rated Excellent.
- Personal on top, never instead. Your profile adjusts the general score and explains every adjustment; the general score is always one tap away.
- No money in the score. Brands cannot pay to change a score or appear in swaps.
- Honest about gaps. If key nutrients are missing we don’t guess a score; we ask you to snap the label.
The formula
Food.FM score = Nutrition (0–50) + Processing (0–30) + Additives (0–20), then any ceiling applies.
Nutrition (50 points)
Measured per 100 g (foods) or per 100 ml (drinks). Each “limit” nutrient earns full points at or below its low mark, falls to 40% at its high mark, and reaches zero at 1.5 × the high mark. Between those points it falls in a straight line.
Foods: limits (40 points)
Foods: positives (10 points)
Drinks (50 points)
Drinks are judged mainly on sugar and energy. Saturated fat and salt only subtract. Drinks that use non-sugar sweeteners lose 20 points: the WHO (2023) advises against non-sugar sweeteners for weight control, and sweet drinks without sugar still sustain a taste for sweet drinks.
Category rules
- Oils, fats, nuts and seeds are judged on fat quality (the saturated share of total fat: ≤ 20% full points, 40% → 40%), not on calories or total fat. They’re eaten in small amounts and their fat type is what matters. This follows the 2023 Nutri-Score update.
- Condiments (hot sauce, mustard, ketchup, soy sauce, spices, or any sauce with a serving of 30 g or less) keep only 70 % of the salt and sugar penalty, because nobody eats them by the 100 g. Per-serving numbers are always shown.
- Alcoholic drinks are not scored. There is no amount of alcohol known to be good for health.
- Plain waters with nothing declared are treated as zero energy, sugar and salt.
- Inferred values. If sugars aren’t declared but energy is very low, sugars can’t exceed energy ÷ 4 (and saturated fat can’t exceed energy ÷ 9). We use that bound only when it is already in the “low” band, and we say so.
Processing (30 points)
We use the NOVA classification from Open Food Facts. When it’s missing we estimate it from the ingredient list (marked “est.” in the app): any ultra-processing marker means NOVA 4; salt, sugar, oil or vinegar added to a few foods means NOVA 3; a single culinary ingredient means NOVA 2; otherwise NOVA 1.
Ultra-processing markers we look for include: , plus cosmetic additives such as colours, sweeteners, flavour enhancers and emulsifiers.
Additives (20 points)
The component starts at 20 and loses points for each additive, according to the weight of evidence at typical intakes. Each entry in the table carries its plain-language basis and any regulatory status we’re confident about.
Ceilings
After summing, the lowest applicable ceiling wins, so one bad dimension can’t be averaged away by good ones:
Your score
Your profile never leaves your phone. It changes the score in three ways, and every change is listed under the product.
Hard stops (score 0, “Not for you”)
- An allergen you selected appears in the ingredients or the declared allergens. With strict mode, “may contain” and shared-facility warnings count too.
- A vegan or vegetarian conflict, gluten for a gluten-free diet, and in pregnancy: alcohol, unpasteurised dairy or high-mercury fish (FDA “choices to avoid”).
Adjustments
Information
Per-serving facts use FDA Daily Values: 5% DV or less is low and 20% DV or more is high. People with diabetes see carbohydrate exchanges (15 g each) per serving; low-FODMAP diets get an ingredient screen (check the Monash University guide for portions).
Data sources & limitations
- Products: Open Food Facts, a crowd-sourced database under the Open Database License. Data can be incomplete or out of date; label photos let you check against the package in your hand.
- Label photos: transcribed by Google Gemini. The score itself is always calculated by our code, not by the AI.
- Recalls: U.S. FDA enforcement reports via openFDA, matched by barcode. Recalls are not always barcode-indexed, so “no match” isn’t a guarantee.
- Additive amounts are not printed on labels, so additive scoring is based on presence and evidence tier, not dose. Ingredient order (by weight) is used where it matters, such as sugar in the first three ingredients.
- Not medical advice. Thresholds are population guidance. Your clinician’s advice comes first.
Calibration
We compared Food.FM scores with the official Nutri-Score grades Open Food Facts publishes, on 62 popular US products across 26 categories (October 2026). The rank correlation was 0.77, and average scores fell steadily with each grade:
| Nutri-Score grade | A | B | C | D | E |
|---|---|---|---|---|---|
| Mean Food.FM score | 84 | 78 | 53 | 45 | 40 |
We don’t aim for perfect agreement: Food.FM deliberately adds processing and additive evidence, and treats condiments by portion. The sample is small; we’ll publish a larger evaluation as the dataset grows. The calibration script ships with the source code.
Questions or a correction? We review the additive table at least once a year and log every change to the formula.