AI Menu Parser (Flat Price per Menu) + Allergens avatar

AI Menu Parser (Flat Price per Menu) + Allergens

Pricing

from $10.00 / 1,000 menu parseds

Go to Apify Store
AI Menu Parser (Flat Price per Menu) + Allergens

AI Menu Parser (Flat Price per Menu) + Allergens

$20/1K menus | Parse a menu (up to 10 photos) into dish JSON for one flat price per menu, however many dishes it has: translated names, prices, ingredients and AI-estimated allergens in 15 languages. No API key.

Pricing

from $10.00 / 1,000 menu parseds

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

$20/1K menus | Parse a menu (up to 10 photos) into dish JSON for one flat price per menu, however many dishes it has: translated names, prices, ingredients and AI-estimated allergens in 15 languages. No API key. Independent, unofficial tool.

AI Menu Photo to Dish JSON, Flat Price per Menu

Our parser reads up to 10 photos of one restaurant menu and returns one JSON record per dish, for one flat charge per successfully parsed menu: a 12-dish café card and a 60-dish dinner board cost the same. No Gemini or other AI key is needed; the AI cost is included. It is ideal for dietary-restriction apps, menu databases and menu translation.

Key Benefits

  • No API key: nothing to sign up for, the AI cost is included.
  • Flat pricing: $20 per 1,000 menus ($0.02 per parsed menu), whatever the number of dishes. You know the cost before you run.
  • Free to try: Start on the prefilled form returns a clearly marked DEMO row at no charge.
  • Charged only on success: empty, unreadable or failed parses return a diagnostic row and no charge.
  • Rich output: ingredients, EU-14 allergens, dietary type and estimated nutrition in 15 output languages.

How It Works

  1. Add the photos of one menu: upload JPEG, PNG or WebP files in the Console, or pass image URLs (API callers can also send base64). Up to 10 photos per run, each up to 10 MiB, are parsed together as one menu.
  2. Pick the output language.
  3. Run the Actor. You get one dataset row per dish, and one menu-parsed charge. In our test, a one-photo menu with 12 dishes finished in about 78 seconds and was charged once.

One run is one menu: for several restaurants, start one run each.

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

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 user API-key field is required by this input schema.

Free-tier event rates checked 2026-10-08: menu-parsed $0.02.

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.

This matching input/output pair is a marked DEMO preview, observed in run WS8xz5CbeRgpueQ7V (immutable build Iimq0n8JsI7rfTXLd). It demonstrates the output shape and makes no live source or AI-provider call. It does not verify a live parse or synchronization. Keep the preview unchanged; customize it and supply the documented credentials for live work.

Input JSON

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

Matching output excerpt

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

{
"recordType": "DEMO",
"isDemo": true,
"demoSource": "owned-default-prefill",
"demoNote": "Deterministic preview only: no live source, photo scrape, or Gemini call occurred, and the row was not billed. Customize the input for live output; BYOK listings also require their provider credentials.",
"name": "DEMO SAMPLE — Margherita Pizza",
"originalName": "Margherita Pizza",
"category": "Pizza",
"price": "$18.00",
"composition": "Tomato, mozzarella and basil",
"description": "Example structured menu record; not a live extraction.",
"ingredients": [],
"dietaryType": "Vegetarian",
"dietaryTypeExplanation": "Example classification for preview only.",
"allergens": "Milk (preview example)",
"type": "dish",
"isAlcoholic": false,
"story": null,
"nutritionInfo": null,
"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"
]
}

One flat charge per menu. Charged only when parsing succeeds. No API key.

Upload up to 10 photos of a menu (or send URLs/base64 through JSON), get the whole menu back as structured JSON — one record per dish, however many dishes it has. A 12-dish café card and a 60-dish restaurant board cost exactly the same.

Each dish record includes:

  • name (translated to your language) + originalName (as printed)
  • category, price (with currency, as shown)
  • ingredients — atomic base ingredients, each with an English database name, translated display name, and EU-14 allergens with confidence
  • 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.

Why flat pricing

You know the cost before you run: one menu, one price. No per-dish metering, no bill surprises on dense menus. If the parse fails or the photos are unreadable, you are not charged — a non-billed diagnostic row explains what went wrong instead.

Check this Actor’s Pricing tab for the current charges for your Apify plan. The charge is per successfully parsed custom menu. The untouched prefilled sample is a clearly marked DEMO preview, makes no Gemini call and creates no Actor billing events; check Pricing for separately billed platform usage. Empty and failed parses return diagnostic: true with a human-readable message and are not charged.

Parsing a small or medium menu? The per-dish ai-menu-parser-managed (no key) usually costs less than this flat fee; compare both Pricing tabs. The same parser with your own Gemini key is ai-menu-parser.

Input example

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

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.
  • Up to 10 images per run, parsed together as one menu. One run = one menu — for several restaurants, start one run each.
  • Unreadable items are skipped rather than guessed; empty results produce a non-billed diagnostic row explaining why.

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-08. USD; use the Pricing tab for your plan and later changes.

EventFreeBronzeSilverGoldPlatinumDiamond
Menu parsed (menu-parsed)$0.02$0.02$0.02$0.02$0.02$0.02

For example, 1 × menu-parsed totals $0.02 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.

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.