Moving your wholesale off spreadsheets

You have twenty-five accounts, a spreadsheet, a WhatsApp thread and an inbox, and you have decided to change. The risk is not the software. It is the fortnight in the middle: losing history, confusing cafés, doing everything twice. This is the sequence that keeps that fortnight boring.

Published 16 September 2026

On this page11
  1. When to move, and when not to
  2. What you have, and where it lives
  3. Getting the data out
  4. Cleaning the data before it moves
  5. A two-week plan that does not risk the week
  6. What to tell cafés, and when
  7. If you have six months of history, or none
  8. What usually goes wrong
  9. What "done" looks like
  10. Questions roasters ask
  11. Where Order Book fits

Short answer. Set the new system up in parallel while the spreadsheet stays the truth. Export your past orders, clean the client list and the prices rather than the history, then start with five friendly accounts for one ordering cycle and move the rest in two waves. Tell cafés a week before their invitation arrives, and tell them nothing changes except how they send the order. Budget two weeks, and name one person who owns the switch.

Order Book is one of the tools you might be moving to, so read the product paragraph at the end with that in mind. Everything before it applies whichever tool you choose, including a different one.

When to move, and when not to

Do not move because the spreadsheet is embarrassing. Move because it has started costing you orders, money or evenings. Under about ten accounts with one roast day a week, a spreadsheet and a phone are genuinely hard to beat, and the two weeks this takes would buy you a lot of sample drops. The comparison of roastery software says the same thing at more length, and says which tool is for which job.

The signs that the spreadsheet has stopped working are specific, and none of them is about the spreadsheet:

  • You cannot say from memory which accounts are ordering less than they were six months ago.
  • An order has been missed, or roasted wrong, in the last month.
  • More than one person needs to see the orders, and they ask each other instead of looking.
  • The roast plan is rebuilt by hand every week from messages in three apps.
  • You have stopped being certain what each café is meant to be paying.

Two of those on a bad week is normal. Four of them every week is the spreadsheet telling you it is done. For most roasteries that arrives somewhere between fifteen and thirty accounts.

There are also weeks not to move in. Not the week of a price increase. Not the week before a holiday closure. Not during your busiest month, and not while the person who knows all the prices is away. Pick a quiet week and protect it.

What you have, and where it lives

The first surprise of any migration is how little of the business is actually in the spreadsheet. Before you export anything, make this list honestly. The right-hand column is where roasteries lose a fortnight.

WhatWhere it livesWhat you need out of itWhat catches people
The client listA spreadsheet tab, your phone's contacts, and your invoicing softwareLegal name, trading name, delivery address, the person who orders, phone, email, languageThe invoicing software has the entity that pays; your phone has the person who orders. You need both, and they are rarely the same row.
Prices per clientYour head, old emails, a PDF price list from last yearOne price per product per client, and the date it was agreedPrices recorded as discounts ("Aurora −10%") break the moment a list price changes.
Products and bag sizesShopify, the price list, the labelsName, size in grams, wholesale or retail, and what is no longer sold"House Espresso 1kg" is a name with a size buried in it. Split them now or every report will be wrong.
Order historyShopify, the spreadsheet, or the invoicesDate, client, product, quantity, unit price — one row per lineInvoices are the fallback source, but an invoice dated the 30th does not tell you which day the café ordered.
Delivery days and routesThe driver, and a map in someone's phoneDay, the order stops come in, access and parking notesThe route exists as a habit, not a document. Write it down while the driver is in the room.
Payment terms and balancesAccounting or invoicing softwareTerms per client, and the open balance on the day you switchTake the balances on a fixed date and write that date down, or the two systems will never agree again.
Loaned equipmentUsually nowhereMachine, serial number, which café, date out, what was agreed in returnThis is the list that is always incomplete. Walk the accounts you are unsure about. See the loan agreement guide.
The things only someone knowsOne person's memory"Call before 10." "Delivery at the back door." "The owner decides on Mondays." "Never send the Ethiopia."Ask each person who touches an order to spend twenty minutes writing theirs down. It is the highest-value hour of the whole move.

The last row is the one that decides whether the switch feels good or bad to a café. A system that knows Aurora's prices but not that Aurora's owner answers the phone only before ten is a downgrade from your memory. Ask everyone who touches an order to write their notes down in one sitting, per account, before the move rather than during it. If you lend out grinders or machines, the equipment loan guide has the fields that belong against each one.

Getting the data out

You need five columns and no more: date, client, product, quantity, unit price. Anything else is a bonus. Where they come from depends on where your orders have been landing.

From Shopify

In the admin, filter the order list down to your wholesale orders — by the tag you use, or by the B2B company — and export. Shopify emails the CSV rather than downloading it when you export more than 51 orders or export by date, so start it and go and roast. Two things about that file trip people up. Orders with more than one line item continue on the following rows with the order-level columns left blank, so fill those down before you sort or filter anything, or you will lose the café name from every line but the first. And the tag lives in a Tags column, which is what you filter on if you exported everything rather than a filtered view.

If you are staying on Shopify for retail, you may not need to build the file by hand: export your orders from Shopify and rename two columns to match the template, or connect the store directly if it already has a custom app. What stays in Shopify and what moves out covers that split.

From a spreadsheet

One row per order line, with those five columns as real columns. Most roastery spreadsheets are shaped for reading, not for exporting: a week per tab, or clients across the top and products down the side. Flattening that is an hour of work and it is best done by hand for a year of history, because scripts get the merged cells wrong in ways you do not notice until the numbers are in the new system.

From invoicing software

Almost every invoicing package exports invoice lines as a CSV. This is the fallback when the orders themselves were never written down anywhere. It costs you one thing worth knowing: an invoice tells you what was delivered and when it was billed, not the day the café asked. If your invoices are monthly, you get twelve rows a year for a café that orders weekly, which is enough for revenue and not enough for rhythm. In that case export the delivery notes instead if you have them.

Why the history is worth the trouble

Most roasters treat past orders as archive material and would happily start from zero. Two things break if you do. The first roast plan has nothing to suggest, so the first few weeks are typed from scratch. And nothing can tell you an account has gone quiet, because quiet is measured against that café's own rhythm — 19 days is alarming for a weekly account and normal for a monthly one, and a system with no history cannot tell the difference. A year of orders makes both work on day one. Three months makes them work roughly. Nothing makes them work in about two months' time.

Cleaning the data before it moves

Clean the client list and the prices properly. Clean the history only enough that every row points at a client and a product that exist. The temptation is the other way round, and it is how a two-week move becomes a two-month one.

The café spelled three ways
"Café Aurora", "Cafe Aurora Lda" and "Aurora" are one account with a third of its history each. Sort the client column alphabetically and read it once, top to bottom: the duplicates sit next to each other. Decide the one name you will use — usually the trading name the barista would say on the phone — and map the others to it before you import.
Bag sizes hidden in names
"House Espresso 1kg" and "House Espresso 250g" are one coffee in two sizes, not two products. Split the size into its own field now. If you leave it, every quantity report is really a report about your naming.
Prices that are actually discounts
"Minus 10%" and "same as Aurora" are instructions, not prices. Turn each one into a number, per product, per client, and check it against that client's last invoice. If the two disagree, the invoice is usually right and the note is usually two price lists old.
Dead accounts
An account that has not ordered in six months is not a client, it is a lead. Move them to their own sheet and leave them out of the import. You can bring one back in thirty seconds when it orders again, and in the meantime your call list and your client count stay honest.
Prices nobody has reviewed in two years
Migrations surface these, because for the first time every price is in one column and comparable. Do not fix them during the move — you will be changing two things at once and no café will know which. Write the list, finish the move, then work through it with the price per kilo calculator and a proper notice period.
Products you no longer sell
Keep them in the history and out of the catalog. A café should not be able to order last winter's Ethiopia, and you should still be able to see that it bought 40 kg of it.

Set a deadline on the cleaning before you start it, because there is no natural end. Two days is enough for 40 accounts. Anything still unclear on the third day goes into the new system as it is, with a note, and gets fixed the next time that café orders.

A two-week plan that does not risk the week

The principle behind every row: the spreadsheet stays authoritative until a named date, and until then the new system is something you are filling in beside it, not something orders depend on. Nobody's Wednesday delivery is riding on the migration.

DayWhat you doCafés on the new system
Week 1, MondayExport everything. Past orders out of Shopify or the spreadsheet, the client list out of the invoicing software, the product list. Do not clean anything yet — just get it into one folder with today's date on it.Nobody
Week 1, TuesdayClean the client list and the product list. Merge the duplicates, split sizes out of product names, move dead accounts to a separate sheet.Nobody
Week 1, WednesdayPrices. Build one catalog per kind of client, then the per-client exceptions. Check every exception against that client's last invoice.Nobody
Week 1, ThursdayImport the history. Then check: pick five accounts and compare last month's total in the new system against last month's invoices. If they match, the import is good.Nobody
Week 1, FridayPick five friendly accounts — the ones who would tell you if something looked wrong. Invite them to their accounts, with the message below. Tell your own team the date the spreadsheet stops being the truth.5 accounts
Week 2, MondayThe first cycle. Those five order in the new system. You still write their orders on the spreadsheet as well, by hand. This is the only week you do that.5 accounts
Week 2, TuesdayAt the cutoff, build the roast plan in both places and compare them line by line. Any difference is a price, a bag size or a missing product, and it is cheap to fix today.5 accounts
Week 2, WednesdayDeliver. Check the delivery notes and the invoice totals for those five against what you would have sent from the spreadsheet.5 accounts
Week 2, ThursdayFix what the cycle found, and call the five. "Did anything about that order annoy you?" is a better question than "how was it?"5 accounts
Week 2, FridaySend wave two: half of what is left, biggest accounts included. The spreadsheet stops being written to for everyone already moved.About half

Then two more dates, a week apart. Day 15: wave two has run one cycle, so send the rest — including the accounts you are nervous about, which by now are the only ones left. Day 22: the spreadsheet is renamed with the date and the word "old", made read-only, and nobody writes in it again. That last step is not ceremony. A spreadsheet that is still editable is a spreadsheet someone will edit on a bad Tuesday, and then you have two sets of orders and no way to tell which is right.

One person owns the switch, start to finish, and it is someone who will be there for all three weeks. Not a committee, and not "whoever has time". They decide the client names, they decide when a wave goes, and they are the person a café's confused email reaches.

What to tell cafés, and when

A café cares about one thing: whether this makes its Monday harder. The answer is no, and the message should be short enough that it is obviously not a big deal. Send it the working day before the invitation goes out, not weeks ahead — advance warning of a small change makes it sound like a large one.

One message per café, on the channel that café already uses. The accounts who order by WhatsApp get it on WhatsApp.

Hi [name],

Small change from [Monday 5 October]: you'll get an email from us to sign in to your own ordering page. It uses this same email address.

Your usual order is at the top, at your prices, so most weeks it takes a minute. No password, nothing to install.

Nothing else changes — same coffee, same prices, same delivery days, same cutoff ([Monday 17:00] for [Wednesday]), same invoice from us as always.

And if you'd rather just text me like always, text me like always. That works exactly as it does today.

[Your name], [Roastery]

Mean the last line. An ultimatum costs you your oldest accounts and buys you nothing, because what matters is that every order ends up in one place, not that every café typed it in itself. The cafés who order by text can keep doing exactly that; you paste the message and it becomes an order in seconds. In practice most roasteries end up with a large majority ordering in their accounts and a stubborn remainder who never will, and the remainder are often the steadiest accounts on the book.

Your biggest three or four accounts get a phone call instead of a message, the day before. Two minutes: there is an invitation coming, nothing changes, here is my number if it annoys you. It is the same courtesy as calling before a price increase letter, for the same reason.

If you have six months of history, or none

Import whatever you have and start anyway. What you lose is time, not capability, and the gap closes by itself.

  • A year or more. Everything works on day one: the green coffee plan in Insights starts from real quantities, and each café's rhythm is known well enough that a late order is visible in the first fortnight.
  • Six months. Rhythms are right for weekly and fortnightly accounts, rough for monthly ones, and seasonality is invisible — the system does not know your summer yet. Fine. You do.
  • Nothing at all. The ordering, the prices, the cutoff, the roast plan and the delivery notes all work from the first order. What waits is the pattern-spotting, which needs a few orders per account before "later than usual" means anything: roughly two months for weekly accounts, longer for the rest.

Do not delay the move to build history you could have been collecting all along. Every week you spend reconstructing last year in a spreadsheet is a week of this year's orders not being recorded properly.

What usually goes wrong

  • Moving everything on the busiest week. The migration is never what fails; the ordinary work is, because the person holding it is doing two jobs. Move in a quiet week even if quiet means January.
  • Telling nobody. The first a café hears of it is a sign-in email from an unfamiliar address on a Monday morning, which looks exactly like the phishing email its bank warned it about. One short message the day before prevents every one of those phone calls.
  • Two sources of truth for a month. Parallel running is a checking technique, not a way of life. One cycle, five accounts, then the old file goes read-only on a date you have already told your team.
  • Cleaning forever instead of starting. There is always another column that could be tidier. Set the deadline before you open the file, and let the rest be fixed by use.
  • Forgetting the regulars. The four cafés who get the same thing every week without asking are the ones nobody remembers to migrate, because their orders were never messages in the first place. They live in a habit. Write them down first, and agree with each one how its order reaches you from now on: an order you prepare and it confirms, or the text it already sends.
  • No one owning it. A migration shared between three people is a migration where the client list has three spellings again by Friday. One name against it.

What "done" looks like

A one-page check. You are finished when every line is true, and not before, whatever the software says.

  • Every live account exists once, under one name, with the address and the person who orders.
  • Every account has a price for every product it buys, and each one matches its last invoice.
  • Products carry a size in grams, and the coffees you no longer sell are out of the catalog and still in the history.
  • Past orders are in, and last month's total for five sampled accounts matches last month's invoices.
  • Delivery days, cutoff and payment terms are recorded per account, not remembered.
  • Every café that used to get the same thing without asking knows how its order reaches you now.
  • Loaned equipment is recorded against the café that has it, with the serial number.
  • The notes that were in someone's head are on the account.
  • Every café has been told, and the ones who prefer to text know that still works.
  • Your team knows the date the spreadsheet stopped counting, and the file is read-only.
  • You have run one full cycle — order, cutoff, roast plan, delivery, invoice — without opening the old file once.

A useful last test, and a slightly unfair one: ask the newest person on your team to take next Tuesday's orders on their own. If they can, the knowledge is in the system. If they have to ask you three questions, those three answers are the migration you have not finished. New accounts joining after this point should follow the onboarding sequence instead, so you never build up a second pile of things only you know.

Questions roasters ask

How long does it take to move wholesale ordering off a spreadsheet?
Two weeks of part-time work for a roastery with 15 to 40 accounts, most of it spent on the client list and the prices rather than on the software. Reckon on a day to export and clean, a day to build the catalogs and check them against last month's invoices, then one ordering cycle with five friendly accounts before the rest follow in two waves.
Do I need my past orders to switch?
No, but they are worth more than most roasters expect. Order history is what lets a new system build your first roast plan from real quantities and notice an account that has slowed down, because slowing down is measured against that café's own rhythm. Without history the system still takes orders from day one; the pattern-spotting starts working after a couple of months of ordering.
Will my cafés have to learn something new?
Only the ones who want to. The change for a café is the way it sends the order, and nothing else: same coffee, same prices, same delivery days, same cutoff, same invoice from the same place. Accounts that have texted you for nine years can carry on texting, and you enter those orders yourself.
Should I run the spreadsheet and the new system side by side?
For one ordering cycle, with a small group of accounts, and no longer. Parallel running catches wrong prices and missing bag sizes before they reach an invoice. Leave it running for a month and you get two half-true sources, an order that exists in one and not the other, and a team that has stopped trusting either.
What do I do about the prices that only exist in my head?
Write them down before you import anything, one price per product per client, and check each one against that client's last invoice. This is the part of the move that actually takes the time, and it is also the part worth doing whatever tool you end up choosing, because a price nobody can look up is a price that drifts.
When is a spreadsheet still the right answer?
Under about ten accounts with one roast day a week, a spreadsheet and a phone are hard to beat and the setup time would be better spent on sample drops. The move starts paying somewhere between fifteen and thirty accounts, or earlier if more than one person needs to see the orders.

Where Order Book fits

The import runs once, manually, and in one direction: upload a CSV of past orders using the template in the app, which brings in your clients and their history, and add your products; or, if your Shopify store already has a custom app from before 2026, connect it and it reads your products and your wholesale-tagged orders. Nothing is written back to your store, and nothing syncs afterwards. Prices are set as a catalog per kind of client — cafés, restaurants, offices, resellers — with exceptions on the accounts that have them, which is the shape most roastery price lists already have once you write them down.

The accounts who will not order in their account do not have to. Their message is pasted in and matched against that café's own catalog and prices, so it becomes a dated, priced order in seconds and the café never sees a difference. Drift detection is the part that needs your history: it measures each account against its own rhythm, so the more orders you bring, the sooner it earns its place.

What it will not do, so you can plan around it: no payment collection, no invoices, no chasing, and no accounting sync. You keep issuing invoices in your own software and attach the PDF to the order.

Start free for 30 days, no card, or see what it costs.

Invite your first cafés today.

They order from their own accounts, at the prices you set, and you keep every relationship in view.

30 days free. No card. After that, from €49 per month.