How we decide

Every verdict on this site is produced by a fixed rule set reading a published ingredient list. No verdict is written by hand, and none is guessed. This page describes exactly what those rules do, where the data comes from, and the cases where we would rather say nothing than say something wrong.

Where the data comes from

Ingredient lists, allergen tags, nutrition tables and packaging labels come from Open Food Facts, a collaborative food database published under the Open Database License (ODbL). Photographs of the packaging back most records, which is why a printed certification mark can outrank our own ingredient scan when the two disagree.

We do not scrape certifier registries. Halal and gluten-free certification is only reported when it appears on the packaging in the source record; our certifier guide explains what each mark actually covers and links to the official body so you can verify it yourself.

The four rule sets

Figures below are from our most recent full audit, in which all 35,549 products in the database were run through all four rule sets.

Vegan

Pass
5,499 (15%)
Uncertain
12,573 (35%)
Fail
17,477 (49%)

What it checks. Animal-derived ingredients in the list (milk, whey, egg, gelatin, carmine, shellac, honey and their non-English spellings), plus the allergen and analysis tags on the record.

When it refuses to answer. Ingredients that can be either plant or animal without the label saying which — mono- and diglycerides (E471), natural flavourings, lactic acid, some sugars.

Most frequent deciding ingredients: Milk (allergen data) (11,439), milk (8,526), whey (3,500), Eggs (allergen data) (2,697), cream (2,291), cheese (1,948). Flagged for "may contain" cross-contact only: 1,507 products.

Keto

Pass
7,784 (22%)
Uncertain
714 (2%)
Fail
27,051 (76%)

What it checks. Carbohydrate and sugar figures per 100 g from the nutrition table. Over 10 g of carbs per 100 g fails; the sugar figure is shown next to it so you can judge borderline cases yourself.

When it refuses to answer. Products with no nutrition table at all. Keto is the one diet we can answer from numbers rather than words, which is why it has the fewest uncertain verdicts.

Most frequent deciding ingredients: sugar (549), Too high in carbs (60g/100g) (446), Too high in carbs (11g/100g) (425), Too high in carbs (50g/100g) (360), Too high in carbs (12g/100g) (358), Too high in carbs (13g/100g) (345). Flagged for "may contain" cross-contact only: 665 products.

Gluten Free

Pass
21,120 (59%)
Uncertain
3,856 (11%)
Fail
10,573 (30%)

What it checks. Wheat, barley, rye, spelt, malt and their derivatives in the ingredient list, the gluten allergen tag, and any gluten-free certification printed on the packaging.

When it refuses to answer. Oats without a purity claim, and anything where the only gluten signal is a "may contain" warning — that is a cross-contact risk, not an ingredient.

Most frequent deciding ingredients: Gluten (allergen data) (10,132), wheat (7,264), wheat flour (5,581), barley (2,232), malt (1,538), barley malt (853). Flagged for "may contain" cross-contact only: 581 products.

Halal

Pass
16,582 (47%)
Uncertain
16,082 (45%)
Fail
2,885 (8%)

What it checks. Pork and its derivatives, alcohol as an ingredient (wine, cider, rum, beer), and packaging-level halal certification when the record carries one.

When it refuses to answer. Mushbooh (doubtful) items: gelatin, rennet, whey, mono- and diglycerides, L-cysteine, natural flavourings. Their source decides the answer and the label rarely says. This is why halal has the largest uncertain count on the site.

Most frequent deciding ingredients: pork (1,391), wine (409), alcohol (249), cider (241), rum (200), bacon (163). Flagged for "may contain" cross-contact only: 27 products.

Why we say "uncertain" so often

Across the four rule sets there are 33,225 verdicts where we decline to give a yes or a no. That is a deliberate design choice rather than a gap we intend to close. An ingredient like gelatin, rennet, whey or E471 can be animal-derived or not, and the label usually does not say which. A tool that resolved those into a confident "yes" would be wrong for a meaningful share of products, and the people relying on it are the ones who can least afford that.

When we mark something uncertain we name the specific ingredient that caused it and, where a code is involved, link to its entry in our E-number guide. The point is to hand you the one question worth asking the manufacturer, not to leave you where you started.

Labels in other languages

The database is international, so ingredient lists arrive in many languages and a rule set that only knows English words silently passes products it should fail. Our keyword lists cover the common European spellings — lait, Milch, leche, latte, melk, süt, mleko and others. In the last full audit, 1,558 products failed the vegan check on a non-English word for milk alone: products that an English-only scanner would have waved through.

What this tool cannot do

  • Recipes change. A record reflects the packaging at the time it was photographed. Manufacturers reformulate without announcement, and the same product name can have different ingredients in different countries.
  • Cross-contact is not an ingredient. A "may contain" warning is a manufacturing risk statement. We surface it as a separate warning and never let it decide the verdict, because for a coeliac reader it matters and for a dietary-preference reader it may not.
  • We are not a certification body. Nothing here is a halal, kosher or gluten-free certification. Where a product carries a real certification we report it and name the certifier; we never issue one.
  • This is not medical advice. If you have coeliac disease or a life-threatening allergy, the physical label is the only source that counts. Read it.

Found something wrong?

Corrections are the fastest way this gets better. Every product page has a "Report an issue" link, or you can write to us directly. Tell us the product and what the packaging actually says; if the underlying record is wrong we fix it at the source so the correction reaches everyone using that database, not just this site.

Contact us