How do I import my menu instead of typing it in?

Read your existing menu into ResoFlow from photos, a PDF, your menu web page or a spreadsheet — check every dish on a guided checklist, and carry on later whenever you leave.

Typing two hundred dishes in by hand is the slowest job in setting up ResoFlow, so you don't have to. On the Menu page, the Import menu button reads your existing menu — however it exists today — and opens an import of its own, where you check everything over before anything is added.

Menu management needs the Pro plan or above, or the Order & Pay or Your website product; without one of those, the page shows "Menu management is available on Pro and Complete" alongside the product route. Importing uses the same permission as adding a dish by hand, so by default Managers and above can do it and Hosts can't. The button sits on the Menu tab of the Menu page, next to Add category and Add a dish.

Nothing is added until you press Confirm — and leaving loses nothing

This is the important bit, in two halves.

First: whichever way you bring your menu in, ResoFlow never creates anything straight away. You always review every dish it read, and nothing touches your real menu until you press the green confirm button — which always names exactly what it's about to do, like Confirm and add 48 dishes. On the way there you can change any dish's name, description and price, move a dish into a different section, rename a section, and remove any dish or section you don't want. You can also add a dish (Add a dish at the foot of each section), add a whole section (Add a section at the foot of the table), and undo a removal straight away with the Undo button that appears after one — so a mis-tap on a long list never costs you a dish.

Second: leaving the import doesn't lose your work. Close it — deliberately or because the phone rang — and everything is kept as a draft: the menu that was read and every correction you've made to it. The next time you open Import menu you're offered the draft first, so you pick up exactly where you left off. Drafts are kept for 7 days; ignore the offer and start fresh whenever you'd rather. Your real menu is untouched either way, because only Confirm changes it.

The photo or PDF you upload is deleted as soon as it has been read — we don't keep your file, and it is never used to train anything.

What it costs

Reading a menu uses AI credits: 2 credits per file — so a six-page photographed menu is 12 credits, one PDF is 2, and a web page is 2. The spreadsheet lane is free (no AI reads it). Pro includes 30 AI credits a month and Complete 100; on Free and Plus you buy a one-off pack from Account → Top-ups and credits (50 credits for £5, 150 for £12, 400 for £25 — packs never expire). The credits are taken when you press Read the menu; if the read fails, they go straight back. See How do I buy credits or add-ons?.

The four ways in

Pick whichever matches what you've got:

For the first three you press Read the menu and see a Reading the menu… screen. It usually takes a few seconds; a long, photographed menu can take up to five minutes, and you can leave the window open while it works. If you close it (or the tab) while it's still reading, nothing is wasted — the reading carries on in the background, and the next time you open Import menu you'll be offered the finished result: "We finished reading the menu you started at 2:14pm — pick up where you left off?".

Photos are shrunk in your browser before they're sent. If a big batch still comes to more than the 24 MB we can read in one go, you're told before anything uploads — the first pages that fit are kept, and you import the rest afterwards.

The checklist home

Once your menu has been read, the import shows you the whole job as a checklist — one card per area, each with a one-line summary and either a tick (nothing to do) or an honest count of what's waiting:

You don't have to work out where to start: the checklist points you at whichever area needs you next, and works through them with you. And if the confirm button is off, the reason is written next to it in plain words — "Confirm is off until 1 fix is done", with what the fix is — never a greyed-out button with no explanation.

Checking the dishes

The dishes table counts what it found — "48 dishes across 6 sections" — and flags anything worth a second look:

Two situations get their own question on the review. If you're updating dishes that use reusable choices (shared choice steps), those are always kept exactly as they are — and if the import read its own choices for such a dish (sizes, say), the screen offers them as an extra step with a tick-box per dish; nothing is added unless you tick it. And if a section you're importing is covered by a live deal that includes a whole category, an amber notice names the deal and what it means for the money, with a per-dish choice to keep any new dish out of that deal.

On a long menu you don't have to scroll hunting for the problem rows: the "N to fix" and "N to check" counts are buttons — press one to show only those rows — there's a search box, sections collapse, and the confirm button stays put while you scroll.

Editing a dish clears the flag you've answered. Everything is yours to overrule: this is a first draft of your menu, not a decision.

Dishes printed with two prices

A dish printed with two prices — small/large, glass/bottle, 8"/12" — comes through as one dish with a real size choice, not two dishes and not a guess: the lower printed price becomes the dish's price, and the difference becomes the option's extra cost, exactly as printed. The row is flagged so you check it before confirming.

Sometimes the printed sizes are the very reason a single price couldn't be read — the line only makes sense as a size choice. Where the sizes could be read cleanly, that choice is applied for you rather than the dish arriving broken, the row says so, and the checklist lists every applied split with an Undo: undo one and the dish goes back to having no price, with the row telling you to add each price as a choice (or set the right single price) by hand. And where we couldn't read every printed price cleanly, no split is applied at all — the dish arrives without a price and the row says so, because importing it with only the readable price would sell the wrong thing.

Choices, allergens and dietary marks — editable on the spot

Every row has an Allergens, dietary & choices link that opens the same tick-box checklists as the dish editor, plus a small choice-step editor. So when the import flags "we didn't recognise … as a standard allergen", you can put it right there and then, rather than remembering to come back to that dish later. You can also build a choice step ("Choose your size", "Pick a sauce") on any dish before it's created; extra costs sit on top of the dish's base price.

Where "vegan" or "vegetarian" appears in a dish's own name or description — "Vegan Sausage Roll" — the matching badge is ticked for you, because that's your menu marking the dish. Nothing is ever guessed from ingredients, and every tick is yours to change at review.

"Contains alcohol" — suggested for drinks, decided by you

The same expander carries the dish editor's Contains alcohol tick, which marks a dish for 18+ age checks when customers order and pay from their phones (Order & Pay). Where a dish, its description or its whole section reads as an alcoholic drink — a "Wines" page, "House lager", "Aperol spritz" — the box arrives pre-ticked, with an amber note on the row so you know it happened: "This looks like an alcoholic drink, so we've ticked 'Contains alcohol' — please untick it if that's wrong". A ticked dish also shows a Contains alcohol chip on its row, so nothing is ticked out of sight.

This one is a suggestion rather than a transcription — a drinks word is strong evidence, not proof — so it's deliberately cautious ("beer-battered haddock", "red wine jus", "ginger beer" and "alcohol-free lager" are never ticked) and always yours to overrule. For a whole drinks page, each section header has a Mark all as contains alcohol button (it becomes Unmark all once every dish in the section is ticked) — mark the section in one go, then untick the odd soft drink dish by dish.

Joins, build-your-own dishes and working in bulk

When several lines might be one dish

Sometimes a menu prints one dish as several lines — "Panini £6.50" followed by its fillings. The reader may spot that and offer it in a panel headed These lines might be one dish with a choice — but it never joins them itself. The dishes are imported exactly as printed, and you press Join them only if that's how the menu really works (or Keep them separate to dismiss the offer). Joining keeps every price honest: the printed price becomes the base, and fillings the menu didn't price separately join at no extra cost.

Build-your-own dishes

Menus that print things like "Create your own burger — choose your patty, add toppings +£1 each" — or a dish served with a printed choice ("choice of sauce: BBQ, Buffalo or Korean") — can come with their own offer: a panel headed This reads as a dish customers build in steps, listing each step (its question, how many guests pick, and every option with its printed extra cost). Same rule as the joins — nothing happens by itself. Press Add the choice steps to give the dish those steps (they land in the row's own choice-step editor, where you can change any question, price or how-many-they-pick), or Leave it as printed to dismiss the offer. Every extra cost is the "+£1"-style supplement exactly as the menu printed it, sitting on the dish's own price; the row is flagged so you check each option's price before confirming. Spotting these is best-effort — a build-your-own dish the reader misses simply imports as printed, and its steps are a minute's work in the row's choice-step editor. And if any of a dish's printed option prices couldn't be read cleanly, no offer is made at all — the row says so, and you build the steps by hand rather than trusting half a reading.

Set menus and deals. A menu that prints a bundle — "Two courses £22", "Any pizza + any drink £15" — can come with its own offer: a panel headed This menu looks like it includes a set menu or deal, showing the printed price and each course with the dishes we read for it. Nothing happens by itself: press Add this when I confirm and the set menu is created alongside your dishes — it appears under Set menus & deals, live, where you can edit or pause it any time — or No thanks to dismiss the offer. A menu that prints the same offer at several sizes — "3 plates £14.99 · 5 for £19.99 · 7 for £25", or 1/2/3-course prices — arrives as one deal with its full price ladder shown, not several separate deals; accept it and the deal is created priced by how many they pick, with each printed price as a tier. A ladder that doesn't add up — a bigger number costing the same or less — is never drafted; an amber note tells you what was printed so you can build it by hand if the menu really means it. Set menus & deals are part of Order & Pay, so on plans without it the panel simply tells you what your menu prints, ready to build if your plan ever includes it. If we couldn't read a bundle cleanly, an amber note says so instead — the fact is never lost silently.

Working in bulk

Every row has a checkbox, and each section header has a select-all. With rows selected, a small bar appears with Move to section… and Remove — so re-filing eight dishes, or clearing the rows that came from the drinks page, is one action rather than eight. Each section header also carries a VAT dropdown (blank unless you use it): pick a rate once and every dish in that section gets it, which beats setting VAT dish by dish afterwards. It only applies where you choose one — leaving it blank changes nothing.

When you press the confirm button, the dishes are created in batches, and on a big menu the button counts along — "Adding 80 of 120…" — so you can see it's working. You then land back on your menu with a summary of exactly what happened, like "36 dishes added, 12 updated". If anything couldn't be added, that message says so and why, rather than claiming everything went in.

Adding to a menu you already have

When your menu already has dishes on it, the import asks up front how to treat them — the question is the checklist's first card, so you decide before you're deep in the rows. Three choices:

Whichever you choose, the matching rows are visible: an Already on your menu chip marks each dish that matched, Show which dishes lists them, and a filter shows just those rows.

The same dish twice in one import

If the import itself lists the same dish name more than once — a page photographed twice, or a dish that genuinely appears in two sections — a panel says so and asks, dish by dish: Merge into one (keeps the first copy, and carries any allergen or dietary ticks off the removed ones) or Keep both. It's a question rather than an automatic merge, because a dish in two sections is often deliberate. Where the copies printed different prices, merging flags the kept row so you check which price the menu really means.

What an import doesn't do

So there are no surprises, an import creates dishes, sections, prices, any choice steps you've confirmed, any set menu or deal you've accepted, and any Contains alcohol ticks you've left in place — and that's it:

Everything else behaves exactly as if you'd typed the dish in yourself: imported dishes arrive available, a choice with extra costs shows as a "From" price automatically, dishes pick up your category or venue default VAT rate unless you chose a section VAT at review, and they appear one by one in your activity log.

How much fits in one import

One import can bring in up to 500 dishes, across up to 40 sections, with up to 150 dishes in any one section. If your menu is bigger than that, you're told what was left out — "Only the first 500 dishes were imported — please add any others by hand" — and you can import the rest afterwards. (Separately, one venue's menu can hold up to 2,000 dishes in total, which no real menu comes near.)

If it doesn't work

See menu import problems for what each message means and what to try instead.

Related: How do I build my menu and share it with customers? · How do I add my logo, colours and images?