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.

Current version
Last update
Changelog entries0
Open corrections0
Stable
01 / FORMULA

The score, in one equation.

Every ingredient is weighted by concentration, regulatory status, and peer-reviewed risk data. The product score is the harmonic mean — so a single high-risk ingredient can't be hidden under a long list of safe ones.

SCORING FUNCTION · v2.4.12026-02-14
S = n / Σ(wi / ti)
where n = ingredient count · wi = position weight
ti = tier safety score beneficial=95 · neutral=70 · concerning=35 · avoid=5
wiPosition weight from list order.Descending concentration rule (FDA 21 CFR § 701.3). Ingredients above 1% are ordered by weight.
tiTier safety score, 5–95.Mapped from our 4-tier classification: beneficial, neutral, concerning, avoid. Source priority: REACH SVHC > EU Annex II > Manual > USDA FDC > PubChem > AI.

How S maps to the five tiers.

Each cutoff was set so the boundary product is one anyone could argue either way.

TierRangeMeaningBoundary example
CLEAN85–100All clear.Ingredients are primarily beneficial or neutral. No concerning or avoid-tier entries.Cetaphil Gentle Cleanser, plain Castile soap.
GOOD70–84Solid choice.Mostly beneficial/neutral. One or two concerning-tier items at low concentration (<1%).CeraVe Daily Moisturizer, Method dish soap.
FAIR55–69Use with context.One or more concerning-tier ingredients, or fragrance (undisclosed blend) present.Vaseline Aloe Vera Lotion, Tide Free.
SKETCHY35–54Real concerns.Multiple concerning-tier ingredients, or one or more avoid-tier items at low dose.Most drugstore deodorants, conventional shampoo.
YIKES0–34Hard pass.Contains avoid-tier ingredients — substances banned or restricted by EU, Health Canada, or FDA.Old-formula relaxers, formaldehyde keratin treatments.

The changelog.

0 ENTRIES · NEWEST FIRST
Filter