Docyield's menu parser turns a restaurant menu — a scan, a photo, a screenshot, or a PDF — into a structured catalogue of sections, dishes, and prices. A menu is organised content: a venue name, the currency it prices in, named sections like Starters, Mains, and Drinks, and within each section a list of dishes with their descriptions and prices. The parser reproduces that structure as data and exports it as JSON, CSV, or Excel, so a menu becomes something you can load into a delivery platform, a point-of-sale system, or a spreadsheet instead of retyping every line.
Menus are designed to be read by diners, not machines, which is what makes them awkward to digitise. Prices float to the right of a dotted line or tuck under a dish name; descriptions wrap across lines; sections are marked by typography rather than any label a parser could rely on. A photo of a printed menu adds glare and curl; a stylised PDF adds decorative fonts. Docyield reads the menu the way a guest does — it recognises where one section ends and the next begins, and which price belongs to which dish — so the structure survives the conversion.
What a menu parser produces
The output mirrors how a menu is actually built. At the top sit the venue name and the currency the prices are quoted in. Beneath that is a list of sections, each with its own name, and within each section a list of dishes. Every dish carries its name, its description where the menu provides one, and its price. The result is a clean hierarchy: venue, then sections, then dishes, with nothing flattened into a single undifferentiated list.
That nested shape is the point. A menu is not a flat table — a dish only makes sense inside its section, and "Margherita" under Pizzas is a different listing from "Margherita" as a cocktail. Preserving the section a dish belongs to keeps the catalogue meaningful when it is loaded into another system.
Why structured extraction beats raw OCR and manual typing
Anyone who has loaded a restaurant onto a delivery app knows the tedious part is not reading the menu — it is retyping every dish, description, and price into the platform's forms without losing track of which section each belongs to. Done by hand across a full menu, it is slow and a price or a section boundary is easily mistyped.
Plain OCR does not solve it, because it returns the menu as a stream of text in roughly reading order, with prices and dish names interleaved and no sense of section structure. Structured extraction rebuilds the hierarchy: each dish is paired with its own price and placed under the right section, so the catalogue is ready to import rather than a block of text to untangle.
Who uses a menu parser
- Restaurants and cafes digitising a printed menu to onboard onto delivery and ordering platforms.
- Delivery and food-ordering apps importing a venue's menu without manual data entry.
- Point-of-sale and ordering-system vendors loading menus for new merchants.
- Menu-management and digital-menu services converting PDFs and photos into structured catalogues.
- Market researchers and analysts building datasets of dishes and prices across venues.
- Developers adding menu import to a food-tech product through the API.
Sections, dishes, and prices
The structure is doubly nested, and it is worth describing how it comes back. The top level is a list of sections, and each section has a name and its own list of dishes. Each dish, in turn, is a record holding its name, its description, and its price. So the data nests two levels deep: sections contain dishes, and dishes contain their own details. Exported to CSV or Excel, this flattens into rows you can read as a section-by-section listing.
Prices are returned as numbers, with the currency captured once at the top as a separate field rather than repeated as a symbol on every line. That keeps the prices usable in calculations and avoids the ambiguity of a bare number — a dish priced "12" means something different in dollars than in another currency, so the currency field carries that context for the whole menu. Dish descriptions are preserved as the menu writes them, because the wording often matters to a delivery listing — it tells a diner what is in the dish — so the parser carries the description through rather than trimming it to a name and a price.
Accuracy, stylised menus, and review
No parser reads every menu perfectly, and menus are deliberately decorative in ways that challenge OCR. Accuracy is highest on clean, flat scans and digital PDFs; a glossy photo with glare, a curled paper menu, or a heavily stylised display font is where a dish name or a price can be misread, and a straighter, sharper image consistently helps.
Where a menu omits something — a dish with no description, or an item whose price is "market price" rather than a figure — that field comes back empty rather than invented, since a fabricated price is worse than a blank one. The parser keeps the source menu beside the extracted catalogue so spot-checking prices is quick, which matters most when the data feeds an ordering system where a wrong price reaches customers.
Output formats, API, and batch
Each parse exports as JSON, CSV, Excel, or XML from the same result. JSON preserves the section-and-dish hierarchy intact, which suits importing into a delivery or POS platform; CSV and Excel flatten it into a readable listing for review or analysis; XML fits an older ordering-system import. The free tool handles one menu at a time.
When a platform onboards many venues at once, the Docyield API and batch dashboard run the same extraction at scale, return results by webhook, and let you apply your own checks — for example flagging any dish with no price. The field names are identical between the free tool and the API.
What the menu parser extracts
Each menu is returned against a fixed schema. Details a menu does not print come back empty rather than guessed. The structure is doubly nested: sections contain dishes.
- Restaurant name
- The restaurant or venue name.
- Currency
- The ISO currency code or symbol the prices are quoted in, captured once for the whole menu.
- Sections
- A nested list of menu sections such as Starters, Mains, or Drinks. Each section has a name and its own list of dishes.
- Dishes (within each section)
- Each dish is a record holding its name, its description where the menu gives one, and its price as a number.
How to convert a menu to JSON, CSV, or Excel
- 1Upload your menu — drop a scan, photo, screenshot, or PDF onto the box above, or choose a file.
- 2Wait a few seconds while Docyield reads the menu and rebuilds its sections and dishes.
- 3Review the structured result, checking the prices and section boundaries against the original.
- 4Pick your output tab — JSON to keep the hierarchy, or CSV and Excel for a flat listing.
- 5Copy the result or download the file, ready to import into your delivery, POS, or ordering system.
Frequently asked questions
Processing documents at scale?
Batch upload, an extraction API, and webhooks for 100+ documents a month.
