---
title: Wholesale coffee orders spreadsheet for a small roaster
Metadescription: One row per cafe, coffee, grind and bag size - how a small roaster lays out a wholesale order sheet so a roast-day total falls out of it.
author: Dan Edwards
author_role: Founder
author_url: https://danedwardsdeveloper.com
author_linkedin: https://www.linkedin.com/in/dan-edwards-developer
published: 2026-08-26
updated: 2026-09-27
---

Token estimate: ~2,300

# Wholesale coffee orders spreadsheet for a small roaster

A wholesale coffee order sheet holds up when one row is one cafe ordering one coffee at one grind in one bag size, with that account's weekly bag count in the row. Pounds per coffee for a roast day then come out of a sum over those rows instead of being read back off a message thread. [How to organise wholesale orders in a spreadsheet](https://wholesalehandler.com/articles/how-to-organise-wholesale-orders-in-a-spreadsheet) covers the layout common to any producer. Coffee adds grind, bag size and a roast day sitting a few days ahead of the delivery day.

By **[Dan Edwards](https://wholesalehandler.com/about)**, Founder.

## One row per cafe, coffee, grind and bag size

A cafe usually takes an espresso blend, a filter coffee and a decaf, often in more than one format, so a dozen accounts is thirty to fifty order lines rather than twelve. One row per cafe cannot hold that, and one column per cafe stops working the first time an account adds a coffee.

| Column | What it carries |
| --- | --- |
| Cafe | The account, matching the invoice name |
| Coffee | The blend or single origin, by the name on the bag |
| Grind | Whole bean, espresso, filter, or the cafe's own setting |
| Bag size | 12 oz, 2 lb, 5 lb, 1 kg - whichever formats you pack |
| Bags per week | The standing count for this line |
| Roast day | The day this line gets roasted |
| Delivery day | The day it reaches the cafe |
| Price per bag | This account's rate for this line |

Twelve-ounce bags are the US specialty retail standard, so a cafe with a retail shelf takes them alongside the 2 lb or 5 lb bags its baristas open. Those are two different lines for the same coffee, and they carry different prices per pound.

## Grind belongs in its own column with a fixed set of values

A free-text note reading "grind for batch brew, whole bean for the shelf" cannot be summed, filtered or sorted. Once grind is a column holding one of a short list of values, the sheet answers "which bags go through the grinder on Tuesday" with a filter rather than a read-through.

## Espresso needs more rest than filter, so roast day is a per-coffee decision

Most of the CO2 in roasted coffee escapes in the first 24 to 48 hours, and pressurised brewing drives more of it out of the bed than filter does. Every source that splits the two puts espresso's rest longer: filter is commonly cited at two to ten days off roast, espresso at five to fourteen. No standards body publishes a figure, and roast level moves it - darker roasts degas faster than lighter ones.

That is what the two date columns are for. A sheet holding only the delivery day carries no record of whether Friday's espresso was roasted early enough to be drinkable on arrival. Specialty roasters commonly ship within 24 to 48 hours of roasting, so on a shipped account the roast day is also what starts the rest clock running in transit.

## Totalling a roast day out of the order lines

Bag size has to be a number in its own column for this to work. With that in place the roast-day total is a pivot over the order lines: roast day and coffee down the side, the sum of bags times bag weight in the body. Nothing is retyped, and adding an account adds rows rather than changing a formula. A cell reading "3 x 5lb" turns every total back into hand arithmetic.

Two things keep the pivot honest:

1.  **Roast day is derived from delivery day, not typed.** A lookup from the delivery day plus that account's lead time keeps the two in step when a public holiday moves a run.
2.  **The week is a column, not a tab.** A tab per week means last week's structure is frozen in place and the pivot only ever sees one week. A `week starting` column keeps one sheet that can be filtered to this week and still totalled across a quarter.

RoasterTools' published guidance on wholesale deadlines is to run two rather than one: a customer-facing order deadline, and an internal production cutoff a few hours behind it so late arrivals land before the roast is committed rather than after. A sheet can carry both as columns. What it cannot do is refuse a change that arrives after them.

## The standing bag count is the sheet's real content

Most cafe lines do not move week to week. A small cafe gets through somewhere around 15 to 30 pounds a week depending on hours and site, and the count that reflects that is stable for months. The weekly work is the exceptions: an account closed Monday, a festival week doubling the espresso, a new single origin on for a fortnight.

So the sheet holds the standing count well and the exceptions badly, because the exceptions arrive as messages. [What is a standing order in wholesale](https://wholesalehandler.com/articles/what-is-a-standing-order-in-wholesale) covers the pattern the bags-per-week column is a manual version of.

## Where the sheet stops paying for itself

The sheet is cheapest while one person maintains it and orders arrive in one place. Each of these removes one of those conditions:

-   **The changes arrive in WhatsApp and the sheet is the transcription.** The thread becomes the record and the sheet a copy of it, which is two systems to keep aligned.
-   **A cafe asks what it ordered last week.** Answering means reading the sheet back to them, and there is no version they can check themselves.
-   **A second person needs it on roast day.** Two people in one sheet is when a deleted formula or an overwritten count stops being hypothetical.
-   **Invoicing is retyping the sheet.** Bags times price per bag is already in the columns, but moving it onto an invoice and tracking who paid is a second pass over the same data.
-   **The cutoff is a sentence repeated rather than something that closes.** A column recording a deadline does not enforce one.

None of those are volume thresholds. A roaster doing 400 pounds a week with orders coming in by text hits them sooner than one doing 2,000 pounds with every account on a fixed weekly count.

## Roasting software and an order desk are different purchases

RoasterTools is the incumbent in coffee and charges by roasted volume: each tier includes a number of pounds a month with a per-pound overage above it, and bundles its own payment processing and production planning that syncs orders to roast batches. For a roastery that wants green coffee tracked through to roast batches, that is the product, and nothing here is a substitute for it.

The narrower job is getting the orders out of WhatsApp without buying a roastery system. Wholesale Handler is an ordering portal and invoicing desk on a flat monthly fee, with no per-pound charge, no per-user charge and no cut of the order value. Each cafe signs in, sees its own coffees at its own prices and places its own order; a standing order on a weekly to four-weekly cadence generates itself at the cutoff, and the cafe can pause it, skip a week or change quantities. A cutoff can differ per delivery day, so a Wednesday run closes Tuesday morning while the Saturday run stays open until Friday. Orders consolidate into a production schedule and become packing slips and invoices. [How to take wholesale coffee orders from cafes](https://wholesalehandler.com/articles/how-to-take-wholesale-coffee-orders-from-cafes) covers that setup for a roaster.

What it does not do: green coffee inventory, roast profiles, roast-batch planning or payment processing. Those stay wherever they are now, which for a dozen accounts is often a roast log and a bank account. The demo needs no signup, so the sheet can be imported and tried against real accounts first.

## Q&A

**Q: Can the cafes fill in their own bag counts in a shared sheet?**
A: A shared sheet can take their input, but everyone with the link sees every account's counts and prices unless each cafe gets its own tab, and a tab each removes the single list the pivot runs on. A shared sheet also cannot refuse an entry made after the cutoff.

**Q: Does each grind need its own product code?**
A: Only if the codes go onto packing slips or invoices, where whole bean and espresso grind of the same coffee have to be distinguishable at the bench. In the sheet itself the cafe, coffee, grind and bag size together identify the line, so a code adds nothing.

**Q: How should decaf and other low-volume coffees be handled?**
A: As their own lines, the same as any other coffee. A one-bag-a-fortnight decaf line is the one most often missed in a total grouped only by cafe, and it is also the one that goes stale on the shelf, so it is worth seeing in the roast-day figures rather than rolled into an account's total.

**Q: Is a price column worth keeping if invoices come from accounting software?**
A: The bag count times the price per bag is the only place the week's value exists before an invoice is raised, so a missing or wrong line shows up as a total that looks off rather than as a query from the cafe a month later.
