Bulk import with CSV

Load a whole menu at once from a spreadsheet, with a preview before anything is written.

Bulk import lets you load many products at once from a spreadsheet, instead of adding them one by one. You download a template, fill it in, upload it, and review exactly what will happen before anything is saved.

Open the importer

From the sidebar, open Items, then the bulk import page. Start by downloading the template — it has the exact column headers the importer expects, plus a few pre-filled example rows so you can see how everything fits together.

The template columns

The template uses these columns. One row is one product.

  • Product Name — the item's name.
  • Price — the base price.
  • Item VAT — the name of a VAT rate you already have.
  • Favorite Y/N — whether it shows in the till Favourites strip.
  • SKU — your internal stock-keeping code.
  • Abbreviation — the short tile label shown on the till. Maximum 8 characters. Anything longer is rejected before the import runs, with the offending row listed — shorten it in your spreadsheet and upload again.
  • Till Availability Y/N, QR ordering Availability Y/N, Click and Collect Availability Y/N — which channels the product sells on.
  • Description — the customer-facing description.
  • Category Name and Subcategory Name — the section within a menu.
  • Menu Name #1, Menu Name #2 — the menus the product belongs on. Add more numbered menu columns if you need them.
  • Modifier Group Name, then Modifier Option 1 / 2 / 3 with a Price and VAT for each option — to attach a group of choices to the item.

To attach a second modifier group to the same product, repeat the row with a different Modifier Group Name. The importer merges them onto one item.

Drink sizes (pint, half, wine measures)

A pub price list prices the same drink in more than one measure. Four optional columns at the end of the template handle that, and you can delete them if you don't need them.

  • Size Set Name — which size set the drink belongs to, e.g. Draught. Leave it blank for anything sold at one price.
  • Category Name is required for sized drinks. Sizes are set on a category, so the importer puts the set on whichever category the drink lands in. A sized row with no category is imported and priced, but not sized — the importer lists those products by name when it finishes.
  • Size Price: <measure> — one column per measure, with the price for that drink. Add as many as you need.

The measure column headers carry two markers:

  • * marks the standard measure — Size Price: Pint*. Exactly one column must have it. That is what a bare tap on the till rings, and its price becomes the product's normal price. Leave the ordinary Price column blank for sized drinks.
  • Brackets set the stock multiplier — Size Price: Half (0.5) means one half takes half a pint out of stock. Leave the brackets off for 1. The starred column is always 1, so it never needs them.

So a beer list looks like this:

| Product Name | Size Set Name | Size Price: Pint* | Size Price: Half (0.5) | | --- | --- | --- | --- | | Madri | Draught | 4.60 | 2.40 | | Guinness | Draught | 5.20 | |

Two rules worth knowing:

  • A blank or £0.00 cell means "not sold in that measure." A bottle-only prosecco just has a price in the bottle column. It never means free.
  • The starred column must be priced. A drink with no price in the standard measure is rejected with the row listed, because it would ring at £0.

One drink can span several rows. Pub lists often print one line per measure, so you can too — repeat the Product Name with a different measure filled in each time and the importer merges them into a single product:

| Product Name | Size Set Name | Size Price: Pint* | Size Price: Half (0.5) | | --- | --- | --- | --- | | Guinness | Draught | 5.20 | | | Guinness | Draught | | 2.70 |

If you already have a size set with that name, the import joins it rather than creating a second one. It will not change which measure is standard on a set you already use — that would move the price of drinks that weren't in your file.

One category, one size set. Every drink in a category shares its sizes, so a file that puts Draught drinks and Wine drinks in the same category is refused, naming the category and both sets. Give them separate categories. Remember this also sizes anything already in that category — sold at its current price, in the standard measure only.

Drink sizes have to be switched on for your account before a file with these columns will import.

Import your file

  1. 1

    Download the template

    Use the download button. The example rows show how modifiers, subcategories and multi-menu items should look.

  2. 2

    Fill it in

    One row per product. List every menu the item belongs to across the numbered Menu Name columns.

  3. 3

    Upload and review

    Drag your CSV in, or browse for it. The importer draws the menu your file will build, so you can read your own product names and prices back before anything is saved. Nothing is written until you confirm.

  4. 4

    Confirm and import

    Once the preview looks right, confirm. You land on a summary with an Open the menu button that takes you straight to what you just built. Every import is logged, and you can revert a whole import in one click from the import history if something went wrong.

Reading the preview

The preview is the menu, not a list of totals. For each menu your file builds you get:

  • The menu's name, marked NEW MENU when the importer is creating it rather than adding to one you already have, and how many products land on it.
  • Its categories, side by side, each with its own count and a NEW mark when that section is new too. A product filed under a subcategory shows under the subcategory, with its parent named alongside — that is where it will actually sit on the till.
  • The first few products in each category, with the price you typed. If a category has more, the line underneath says how many. A product with no price shows a dash rather than £0.00, so a blank cell is never mistaken for free.

If any rows are going to be skipped, a line above the menu names those products — for example 2 rows will be skipped — "Chips" and "Wings" already exist in your catalogue. Nothing is overwritten. Skipping is normal when you re-upload a file; it is only worth a second look if a name you did not expect appears there.

Underneath, three lines cover what does not sit on a menu: modifier groups, products sold by size, and any VAT rates the importer does not recognise. Each appears only when there is something to say.

Take a moment over this screen. It is the point where a mis-typed Menu or Category column is obvious and cheap to fix — a drink filed in the wrong section reads wrong here immediately, where a count of new categories never would.

What happens to existing items

  • Existing products are skipped. If you already have a product with the same name, that row is counted as skipped — the importer never overwrites it. To change an existing product, edit it under Items → Products.
  • Names match regardless of case. "DRINKS", "Drinks" and "drinks" are treated as the same category. If a category, menu or modifier group name already exists, the importer links to it instead of creating a duplicate.
  • Linking to an existing modifier group keeps its options. The options you list in the CSV under an existing group name are ignored. New groups get every option you list.

VAT rates and errors

VAT rates are not created automatically. If a row names a VAT rate you don't have, the preview flags it. Create the rate first under Items → VAT, then upload again — or import those items without VAT for now.

The preview separates two kinds of problem:

  • Errors must be fixed before importing — for example a missing required field or a price that isn't a number. Each is shown as the row number, the field, and what's wrong.
  • Warnings can still be imported, but the flagged field is left blank. An unknown VAT rate is the common one.

Columns we don't recognise

If your file has a column that isn't one of ours, we tell you which one and carry on without it. That's fine when you've added a note of your own. It matters when the column was meant to be a real one — a file that says Item Name instead of Product Name, or Cost instead of Price, will import with those details missing rather than failing outright.

If you see this warning, check the column name against the template before you import. This happens most often with a file exported from another till system rather than one built from our template.

Heads up

There is a limit of 1,000 rows per import and a file size cap. For a larger menu, split it into more than one file. Get the Menu and Category columns right up front — importing everything into one giant category is hard to untangle later.

Or send the file to the assistant

You don't have to come to this page at all. You can hand your spreadsheet straight to the menu assistant — open it from Items, or from the Ask button in the corner of any page — and do the whole import inside the conversation.

Use the paperclip in the message box and pick your CSV. The assistant shows you the same thing this page does: the menu your file will build, what will be created, what will be skipped, and anything that needs fixing. Press Import and it's done, with an Undo this import button right there if it wasn't what you expected.

It's the same importer and the same rules either way, so use whichever suits you. Two differences worth knowing:

  • The assistant takes files up to 1.5MB. This page takes larger ones, so a big catalogue is better brought in here.
  • The assistant is told what's in your file — how many products, which sections, what's wrong with it — but never the contents of your rows. It can talk you through the file without reading your prices back to you.

What's next