Sito gives a packaged product a score from 0 to 100, worked out only from what is printed on its label. This page is the whole method. It shows every weight, every threshold and every table, with 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. It comes 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, from a 253-row table. Every entry in that table 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, as in "Sometimes for your child". In the app, that line carries your child's own name. We do this 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.
See the score for your own child
Scan a barcode and Sito scores the product from its label, out of 100 for your child's age and stricter under 6.
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 worked out the same way, from the same kind of label data. Manufacturers set serving sizes, and they differ between brands. 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 this product's label numbers and ingredient list score lower than others in our catalogue. That comparison runs on our published formula, using cited public benchmarks.
It is not medical or dietary advice. It does not diagnose anything. It does not replace your pediatrician or a registered dietitian. And it knows nothing about your child beyond what you have told us. You give us their age, and you can add 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), and only for a child whose profile lists an allergy. The gate warns when the label we hold names that allergen, and says so when we could not check. It never tells you a product is 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, which of the two stored scores to show (the under-6 one for a child under 6), 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. It runs 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. The first is reading a photographed label into fields. The second is writing the explanation sentence from an already-computed score. 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. 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. 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, and what went in it is unknown. 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. That 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 has no per-product ceiling. A single ingredient never pins a product's score to a fixed maximum. An additive costs 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. That is 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 sit on the negative side. Protein, fibre, and fruit/vegetable/legume content sit on the positive side. We also implement 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. That way the curve can be read against a public reference. We set the heights low on purpose. 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, and outside them it is flat. Plain water is pinned at 100. That is because the published algorithm grades water A whatever its points. It is also because water rows usually arrive with most nutrients unlisted.
Added sugars, which Nutri-Score does not have. US labels declare added sugars, and EU labels do not. So 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 never read the absent figure as zero. We read total sugars in their place only where the ingredient list shows a sugar-family ingredient. Where we have read the ingredient list and it shows none, there is no added-sugars deduction at all. Where we have no parsed ingredient list, total sugars stand in. That 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. This rule is live. It is the one change in kidscore-dstrict@1.1.0, the version the stored scores carry.
3.2 Additives: 33 points
The additive subscore starts at 100. It loses points for each 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 and cannot go negative. That 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. 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 597 verified citations. By source, that is EFSA 308, 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. That makes a mean of 2.36 citations per row, and every row has at least one. We publish the additive table in full. Every row is viewable and searchable, and every additive is individually linkable. Every row, class, child flag and citation is 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. In it, 98.4% of all E-number occurrences resolve to a row. 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. Of the 253 rows, 137 exist specifically to say "this is clean". Among them are riboflavin (E101), ascorbic acid (E300), citric acid (E330), silicon dioxide (E551) and pectin. They are there 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. 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". Some substances carry an IARC or Proposition 65 entry scoped to inhalation exposure, like titanium dioxide (E171) and talc (E553b). We never render that as a claim about eating them.
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 carry the EU child-warning label. They sit at Moderate. Dyes never tested in any child trial, with clean current EFSA status, sit at Low. They are flagged, because a California child-health assessment and school-food laws cover them as a class. But they are not moved up to a finding no child trial supports. Neither Southampton mix contained a blue or a green dye. 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. NOVA is the classification by Monteiro et al., 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. That is 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. We also 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, because 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. It is re-measured whenever the catalogue rebuilds. We also measured a 200-product basket of the kids' products US families actually scan, on 2026-08-12. There 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. That is the frame US public-health nutrition education already uses with parents. It is also 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 words stand alone ("Sometimes"), and no per-child modifier is applied. That happens in the pre-signup demo scan, or with a product looked at before any child profile exists.
5. The per-child layer
This is the part no other food scanner does. 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. 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. The child's own daily limits are 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. For children 1 through 3 years, the FDA sets separate, lower Daily Values in 21 CFR 101.9: sodium 1,500 mg, added sugars 25 g and saturated fat 10 g.
| 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 National Academies' 2023 Estimated Energy Requirement equations (Dietary Reference Intakes for Energy). The equations use the child's age, sex, height, weight and, from age 3, activity level. So two 6-year-olds can have different denominators. Targets update automatically on a birthday, and we tell you when they do. We also publish a kids calorie calculator built on the same age math, so you can see your own child's daily calories.
5.2 What a child's profile changes
There are no age caps on the score. A child's profile changes the number in exactly one way. For a child under 6, we show the under-6 score. That score counts additives our table flags for young children one class higher (§5.3). A child whose age we do not know sees the regular score. Everything else about your child goes into sentences on the card, never into the score.
- Daily limits. The added sugars, sodium and saturated fat rows compare one serving with your child's own daily limit from §5.1, in your child's name, when that serving is at least a quarter of the day. Under age 2 the added-sugars limit is zero, so that row shows the amount without a share. From 2 to 4 the limit stays at 10% of energy, the line the AAP puts at 25 g a day, and the app's daily view notes under the row that the Dietary Guidelines for Americans 2025-2030 say to avoid added sugars before age 4.
- Allergies, through the allergen gate (§5.4).
- Conditions recorded on the profile (§5.5).
An earlier version of this page described three caps here. The first capped added sugars and sweeteners under age 2 at 49. The second capped caffeine under age 12 at 29. The third covered energy drinks for ages 12 to 18. None of them is in the app, so we took them off this page on 2026-09-14.
5.3 The under-6 additive re-weighting
For a child under 6, an additive moves one class up, and only in two cases. In the first, EFSA's own exposure assessment shows that toddlers or children exceed or approach its ADI. In the second, a regulator has used explicitly child-specific language about it. Of our 253 rows, 76 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
Suppose a child's profile lists an allergy. If the label we hold names that allergen, we show a warning in place of the score. It is never a low number a tired parent can rationalise at 6pm. The score stays behind a deliberate "Show score anyway" tap, and that card has no log button. What the product card can say:
- Contains, the label's allergen information names your child's allergen. The warning comes first.
- May contain, the label's "may contain" line names your child's allergen. The card says so, says we could not clear the product, and asks you to read the pack.
- We could not check, the label we hold lists no allergens, its allergen line is in a form we cannot read yet, or we could not verify the label at all. The card says we could not check it against your child's allergies.
Search results, your scan history and the foods in a meal are simpler. They show "Contains" and the allergen on a match, and nothing otherwise. Silence there, or on a card with none of the lines above, means no match in the data we hold. It never means a food is allergen-free. For a child with no allergy on their profile, none of this appears.
Parents choose from the same 14 allergies wherever they live. Nine are the major allergens under US law (milk, egg, peanut, tree nuts, wheat, soy, fish, shellfish, sesame). The rest are celery, mustard, sulphites, lupin and coconut. Coconut stands on its own rather than under tree nuts. That is because the tree nut table in FDA's January 2025 allergen labelling guidance does not include it. So a tree-nut allergy no longer warns on coconut milk, oil or water. Some are deliberately wide, because over-warning costs a second look at the pack. Wheat also warns on the other gluten cereals, oats included. Shellfish covers molluscs. And the sulphite preservatives E220 to E228 count as sulphites. The warning carries its own reminder: "This is from the product label as we hold it. Allergen data can be incomplete or out of date, so it is a reason to check the pack, never a substitute for reading it."
5.5 Conditions
Exactly three condition modifiers exist. We decline everything else rather than improvise. Type 1 diabetes gets carbohydrate visibility only: we surface carbs, fibre, fat and protein, and never give dosing advice. Coeliac disease gets a four-state gluten badge that makes "wheat-free ≠ gluten-free" explicit. Lactose intolerance is 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
We decline to score some of the packaged foods US families scan for their kids, 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" and offers to let you photograph the package. It 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. |
| 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. Take an imported product with per-100 g values, no added-sugars declaration and EU allergen tags. It 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 §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), 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. They stay in a separate schema from the open data we mirror. Even so, the additive risk table is published in full. You can view and search it row by row, with a permanent link to each additive and its citations. You can download it as CSV or JSON. We publish it 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. Those are 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). 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 each bump the version when they land. They are 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) and the voluntary dye phase-out target (end of 2027).
The catalogue rebuilds weekly. Every Sunday we rebuild the mirror from the upstream dumps. We run a validation gate and a canary suite over the new copy before anything a parent can see moves. Then we 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, but partial data is a wrong verdict about a child. Products whose score inputs did not change keep their score, and the rest are recomputed.
If we do not have a product, you can still log it. The app offers a label photo. We read the nutrition facts panel, save the product and log it for you. The photos come to us for review. That does not give the product a score, because a score needs the ingredient list.
To tell us something is wrong. Want to correct a label figure, a citation or an additive row? Brands, journalists, dietitians and anyone else can write to berkay@sitonutri.com. A correction we accept is dated and applied to the data. 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. Nothing here is medical or dietary advice.