Where our food data comes from

When you scan a snack in Sito, the ingredients, the nutrition numbers and the photo on your screen came from somewhere. This page says exactly where, under which licence, and how anyone can check our work. It also covers the legal bits we owe the open-data projects we build on — we'd rather write them down in plain English than bury them.

The short version

  • Product facts (ingredients, nutrition panels, additives, allergen tags) come from Open Food Facts, a non-profit, crowdsourced food database, and from the USDA's public FoodData Central.
  • Product photos come from Open Food Facts contributors and are shown with their photo credit attached.
  • Missing products get filled in by parents using Sito, who photograph the label when we don't have it yet.
  • The score is ours. Nobody hands us a number — we compute it from the data above with our own published rules.

Our three sources

Source What it gives us Licence
Open Food Facts Barcodes, product names and brands, ingredient statements, nutrition per 100 g, additive and allergen tags, product photos ODbL 1.0 for the database, DbCL 1.0 for its contents, CC BY-SA 3.0 for photos
USDA FoodData Central Branded-food ingredient statements used to fill gaps, and generic whole foods (an apple, plain yoghurt) with standard household portions Public domain (a work of the U.S. government — no licence conditions attach)
Parents using Sito Label photos and the nutrition and ingredient data read off them, for products no database has yet Licensed to us by our Terms of Service Legal Notice (Impressum) (section 5, "product label contributions" — §5.4 in the in-app copy)

Open Food Facts

Open Food Facts is a non-profit project where volunteers around the world photograph food packaging and type in what it says. It is the backbone of our product catalogue. We keep our own copy of it rather than calling their servers on every scan — that is what they ask high-traffic apps to do, and it keeps their service fast for everyone else.

Attribution: product data from Open Food Facts, made available under the Open Database License (ODbL) 1.0; the individual contents of that database are made available under the Database Contents License (DbCL) 1.0. Authorship is attributed to Open Food Facts and its contributors. Inside the app, every screen built from their data carries the short form of this credit, "Product data from Open Food Facts, under ODbL", and tapping it opens this page.

USDA FoodData Central

FoodData Central is the U.S. Department of Agriculture's food composition database. We use two parts of it: the branded-foods set, which often carries a cleaner ingredient statement than we can get elsewhere, and the generic foods set — the "one medium banana", "1 cup of milk" entries with real gram weights — which is what lets us handle food that never had a barcode.

Attribution: U.S. Department of Agriculture, Agricultural Research Service, FoodData Central (fdc.nal.usda.gov). This data is in the public domain; we cite it because that is what USDA asks for, not because a licence forces us to.

Parents using Sito

No database has every product. When a scan comes up empty, we ask you to photograph the label, and we read the numbers off it. That contribution then helps the next parent who scans the same thing — this is how the gaps actually get filled. The licence you grant us for those photos is in section 5 of our Terms of Service. Contributed data is marked as such in the app, and until a second person confirms it, we show it with a "check the package" caution rather than presenting it as verified fact. We never turn a contributed data point into a green "allergen-free" badge.

Our copy of the Open Food Facts database

This is the legally operative part of the page, and the reason it exists.

We extract a substantial part of the Open Food Facts database into our own database, which makes our copy a Derivative Database under the ODbL. We use it publicly to produce our scores, so under ODbL section 4.6 we owe you a way to get at that derivative database — and under section 4.6(b) we may satisfy that by publishing the method we used to alter the original, rather than shipping a second copy of a dataset that Open Food Facts already publishes far better than we could.

So here is the method, in full. Anyone can reproduce our copy, byte-for-byte in substance, from the public upstream dump:

  1. Start from the official dump. Open Food Facts publishes its full export at world.openfoodfacts.org/data in two formats, JSONL and Parquet. We read the official Parquet build — the single global food.parquet Open Food Facts publishes on Hugging Face, rebuilt from their own nightly export — and we take the whole global file, not a country slice.
  2. Apply the row filters. Keep every product whose barcode contains 8 to 14 digits once non-digit characters are stripped, and which has a product name in any language. Rows failing either test are dropped. When the dump carries more than one row for the same barcode, keep only the newest revision (latest last_modified_t, then highest rev) and drop the older duplicates. There is no country, category, quality, or popularity filter.
  3. Keep this column subset: code, product_name, generic_name, brands, brands_tags, quantity, product_quantity, product_quantity_unit, serving_size, serving_quantity, categories_tags, labels_tags, countries_tags, ingredients_tags, allergens_tags, traces_tags, additives_tags, additives_n, nova_group, nova_groups_tags, lang, ingredients_text, ingredients_text_en, nutriments, nutrition_data_per, nutriscore_grade, nutriscore_score, image_front_url, image_front_small_url, image_ingredients_url, image_nutrition_url, popularity_key, scans_n, unique_scans_n, completeness, states_tags, data_quality_errors_tags, owners_tags, rev, created_t, last_modified_t, last_updated_t. Every other column in the dump is dropped.
  4. Change no values. Names, spellings, languages, units and conventions are carried across exactly as Open Food Facts ships them — including the whole nutriments object, re-encoded from the Parquet's list-of-nutrients form into the flat object shape Open Food Facts' own JSONL export uses. If a value upstream is wrong, it stays wrong in this copy. We do not correct it here. There is one exception, and it is a storage limit rather than an edit: the NUL character (U+0000) is stripped from free text, because a PostgreSQL text column cannot represent it at all — we count the affected rows instead of dropping them.
  5. Two columns we add, neither of them a fact about the product: gtin14, a lookup key computed from Open Food Facts' own code (strip non-digits; if the result is 8–14 digits, left-pad with zeros to 14; otherwise leave it unset), and imported_at, the timestamp of our import run. Both are excluded from the published subset — anyone reproducing it gets the upstream shape.
  6. Rebuild weekly, in full. Each run replaces the previous copy from a fresh dump; we do not apply incremental patches.

The script that performs those steps lives at scripts/mirror/ in Sito's application repository. That repository is private (it holds our application code and secrets alongside the importer), so we will send the filter script to anyone who asks — email berkay@sitonutri.com with "ODbL filter script" in the subject and we'll reply with it. The recipe above is written out in full precisely so that the offer is not the only thing standing between you and a reproduction.

Our copy is a derivative database licensed under the ODbL 1.0, like the original. Everything we build on top of it — our merged product table, our scores, our additive risk table — is separate, and is covered in the last section. The additive table is published in full anyway: every row, its risk class, and every citation behind it, searchable and downloadable as CSV or JSON.

Product photos

Photos of packaging in Sito were taken by Open Food Facts contributors, and they carry a different licence from the data: Creative Commons Attribution-ShareAlike 3.0, © Open Food Facts contributors.

What that means in practice, and what we hold ourselves to:

  • Every photo is shown with its credit — "Photo: Open Food Facts contributors · CC BY-SA 3.0" — linked to that product's page on Open Food Facts, where the photo and its history live. Where Open Food Facts records the individual contributor who uploaded a photo, we name them in that credit.
  • We show photos unmodified, or proportionally resized. We don't crop them to fit a square, and we don't strip their credit.
  • We serve our own copy from our servers rather than hotlinking the Open Food Facts image bucket, so that showing you a product picture doesn't cost a non-profit bandwidth.
  • Photos you take yourself stay yours in the ordinary sense — see the Terms of Service for the licence you grant us when you contribute one to the shared product database.

Our scores are our own

The number Sito shows for a product is not in any of the databases above. We compute it ourselves, with a deterministic set of rules — the same product with the same data always produces the same score, and no AI model invents the number. Under the ODbL our score is a "produced work", not part of the shared database, and it stays ours.

That is not a reason to keep it secret. We publish the thresholds and the sources behind them on our methodology page — How we score. The short answer is: nutritional quality (using the published Nutri-Score 2023 maths, with added sugars treated explicitly), additives, and how heavily the food is processed — all measured against what a child that age should be getting, not against an adult's daily value.

When the data is wrong

Crowdsourced and government data both contain errors — misread panels, decimal points in the wrong place, one product's ingredients attached to another's barcode. Before anything is scored, every product runs through a validation gate that rejects impossible labels (more calories than pure fat can hold, a nutrient exceeding the 100 g it is measured against, an energy figure its own macros can't account for). A product that fails is never given a score — we'd rather show you nothing than a confident wrong number.

If you spot something wrong on a product in Sito, email berkay@sitonutri.com with the barcode. We fix it in our copy, and where the error came from Open Food Facts we send the correction upstream too, so it gets fixed for everyone.

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.