EU-14 Allergen Data from Any Restaurant Menu — With Confidence Scores
Keyword-matched 'vegan' tags aren't allergen data. Here's how we extract the 14 EU-regulated allergens from real menus — per ingredient, with a confidence score — and how to get the same data through our menu APIs.
If you build anything for people with food allergies — a dietary app, a delivery platform, a hotel restaurant guide — you eventually hit the same wall we did: restaurant menus don't come with allergen data. The EU's Food Information for Consumers Regulation (1169/2011) requires venues to provide allergen information for the 14 regulated allergens, but what's actually printed on the menu is a dish name, a price, and if you're lucky a one-line description in the local language.
Travel Eat exists for exactly this problem, so allergen extraction is the part of our pipeline we've spent the most time on. This post explains how it works and how to use it in your own product.
The 14 allergens, and why "tags" don't cut it
The EU-14 list: gluten, crustaceans, eggs, fish, peanuts, soy, milk, nuts, celery, mustard, sesame, sulfites, lupin, molluscs.
Most menu scrapers that advertise "dietary tags" do keyword matching on the menu text: if the description contains the word vegan, the dish gets a vegan tag. That fails in both directions. A carbonara never says "contains eggs, milk, gluten" — it says carbonara. And a menu footer saying "vegan options available" tags everything on the page.
Real allergen data has to come from the ingredients, including the ones the menu doesn't spell out. That's an inference problem, not a string matching problem.
How our pipeline does it
For every dish, the AI model decomposes it into atomic base ingredients — pesto becomes basil, pine nuts, parmesan, olive oil — and classifies each ingredient against the EU-14 list. Two design decisions matter here:
- Confidence scores, not booleans. Parmesan contains milk — certainty. The bread served with a soup probably contains gluten — likely, not certain. Each allergen flag carries a confidence level, so your product can pick its own safety threshold instead of inheriting ours. For a severe-allergy use case you treat "possible" as "yes"; for a preference filter you might not.
- Explanations, not just labels. Each dietary classification (vegan / vegetarian / pescetarian) comes with a one-line explanation of why, so a human can audit any decision the model made.
The same record also carries the dish name translated into your language, the original name as printed, price with currency, estimated nutrition per serving, and a dietary type — one JSON object per dish.
Getting the data: three APIs
The pipeline runs as public actors on Apify — the same code that powers the app:
- Google Maps Menu Scraper — start from just a Google Maps place URL, place ID, or name. It finds the place's menu photos (falling back to the menu on the restaurant's own website, PDFs included) and returns structured dishes with allergens. No API keys needed; your first run includes 10 dishes free, and empty runs are never charged.
- AI Restaurant Menu Parser — already have menu photos from any source? Send the image URLs and get the same structured output.
- Restaurant Dish Photo Matcher — attach the place's real food photos to each parsed dish.
Each has a bring-your-own-keys twin at a lower per-dish price — Menu Scraper, Menu Parser, Photo Matcher — where you plug in your own free-tier Gemini key and pay Google's actual AI rates (we wrote up the honest math on what that costs).
What people build with it
- Allergen-safe restaurant discovery — filter at the dish level, not the venue level. "Show me places where I can actually order something" beats "this restaurant has a vegan option, somewhere."
- EU 1169/2011 compliance auditing — compare what a venue publishes against the EU-14 list and flag the gaps.
- Delivery platform onboarding — a partner restaurant's catalog, structured and allergen-labelled, from the menu photos they already have.
- Hotel & travel products — a translated menu with allergen flags is the difference between a guest asking reception to phone the restaurant and a guest just booking a table.
Honest limitations
The model infers from what a dish typically contains. It cannot see the kitchen: cross-contamination, a chef's substitution, or a regional variant of a recipe are invisible to any menu-based system. That's exactly why the output carries confidence scores and explanations instead of a false green checkmark — for a severe allergy, the data narrows the conversation with the kitchen; it doesn't replace it. (This is also the position EU 1169/2011 takes: the venue, not the menu, is the authority.)
If you're building something in this space, we'd genuinely like to hear about it — the more products surface allergen data, the safer eating out gets for everyone.
Travel Eat Team
Contributing writer at Travel Eat. Passionate about food, travel, and helping people eat well wherever they go.
Ready to Eat Confidently Anywhere?
Download Travel Eat and discover amazing food wherever you travel.
Download for iOS