▢ Methodology · Public · Versioned
How a score becomes
a score. All of it, in public.
The full scoring methodology, the data sources behind it, and every change we've ever made — version-controlled, dated, and open to argument. If you can argue with the data, you can argue with the score.
01 / FORMULA
The score, in one equation.
Every product starts at 100. Each ingredient subtracts a penalty based on its tier and its position in the ingredient list — ingredients near the top count more, since label order roughly tracks concentration. A handful of documented critical penalties and hard caps apply in specific cases, then the result is clamped to 0–100.
SCORING FUNCTION · v2.4.12026-02-14
S = clamp(100 − Σ(pi · wi · ci), 0, 100)
where pi = tier penalty · wi = position weight
ci = AI-confidence weight beneficial=0 · fair=−2 · caution=−8 · avoid=−20
where pi = tier penalty · wi = position weight
ci = AI-confidence weight beneficial=0 · fair=−2 · caution=−8 · avoid=−20
wiPosition weight from list order.Descending concentration rule (FDA 21 CFR § 701.3). First 3 ingredients weigh 1.5×, next 4 weigh 1×, everything after weighs 0.5×.
piTier penalty, 0 to −20.Mapped from our 4-tier classification: beneficial, fair, caution, avoid. Source priority: REACH SVHC > EU Annex II > Manual > USDA FDC > PubChem > AI. REACH SVHC and EU Annex II entries link directly to the regulator's own decision document — click any flagged ingredient to see it.
ciConfidence weight, 0.5 to 1.0.Only applies to AI-classified ingredients (not regulatory/DB entries, always 1.0). An AI guess the model itself flagged as low-confidence is scored at reduced weight, so one uncertain classification can't swing the result as hard as an established one.
How S maps to the five tiers.
Each cutoff was set so the boundary product is one anyone could argue either way.