AI Restaurant Menu Parser (No API Key) + Allergens avatar

AI Restaurant Menu Parser (No API Key) + Allergens

Pricing

from $0.10 / 1,000 dish extracteds

Go to Apify Store
AI Restaurant Menu Parser (No API Key) + Allergens

AI Restaurant Menu Parser (No API Key) + Allergens

$0.2/1K dishes | Turn menu photos into dish JSON: translated names, prices, ingredients, dietary type and AI-estimated EU-14 allergens and nutrition in 15 languages. No Gemini or other API key needed.

Pricing

from $0.10 / 1,000 dish extracteds

Rating

0.0

(0)

Developer

Travel Eat

Travel Eat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

$0.2/1K dishes | Turn menu photos into dish JSON: translated names, prices, ingredients, dietary type and AI-estimated EU-14 allergens and nutrition in 15 languages. No Gemini or other API key needed. Independent, unofficial tool.

AI Menu Photo to Dish JSON, Managed AI

Our parser reads photos of a restaurant menu and returns one JSON record per dish: the name in your language, the price as printed, atomic ingredients with EU-14 allergen flags, a dietary type and an estimated nutrition block. You do not need a Gemini or any other AI key: the AI runs on our key and its cost is already in the per-dish price. It is ideal for dietary-restriction apps, delivery and menu databases, and menu translation.

Key Benefits

  • No API key: nothing to sign up for and no Google account to connect, the AI cost is included.
  • Low pricing: $0.20 per 1,000 dishes, plus a $0.00005 start fee per run. Our 12-dish test menu cost $0.00245 in Actor events.
  • Free to try: Start on the prefilled form returns a clearly marked DEMO row at no charge, and your first live run waives up to 10 dish charges.
  • No charge for empty runs: unreadable photos produce a diagnostic row, not a bill.
  • Rich output: ingredients, EU-14 allergens, dietary type and estimated nutrition in 15 output languages.

How It Works

  1. Add your menu photos: upload JPEG, PNG or WebP files in the Console, or pass image URLs (API callers can also send base64). Up to 20 photos per run are parsed together as one menu, and each image can be up to 10 MiB.
  2. Pick the output language and, if you like, the Gemini model (the cost is the same either way).
  3. Run the Actor. Each readable dish becomes one dataset row; an empty or failed parse returns one diagnostic row instead. In our test, a one-photo menu with 12 dishes finished in about 77 seconds.

More settings:

  • geminiModel - the model that reads the photos. Default is gemini-2.5-flash.
  • language - output language for names, descriptions and allergen summaries. Default is en; ingredient database names stay English.

The prefilled form (the sample menu photo, unchanged) is a deterministic preview: it returns one DEMO row, calls no model and bills nothing. Change the photo or the language for a live parse.

Limits: PDFs are not read, so convert menu pages to images first. Unreadable items are skipped rather than guessed, and AI output can be wrong on stylised or low-resolution menus.

Allergens, dietary type, ingredients and nutrition are AI estimates. They can be wrong and do not reliably account for substitutions or kitchen cross-contact. Verify critical information with the restaurant, and never use this output as the only safeguard for a severe allergy.

Data You'll Receive

  • Dish basics: name translated to your language, originalName as printed, category, price with currency as shown, composition, description.
  • Ingredients: atomic base ingredients, each with an English database name, a translated display name and EU-14 allergens with a confidence level (AI estimates).
  • Diet and nutrition: dietaryType (Vegan, Vegetarian, Pescetarian or Other) with an explanation, estimated serving size, calories, protein, fat and carbs, isAlcoholic for drinks.
  • Story: an origin or cultural note on some dishes (11 of 12 in our test menu).
  • Source: sourceImageUrls and sourceImageRefs point back to the photo each dish came from.

Sample output data

Here is an example dish from a live run of this Actor (language es; ingredients shortened to two):

{
"recordType": "DISH",
"name": "Desayuno estilo Cracovia",
"originalName": "KRAKOWSKIE / CRACOW - STYLE BREAKFAST",
"category": "Desayunos",
"price": "34 zł",
"composition": "Obwarzanek, pasta de huevo con cebollino, requesón con atún, hummus",
"description": "Un desayuno variado que incluye un pan tradicional polaco, pasta de huevo, requesón con atún y hummus cremoso.",
"ingredients": [
{
"name": "wheat flour",
"display_name": "Harina de trigo",
"explanation": null,
"allergens": [
{
"name": "gluten",
"confidence": "high"
}
]
},
{
"name": "egg",
"display_name": "Huevo",
"explanation": null,
"allergens": [
{
"name": "eggs",
"confidence": "high"
}
]
}
],
"dietaryType": "Pescetarian",
"dietaryTypeExplanation": "Este plato contiene atún, lo que lo clasifica como pescetariano. También incluye lácteos y huevos.",
"allergens": "Gluten, Huevos, Leche, Pescado, Sésamo",
"type": "dish",
"isAlcoholic": false,
"story": "El obwarzanek es un pan tradicional polaco, similar a un pretzel, originario de Cracovia y reconocido como producto regional protegido.",
"nutritionInfo": {
"serving_size_grams": "300g",
"calories": "450-550 kcal",
"protein": "25-35g",
"fat": "15-25g",
"carbs": "40-50g"
},
"sourceImageUrls": [
"https://raw.githubusercontent.com/Exdenta/traveleat-support/main/docs/assets/menu-demo-small.jpg"
],
"sourceImageRefs": [
"https://raw.githubusercontent.com/Exdenta/traveleat-support/main/docs/assets/menu-demo-small.jpg"
]
}

Results are stored in a dataset that you can export as CSV, JSON or Excel, or read on demand through the Apify API.

Support and Feedback

We improve these Actors from your feedback. If something breaks or you need a field:

  • Open an issue on the Actor's Issues tab
  • If this Actor saved you time, a short review on the Store helps other users find it.

Run evidence

Turn JPEG, PNG or WebP menu photos into dish JSON with printed names, prices and categories. Upload photos or pass accessible image URLs/base64; no AI API key is required. Convert PDF pages to images first. Ingredients, allergens and nutrition are AI estimates; verify them with the venue.

Start with one input and output

An Apify account is required. Use your Apify API token when calling the API; Console runs do not need that token pasted into the input. No Gemini key is required: the Actor owner pays for AI. Use JPEG, PNG or WebP images; convert PDFs to images first.

Free-tier event rates checked 2026-10-04: actor-start $0.00005; result $0.0002.

Cost: Total = Actor event charges + platform usage if separately billed + any BYO-provider charges. See “Current costs” for your event rates, plan tiers and a calculation. A sample does not promise future billable volume.

Input and output below were read from the same successful run t36MQ9D8a5YUfLJs0 (2026-09-07, immutable build TQVh4sXSgbtGo9God). This is an observed example, not a guarantee that repeating it returns this row.

Input JSON

{
"imageUrls": [
"https://raw.githubusercontent.com/Exdenta/traveleat-support/main/docs/assets/menu-demo-small.jpg"
],
"geminiModel": "gemini-2.5-flash",
"language": "es"
}

Matching output excerpt

Long strings and arrays are shortened for display; this is not a complete dataset fixture.

{
"recordType": "DISH",
"name": "Desayuno estilo Cracovia",
"originalName": "KRAKOWSKIE",
"category": "Desayunos",
"price": "34 zł",
"composition": "Obwarzanek, pasta de huevo con cebollino, requesón con atún, hummus",
"description": "Un desayuno tradicional polaco que combina sabores salados y frescos, servido con un pan crujiente y untables cremosos.",
"ingredients": [
{
"name": "pretzel",
"display_name": "Obwarzanek",
"explanation": "Un tipo de pan trenzado, similar a un pretzel, tradicional de Cracovia.",
"allergens": [
{
"name": "gluten",
"confidence": "high"
}
]
},
{
"name": "egg pasta",
"display_name": "Pasta de huevo",
"explanation": null,
"allergens": [
{
"name": "gluten",
"confidence": "high"
},
{
"name": "eggs",
"confidence": "high"
}
]
}
],
"dietaryType": "Pescetarian",
"dietaryTypeExplanation": "Contiene atún (pescado) y productos lácteos (requesón).",
"allergens": "Gluten, Huevos, Leche, Pescado, Sésamo",
"type": "dish",
"isAlcoholic": false,
"story": "El obwarzanek es un pan tradicional polaco, similar a un bagel o pretzel, que es un símbolo culinario de Cracovia y se vende comúnmente en las calles de la ciudad.",
"nutritionInfo": {
"serving_size_grams": "400-500g",
"calories": "600-800 kcal",
"protein": "30-40g",
"fat": "30-45g",
"carbs": "50-70g"
},
"sourceImageUrls": [
"https://raw.githubusercontent.com/Exdenta/traveleat-support/main/docs/assets/menu-demo-small.jpg"
],
"sourceImageRefs": [
"https://raw.githubusercontent.com/Exdenta/traveleat-support/main/docs/assets/menu-demo-small.jpg"
]
}

Ingredients, allergens, nutrition and translations are AI estimates. Verify dietary safety with the venue; the example is not medical or allergy advice.

Upload menu photos (or send URLs/base64 through JSON), get back the menu as structured JSON — one record per dish. No AI-provider key or provider signup required: the AI runs on our key and its cost is already included in the per-dish price.

  • name (translated to your language) + originalName (as printed)
  • category, price (with currency, as shown)
  • ingredients — atomic base ingredients (composite preparations like pesto or hummus are decomposed), each with an English database name, translated display name, and EU-14 allergens with confidence levels
  • dietaryType — Vegan / Vegetarian / Pescetarian / Other, with explanation
  • nutritionInfo — estimated serving size, calories, protein, fat, carbs
  • story — origin story / cultural significance
  • isAlcoholic for beverages

15 output languages. The prompt is the production pipeline of a dietary-restrictions travel app — battle-tested on real menus worldwide.

Input example

{
"imageUrls": ["https://example.com/menu-page-1.jpg", "https://example.com/menu-page-2.jpg"],
"language": "en"
}

That's the whole input. Run it.

Pricing and empty runs

Check this Actor’s Pricing tab for the current charges for your Apify plan. Actor-start and per-dish events apply to successful live output. Your first live run waives up to 10 per-dish charges; the actor-start charge still applies. The exact untouched prefilled sample returns a clearly marked DEMO row without calling Gemini and creates no Actor billing events; check Pricing for separately billed platform usage.

Empty and failed parses produce a diagnostic: true row with a human-readable message and create no Apify billing events.

Notes

  • The Console accepts local JPEG, PNG, or WebP uploads directly. API callers may use HTTP(S) URLs, base64 data URIs, or raw base64 in imageUrls.
  • Each decoded image is limited to 10 MiB. Inline payloads and signed URL credentials are replaced with safe references in output records and logs.
  • First live run allowance: up to 10 per-dish charges are waived; the actor-start charge still applies. The untouched prefilled DEMO is separate and completely free.
  • Up to 20 images per run, parsed together as one menu.
  • Unreadable items are skipped rather than guessed; empty results produce a non-billed diagnostic row explaining why.
  • Don't have menu photos yet? The companion Google Maps Menu Scraper actor finds them from a Google Maps place URL and parses them in one run.
  • Prefer to pay Google directly and control your own quota? The AI Restaurant Menu Parser (BYO Gemini key) Actor lets you supply a geminiApiKey and manage provider usage directly. Compare its Pricing tab and your provider charges before choosing.

Safety

Allergen, dietary, ingredient and nutrition fields are AI-generated estimates. They can be wrong and do not account reliably for substitutions or kitchen cross-contact. Verify critical information with the restaurant; do not rely on this output as medical advice or as the sole safeguard for a severe allergy.

Current costs

Current Actor event rates, checked 2026-10-04. USD; use the Pricing tab for your plan and later changes.

EventFreeBronzeSilverGoldPlatinumDiamond
Actor start (actor-start)$0.00005$0.00005$0.00005$0.00005$0.00005$0.00005
Dish extracted (result)$0.0002$0.0002$0.0002$0.0002$0.0002$0.0002

For example, 1 × actor-start, 100 × result totals $0.02005 in Actor event charges on Free. This is an arithmetic example, before any waiver; actual charged events depend on the run and selected options. It is not a promise of output or a charge for simply setting an item cap.

Your total is the charged Actor events, plus platform usage only if this Actor’s Pricing tab bills it separately, plus any external provider you use with your own key. Do not add platform usage twice when it is included. Apify credits and plan discounts affect your invoice. Set a run cost limit in Console before starting.

As documented, the first successful live run waives up to ten per-dish events; the actor-start event still applies. The untouched prefilled sample is a marked demo, not a live parse. Empty/failed diagnostic output creates no Actor billing events.

Agent setup skill

Use the maintained SKILL.md to configure the documented inputs, select latest, record the immutable build and distinguish source results from preview or diagnostic rows. Check the current Pricing tab before starting a run.


Independent tool. We built and run this Actor ourselves. Google does not operate, sponsor or endorse it, and its name is used only to say which service the data is processed with. We are not affiliated with Google.