Sito gives a packaged product a score from 0 to 100, calculated only from what is printed on its label. This page is the whole method — every weight, every threshold, every table, and the source behind each one. We publish it because a classification nobody outside the company can check is not evidence.
On this page
1. The short version
We give a packaged product a score from 0 to 100, calculated only from what is printed on its label. Half of the score is nutrition, using the public Nutri-Score 2023 math, read strictly. A third is additives, using a 253-row table where every entry cites EFSA, the FDA, IARC or a named law. The rest is how processed the food is. A certified-organic label adds a small, labelled +4; not being organic costs nothing.
Then we tell you what that number means for your child — "Sometimes for your child", and in the app with your child's own name in it — because a 4-year-old and a 12-year-old have different daily limits, and we use theirs instead of an adult's.
The same label always produces the same score: the number is arithmetic, not an opinion and not an AI guess. And when a label does not add up, we would rather show you nothing than guess.
2. What the score is, and what it is not
It is a score for a product, per 100 g or 100 ml. Comparing two cereals means comparing two numbers computed the same way from the same kind of label data. Serving sizes differ between brands and are set by manufacturers, so we do the scoring maths on a fixed 100 g basis and show you serving-size numbers separately.
It is not a safety verdict, and it is not a claim about a company. Every product we score is legally sold. A low number never means a product is unsafe, illegal, or bad — it means that on our published formula, using cited public benchmarks, this product's label numbers and ingredient list score lower than others in our catalogue.
It is not medical or dietary advice. It does not diagnose anything, it does not replace your pediatrician or a registered dietitian, and it does not know anything about your child beyond what you have told us (age, and optionally sex, height, weight, activity level, allergies and any conditions you record).
It is not an allergy safety check. Allergen information is handled by a separate hard gate (§5.4) with three states — contains, not detected, no data — and we never render "not detected" as "allergen-free." "May contain" labelling is voluntary in the United States, so an absent warning is not evidence of absence. Always check the package.
There are two layers, and only one of them is stored.
| Layer | What it is | Where it lives |
|---|---|---|
| Base score | The 0–100 product score. Identical for every family. | Computed in a batch, stored on the product row with its rule version. |
| Child layer | Age-band limits, three caps, an additive re-weighting for under-6s, and the allergen gate. | Computed on your device, at the moment the card renders. It is never sent to an AI model and never attached to an analytics event, and your child's profile never leaves the device when we look a product up. |
No language model produces the number. The scoring function is pure and deterministic: same label in, same score out, in under 50 ms, with no clock, no network and no randomness. Where we use an AI model at all it is for two jobs only — reading a photographed label into fields, and writing the explanation sentence from an already-computed score — and a validator rejects any number in that prose that was not in its input.
Some unpackaged foods are scored, and most are not. The rule above says no ingredient list means no score, and a USDA entry for "banana, raw" carries none. Rather than relax that rule we shrank the set it applies to: foods whose ingredient list is the food itself. Raw produce, plain cooked vegetables, plain meat, milk, eggs, single oils. Those get a score from the same function, stamped generic-adapter@0.3.0, and today 2,462 of the 8,262 generic entries carry one.
The other 70% do not, and they show no chip at all rather than a zero. "Grilled chicken breast" is a prepared dish: what went in it is unknown, so the additive and processing axes have nothing to read and a number would be invented. An unscored food still gets the full nutrient-against-your-child's-targets display, which is the part that does not need a formulation.
3. The three axes
The base score is a weighted average of three subscores, each 0–100, plus one small bonus:
Nothing else touches the number. Our formula contains no per-product ceiling: a single ingredient never pins a product's score to a fixed maximum. What an additive costs is what its class costs on the additive axis, and nothing more.
3.1 Nutrition — 50 points
The nutrition subscore starts from the Nutri-Score 2023 algorithm (the 2022/2023 revision published by Santé publique France and the Nutri-Score Scientific Committee, summarised in Nature Food 5:361–364, 2024). We implement the published point tables exactly — energy, sugars, saturated fat and salt on the negative side; protein, fibre, and fruit/vegetable/legume content on the positive side; the 2023 additions for non-nutritive sweeteners in drinks and the protein-point cap for red-meat products. We changed none of those numbers. Changing them would not be "tuning our score"; it would be computing something that is not the Nutri-Score.
What is ours is the curve that turns the Nutri-Score's raw points into a 0–100 subscore. We anchor it on the published A–E grade boundaries for each category family, so the curve is readable against a public reference, and we set the heights low deliberately: a supermarket aisle where almost everything reads green teaches a parent nothing.
| Raw Nutri-Score points | Meaning (published grade boundary) | Our subscore |
|---|---|---|
| General foods | ||
| −15 | theoretical floor | 100 |
| 0 | A/B boundary | 75 |
| 2 | B/C boundary | 58 |
| 10 | C/D boundary | 38 |
| 18 | D/E boundary | 20 |
| 40 | theoretical ceiling | 0 |
| Beverages | ||
| −6 | floor | 100 |
| 2 | B/C boundary | 62 |
| 6 | C/D boundary | 42 |
| 9 | D/E boundary | 24 |
| 25 | ceiling | 0 |
| Fats, oils, nuts, seeds | ||
| −15 | floor | 100 |
| −6 | A/B boundary | 80 |
| 2 | B/C boundary | 58 |
| 10 | C/D boundary | 38 |
| 18 | D/E boundary | 20 |
| 35 | ceiling | 0 |
Between anchors the curve is straight; outside them it is flat. Plain water is pinned at 100, because the published algorithm grades water A whatever its points and water rows usually arrive with most nutrients unlisted.
Added sugars, which Nutri-Score does not have. US labels declare added sugars; EU labels do not. We add a term on top of the Nutri-Score subscore, subtracted from it:
| Added sugars (g/100 g) | Points removed |
|---|---|
| ≥ 5 | 4 |
| ≥ 10 | 8 |
| ≥ 15 | 12 |
| ≥ 22.5 | 16 |
| ≥ 30 | 20 (the maximum) |
When a label does not declare added sugars we read total sugars in their place and say so on the card. We never read an absent added-sugars figure as zero. Reading total sugars is the conservative direction — it over-counts naturally occurring sugars in plain milk and plain fruit purée, and we would rather be strict about a product than flattering about it. A refinement to that proxy is planned: applying the stand-in only where the ingredient list itself shows a sugar-family ingredient, and no added-sugars deduction at all where it does not. Until it ships this page describes the behaviour above, which is what the stored scores were computed from, and when it ships the rule version moves with it.
3.2 Additives — 33 points
The additive subscore starts at 100 and loses points per distinct additive on the label:
| Our risk class | Points removed | Rows in the table |
|---|---|---|
| High risk | 30 | 49 |
| Moderate risk | 15 | 32 |
| Low risk | 6 | 35 |
| No risk identified | 0 | 137 |
Each additive counts once however many times it appears on the panel. The axis floors at 0 — it cannot go negative, which is why the very worst products stop moving once they are already at the bottom.
What puts an additive in a class. The classes are a mechanical application of published regulatory findings, and the rule is written down in the table itself:
- High — IARC Group 1 or 2A with a dietary exposure route; or EFSA has withdrawn or negated a safety conclusion; or EFSA's own exposure assessment finds a child age group exceeding the ADI at mean intake; or the substance is banned or formally being phased out for food use by the EU, by the US FDA, or under a US state law.
- Moderate — IARC Group 2B; or an EFSA re-evaluation that flagged genotoxicity data gaps, found safety could not be assessed on the available data, or cut the ADI citing child exposure; or an EU harmonised classification of the substance as a reproductive or developmental hazard; or an EU withdrawal of one authorised food use while others remain; or an OEHHA/Proposition 65 listing; or membership of the Southampton-six colourants.
- Low — a credible adverse or precautionary signal that stops short of every Moderate and High criterion: peer-reviewed adverse findings not yet reflected in regulatory status, an exposure exceedance confined to high-percentile or single-event estimates, or a precautionary regulatory step short of those criteria — a reduced ADI, a data limitation noted without an adverse conclusion, a narrowed or conditioned authorisation, or a child-focused assessment or school-food law that covers the additive as part of a class.
- No risk identified — clean current EFSA and FDA status.
The table holds 253 additives and 596 verified citations (EFSA 307, FDA 126, EU and US legal instruments 86, peer-reviewed 32, IARC 18, OEHHA 14, agency reviews 5, and 8 Open Food Facts taxonomy cross-checks), a mean of 2.36 citations per row and at least one on every row. The whole table is published here — every row viewable and searchable, every additive individually linkable, and every row, class, child flag and citation downloadable as CSV or JSON. A classification nobody outside the company can check is not evidence, so we publish the one we score with. In the app, every additive we name is tappable and shows its own citations. We measured coverage against a 2% sample of our own catalogue: 98.4% of all E-number occurrences resolve to a row, and the misses are benign salts and emulsifiers queued as no risk identified rows for the next table version.
We never penalise an additive we do not recognise. A tag with no row in the table costs zero points. This matters more than it sounds: 137 of the 253 rows exist specifically to say "this is clean" — riboflavin (E101), ascorbic acid (E300), citric acid (E330), silicon dioxide (E551), pectin — so that unfamiliar can never quietly mean bad. Penalising an unknown E-number would penalise our own coverage gap rather than the product.
How we talk about additives. We use "High risk / Moderate risk / Low risk / No risk identified" for our own classes, and for regulatory facts we say exactly what is true today:
- Red 3 (E127) — the FDA revoked its authorisation for use in food; manufacturers have until 15 January 2027 to reformulate. Brominated vegetable oil and partially hydrogenated oils are likewise revoked. These are the only three in that position.
- Red 40 (E129), Yellow 5 (E102), Yellow 6 (E110), Blue 1 (E133), Blue 2 (E132), Green 3 (E143) — legally approved today, and part of a voluntary FDA phase-out that the agency has targeted "by the end of 2027". We say exactly that, with the date, and never that they are banned.
- Orange B — its revocation takes effect 8 September 2026 and is not yet in force.
- State measures — California AB 418 (in force 2027-01-01) and West Virginia HB 2354 are cited by name and date. The contested and enjoined provisions are described as contested, not as settled law.
- Propylparaben (E216/E217) — withdrawn in the EU (Directive 2006/52/EC), banned by CA AB 418 and WV HB 2354, and still GRAS in the US at 0.1% (21 CFR 184.1670). We say all three.
We never call a product, an ingredient or a brand "toxic", "dangerous", "hazardous", "harmful", "unhealthy" or "junk". Where a substance carries an IARC or Proposition 65 entry scoped to inhalation exposure — titanium dioxide (E171), talc (E553b) — we never render that as a claim about eating it.
Why some of these dyes are Moderate and others are Low. It is not chemistry, and we do not describe it as chemistry. The six dyes actually tested in the Southampton trial and carrying the EU child-warning label sit at Moderate; dyes never tested in any child trial, with clean current EFSA status, sit at Low — flagged, because a California child-health assessment and school-food laws cover them as a class, but not moved up to a finding no child trial supports. Neither Southampton mix contained a blue or a green dye, and the researchers behind the California assessment say plainly that no suitable studies of green or blue dyes exist. So Red 40, Yellow 5, Yellow 6, Quinoline Yellow, Carmoisine and Ponceau 4R are Moderate; Blue 1, Blue 2 and Green 3 are Low.
3.3 Processing — 17 points
Processing starts from the product's NOVA group (Monteiro et al., the classification used in the Public Health Nutrition literature and carried in Open Food Facts):
| NOVA group | Subscore |
|---|---|
| 1 — unprocessed / minimally processed | 100 |
| 2 — processed culinary ingredients | 85 |
| 3 — processed foods | 55 |
| 4 — ultra-processed | 20 |
| not stated | 55 |
A group number alone separates almost nothing in a supermarket aisle, because roughly 95% of packaged food is NOVA 4 — a plain wholemeal cracker and a neon breakfast cereal are both NOVA 4. What varies inside that bucket is how many additives the formulation needed, so the axis subtracts a count term:
| Distinct recognised additives | Points removed |
|---|---|
| ≥ 3 | 4 |
| ≥ 5 | 8 |
| ≥ 8 | 14 |
| ≥ 12 | 20 (the maximum) |
Only additives we recognise are counted, so an unknown tag cannot cost a product points here through the back door either.
3.4 Organic — a +4 bonus, never a penalty
If a product carries en:organic, en:eu-organic or en:usda-organic, we add 4 points after the weighted average and label the addition on the card. If it does not, nothing is subtracted — an uncertified single-ingredient yoghurt is scored purely on its nutrition, additives and processing.
The bonus is deliberately smaller than the narrowest band, so a certification can break a tie or nudge a product that is already sitting on a boundary, but it can never carry a product past a whole band. Organic sugar is still sugar, and organic broccoli does not score 104 — the total is clamped to 100.
4. The five words
The number is the score; the word is what it means for serving frequency.
| Score | Word | Rendered as | Share of our catalogue* |
|---|---|---|---|
| 85–100 | Everyday | "Everyday for your child" | 8.7% |
| 70–84 | Most days | "Most days for your child" | 16.6% |
| 50–69 | Sometimes | "Sometimes for your child" | 33.8% |
| 30–49 | Once in a while | "Once in a while for your child" | 32.0% |
| 0–29 | Rarely | "Rarely for your child" | 9.0% |
In the app these render with your child's own name in place of "your child".
* Measured across the 1,060,796 products scored in the rebuild of 2026-08-26, and re-measured whenever the catalogue rebuilds. On a 200-product basket of the kids' products US families actually scan, measured on 2026-08-12, the same bands fell 10.4 / 18.2 / 36.4 / 24.0 / 11.0%: the kids' aisle is not the catalogue.
Why frequency words and not adjectives. Every word above describes how often to serve something, which is the frame US public-health nutrition education already uses with parents, and the frame the NHS uses on its own food labelling guidance ("eat less often, or eat smaller amounts"). None of them asserts a property of the product. We deliberately do not use "bad", "poor", "mediocre", "unhealthy", "avoid", "junk", "risky" or "unsafe" as band names.
The word never appears alone. It always sits above one reason line that names its benchmark — for example: "One 28 g serving has 9 g of added sugar — 36% of the daily added-sugars limit the Dietary Guidelines for Americans imply for a 4-year-old." The word is the headline; the cited sentence is the substance.
The tests we hold our own wording to. Before a word ships on a verdict screen it has to pass four questions:
- Is it a property claim? Does it assert something about the product, or about a serving frequency, a child, or a composition fact? All five words above describe frequency.
- Is it documentable? If a brand asked us in writing for the basis, can we answer with a cited number and a published deterministic formula, without arguing about an adjective? This page is that answer.
- Would a parent read it as an accusation? "Sometimes" and "Rarely" do not read as accusations. "Bad" does.
- Does it survive being wrong? Label data is imperfect. If a product lands one band low, we have said "serve this less often" — inconvenient, and correctable, but not an accusation about anyone's product.
When there is no child on screen — the pre-signup demo scan, or a product looked at before any child profile exists — the words stand alone ("Sometimes"), and no per-child modifier is applied.
5. The per-child layer
This is the part no other food scanner does, and it is also the part we are most careful with. Everything here is computed on your device, at the moment the card renders. A barcode lookup leaves your phone carrying a barcode and nothing else — no child, no age, no allergies — and the matching against your child happens locally, against the record we send back.
5.1 Age bands and daily limits
We use the Dietary Guidelines for Americans age bands — 1–3, 4–8, 9–13, 14–18 — and the child's own daily limits as the denominators in every reason line. Adult %DV is the wrong denominator for a child: the FDA's Daily Values for added sugars (50 g) and sodium (2,300 mg) are adult values, so "20% DV" on a package is about 40% of a 6-year-old's day. Below age 4 the FDA sets no Daily Values at all for saturated fat, sodium or added sugars.
| Limit | 1–3 | 4–8 | 9–13 | 14–18 | Basis |
|---|---|---|---|---|---|
| Sodium, chronic-disease risk reduction (mg/day) | 1,200 | 1,500 | 1,800 | 2,300 | NASEM Dietary Reference Intakes, 2019 |
| Added sugars | 0 under age 2; then <10% of daily calories | Dietary Guidelines for Americans 2020–2025 | |||
| Saturated fat | <10% of daily calories | Dietary Guidelines for Americans 2020–2025 | |||
| Fibre, adequate intake (g/day) | 19 | 25 | 26–31 | 26–38 | NASEM Dietary Reference Intakes |
Calorie targets come from the Institute of Medicine's Estimated Energy Requirement equations using the child's age, sex, height, weight and activity level, so two 6-year-olds can have different denominators. Targets update automatically on a birthday, and we tell you when they do.
5.2 The three caps
A cap is the only mechanism by which a child's profile changes the number, and we only use one where a named authority states an absolute "never" for that age. Quantity-based guidance (how many ounces of juice, how much sodium) belongs in a reason line, never a cap.
- Added sugars and low- or no-calorie sweeteners, under age 2 → the score is capped at 49. The Dietary Guidelines for Americans 2020–2025 advise avoiding added sugars entirely for children under 2, and the same guidance covers low- and no-calorie sweeteners. The added-sugars half of this cap fires only when a label explicitly declares added sugars above zero — never through the total-sugars stand-in, because lactose in plain milk and fructose in plain fruit purée would otherwise flag foods that contain no added sugar at all. The sweetener half fires on the sweetener additive tags (E950 acesulfame K, E951 aspartame, E955 sucralose, E960 steviol glycosides, and their relatives).
- Caffeine, under age 12 → the score is capped at 29. The American Academy of Pediatrics advises that caffeine and other stimulants have no place in the diets of children. Detection is by caffeine appearing in the ingredient list, or the product sitting in an energy-drink or cola category.
- Energy drinks, ages 12–18 → the same cap applies. The AAP's position on energy drinks covers adolescents, not only younger children, so we do not stop the cap at 12.
Each cap renders with its own mandatory sentence naming the authority: "We lowered this for your child because the Dietary Guidelines advise no added sugars under age 2." In the app that sentence carries your child's name. A capped score is never silent.
5.3 The under-6 additive re-weighting
For a child under 6, an additive moves one class up — and only if EFSA's own exposure assessment shows that toddlers or children exceed or approach its ADI, or if a regulator has used explicitly child-specific language about it. 76 of our 253 rows carry that flag, each with the assessment cited. In practice a promotion costs about 3 points of final score (Low → Moderate) or about 5 (Moderate → High).
Three honest caveats we would rather state than have discovered:
- There is no invented "super-high" tier. An additive already in the High class does not move further.
- No row in the "no risk identified" class carries a child flag, so a clean additive can never be promoted into a deduction.
- Because the additive axis floors at 0, the products where a parent would most expect this rule to bite often do not move: a product carrying four flagged colours is usually already at the bottom of that axis. On our 200-product kids' basket the rule touched 10.4% of products and rarely changed the word.
5.4 The allergen gate
If a child's profile lists an allergen and we detect it, we show a blocking card — never a low number a tired parent can rationalise at 6pm. Three states only:
- Contains — we detected it in the ingredient list.
- Not detected — we did not. This is not "allergen-free".
- No data — we have no ingredient list for this product.
We map to the US "Big 9" (FASTER Act) rather than passing through European allergen tags unchanged, because the two are not the same shape: the European gluten tag bundles oats, which are not a US allergen and are a common safe grain for a wheat-allergic child, and the European nuts tag is one node covering almonds through macadamias, while a cashew-allergic child is usually fine with almonds. Milk-derived ingredients (casein, caseinate, ghee, lactalbumin) require walking the ingredient taxonomy, not matching a word. In the UK, Ireland, Canada, Australia and New Zealand we add the local superset (celery, mustard, lupin, molluscs, sulphites).
A persistent line sits on every allergen card: "'May contain' labels are voluntary in the US — always check the package." Allergen information from another parent's label photo is never shown to you as a verdict until it is corroborated or verified.
5.5 Conditions
Exactly three condition modifiers exist, and we decline everything else rather than improvise: type 1 diabetes (carbohydrate visibility only — we surface carbs, fibre, fat and protein and never give dosing advice), coeliac disease (a four-state gluten badge that makes "wheat-free ≠ gluten-free" explicit), and lactose intolerance (visually distinct from a milk-allergy block, because they are different things).
5.6 What never changes per child
The product's label facts. The Nutri-Score maths. The weights, the curves, the additive classes in the table, and the citations attached to them. Every no-score gate in §6. And the stored base score itself, which is child-independent by construction — the per-child result is computed for the screen you are looking at and then discarded.
6. When we don't score
Some of the packaged foods US families scan for their kids we decline to score at all, and it is not a small number. That is a design decision, not a gap we are embarrassed by: a wrong verdict about a child's food is worse than no verdict. The app says "We can't verify this label", offers to let you photograph the package, and never substitutes a low score for missing information.
| Situation | What we do | Why |
|---|---|---|
| No ingredient list | No score. Offer the "photograph the ingredient list" path. | Additives, processing and allergens are all read from the ingredient statement. Without it we would be scoring a third of the formula and guessing the rest. |
| Incomplete nutrition panel | No score when a nutrient the category's Nutri-Score variant actually needs is missing (energy, sugars, saturated fat, sodium). | A missing sugars figure scores zero points in the published algorithm, which flatters the product. Missing positive nutrients (fibre, protein, fruit content) do score zero and we let them, because that costs the product points rather than gifting them. |
| Contradictory label | Quarantine: no score, ever, until the label is re-observed. | Energy above 900 kcal/100 g; sugars above 100 g/100 g; salt above 40 g/100 g; any macronutrient above 105 g/100 g; saturated fat greater than total fat; calories that disagree with the macros by more than 30 kcal or 30%; nutrition-panel text bleeding into the ingredient field. Measured quarantine rate on the full rebuild of 2026-08-26: 3.36%, every row with a stated reason, and re-measured every rebuild. |
| Suspect sodium | No score. | A product that lists salt as an ingredient cannot contain almost none of it. When sodium is recorded below 5 mg/100 g and salt appears in the ingredients, the label is wrong — we found products recording sodium roughly 930× too low. Low sodium means fewer penalty points, so scoring these would hand salty products artificially good numbers. Bottled water, dark chocolate, raw nuts and jams genuinely contain almost no sodium and are unaffected. |
| Sources that disagree | No score, when two databases differ by more than 25% on calories, sodium or added sugars and neither label is newer. | Where one label is demonstrably newer, the newer one wins and we say which. Where nothing breaks the tie, we have two claims about a child's food and no way to choose. |
| Infant formula | Never scored, for anyone. A neutral informational card instead. | The WHO International Code of Marketing of Breast-milk Substitutes, and FDA infant-formula territory. This is decided by the product category, not by who is scanning. Follow-on and growing-up milks are included. |
| Child under 12 months | We politely decline to score. | Feeding in the first year is a conversation with a pediatrician, not a score. Purées for 12–24 months are scored normally. |
| Store-packed items, non-food products | A specific state message, never a miss. | Price-embedded store barcodes match nothing globally; cosmetics, supplements and pet food are out of scope. |
We also flag products where the data is complete but its shape does not fit US scoring — an imported product with per-100 g values, no added-sugars declaration and EU allergen tags gets a "found, limited data" state rather than a confident number.
7. Where the data comes from
| Source | What it gives us | Licence and how we honour it |
|---|---|---|
| Open Food Facts | The primary product database: per-100 g nutrition, ingredient statements, additive tags, NOVA group, allergen tags, categories, labels, photos. | Database under the Open Database License (ODbL) 1.0, contents under DbCL 1.0. We keep an unmodified subset of the dump in its own schema and publish it, with the upstream dump and our filter script, at sito.kids/data. Every verdict screen carries "Product data from Open Food Facts, under ODbL", linked. |
| USDA FoodData Central (Branded, Foundation, SR Legacy) | Ingredient statements where Open Food Facts lacks them, cross-validation of nutrition, household portions, generic foods. | Public domain (CC0) — nothing is legally required, and we cite it anyway. |
| Open Food Facts product photos | Product images. | CC BY-SA 3.0 — a different licence from the data. We show them unmodified or proportionally resized (never cropped square), serve them from our own cache rather than hotlinking, and carry the credit "Photo: Open Food Facts contributors · CC BY-SA 3.0" on the image itself, linked to the product's page. |
| Parents using Sito | Label photos that fill gaps and correct errors. | Licensed to us under our Terms of Service Legal Notice (Impressum) §5.4. Contributed data is shown as "Community-contributed — check the package" until a second observation or a review confirms it, and contributed allergen data is never shown to another user as a verdict. |
| FatSecret | The per-serving nutrition panel you see and log in the US. | Serving panels only. FatSecret never feeds the score — not one field, not as a fallback, not as a tiebreaker. It carries no ingredient statement, so it cannot support this kind of verdict, and by its terms we store only its identifiers. Its attribution appears wherever its data is displayed. |
| EFSA, FDA, IARC, OEHHA, state legislatures | The evidence behind every additive class. | EFSA OpenFoodTox and the EFSA Journal are CC BY 4.0 and attributed; FDA's Substances Added to Food inventory and 21 CFR are public domain; IARC monographs and Proposition 65 listings are cited by volume and listing date. We never present a regulator's reference value as that regulator endorsing or condemning a product. |
| The child's daily limits | Dietary Guidelines for Americans 2020–2025, the NASEM Dietary Reference Intakes (2019 sodium; energy and fibre), AAP guidance on caffeine and energy drinks, CDC BMI-for-age. | Public guidance, cited on the card that uses it. |
The score itself, the additive risk table, our validation corrections and the contribution database are ours, and stay in a separate schema from the open data we mirror. The additive risk table is nonetheless published in full — viewable and searchable row by row, with a permanent link to each additive and its citations, and downloadable as CSV or JSON — because the classes on this page are only worth anything if you can check them yourself.
8. Versions, corrections, and telling us we're wrong
Every score carries its version. The rule version stamped alongside a stored score names the things that can change it: the scoring config, the additive table generation, the Nutri-Score algorithm year, and any narrow rule that applied to that particular row. Most products carry kidscore-dstrict@1.1.0+additives-v1.3+nutriscore-2023. A row the fresh-produce rule touched carries +fresh-produce-rule@1.0.0 as well (458 products today), and a generic food carries +generic-adapter@0.3.0. When any of these changes, the version bumps and every cached explanation is regenerated rather than reused. Regulatory dates we are watching — the Orange B revocation (2026-09-08), the FDA front-of-pack labelling rule, CA AB 418 (2027-01-01), the Red 3 food deadline (2027-01-15), the voluntary dye phase-out target (end of 2027) — each bump the version when they land.
The catalogue rebuilds weekly. Every Sunday we rebuild the mirror from the upstream dumps, run a validation gate and a canary suite over the new copy before anything a parent can see moves, and promote it in a single transaction. If any stage fails, nothing is promoted and the previous week's data keeps serving: stale data is a non-event for a parent, partial data is a wrong verdict about a child. Products whose score inputs did not change keep their score; the rest are recomputed.
Every card shows how old the label is. "Label data from {date}" is on the screen, because recipes get reformulated and a database entry can be older than the box in your hand.
If something looks wrong, tell us in the app. Every product card has a "this looks wrong" action that takes a photo of the label and re-reads it. A corrected label overrides the databases for that product, for everyone. If we do not have a product at all, two photos — the nutrition panel and the ingredient list — add it permanently: the panel unlocks logging, the ingredients unlock the score, and you see your own score immediately. Other parents see it marked as a draft until a second observation or our review confirms it.
And if you are not in the app. Brands, journalists, dietitians and anyone else who wants to correct a label figure, a citation or an additive row can write to berkay@sitonutri.com. A correction we accept is dated and applied to the data, and it reaches every parent who scans that product next. We would rather hear it than not.
What we will not do. We will not change a product's score because a brand asked us to. We will change it, quickly, if a brand or a parent shows us that a label figure we hold is wrong — that is a data correction, and the formula on this page then produces whatever it produces.
kidscore-dstrict@1.1.0+additives-v1.3+nutriscore-2023 and additive table v1.3, with the fresh-produce-rule@1.0.0 and generic-adapter@0.3.0 suffixes described in section 8. This page is not reviewed by a registered dietitian — a pediatric RD review is planned after launch, and this line stays exactly as it reads until that review has happened. Nothing here is medical or dietary advice.
See what your child's snacks are really made of
Sito reads the label so you don't have to — scan a barcode, get an answer for your child.