AI for Coffee Roasters: Batch Logs, Wholesale Orders, Labels

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Coffee Roasters: Batch Logs, Wholesale Orders, Labels.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Coffee Roasters: Batch Logs, Wholesale Orders, Labels.

A small coffee roaster can use AI to turn messy roast notes into consistent batch logs, convert wholesale order emails into pick lists and invoices, and draft label copy from a verified spec, as long as the weights, dates and allergen statements are checked against measured packs and the rules where the coffee is sold.

AI handles the typing; you keep the facts. The three jobs share one habit: a fixed template that the AI fills in, and a short human check before the result is used. Without the template the model tidies each page differently; without the check, a misread 7 or a guessed bag size reaches a customer.

Follow me on Instagram@sagnikteaches

The roastery in this tutorial

Say a four-person roastery roasts about 450 kg of coffee a week on a 15 kg drum roaster, sells through its own website, and supplies 22 wholesale customers, mostly cafes and two offices. Orders arrive by email and text message. Roast notes live in a notebook beside the roaster, photographed when roasting finishes. Labels are produced from a spreadsheet and printed on a roll printer. Every figure here is illustrative.

Connect on LinkedInSagnik Bhattacharya

The owner's pain points are these. Roast notes are inconsistent, so tracing a complaint to a batch takes half an hour. Wholesale orders turn up in six different formats, and one in thirty is mis-picked. Label changes, such as a new origin or a new bag size, are slow because the details sit in three places.

Subscribe on YouTube@sagnikteaches

Job one: a roast log you can trace a complaint through

A batch log is useful for two things: repeating a good roast and tracing a bad one. The minimum fields are batch number, date, roaster operator, green coffee lot, green weight in, roasted weight out, charge temperature, key timings (first crack, end of roast), drop temperature, roast level or colour reading, and cupping notes. The notebook has them, in six different orders.

Turning notebook photographs into rows

Photograph each page and paste the image or its text into a chat assistant that reads images. Give it the column list and ask for a table, with a rule that unreadable values are marked, not guessed.

Below is a photograph of my roast notebook page.
Extract each batch into a table with these columns:
batch_no, date, operator, green_lot, green_kg, roasted_kg,
charge_temp, first_crack_time, drop_time, drop_temp, colour_reading, notes.
Rules: if a value is unreadable or missing, write "?" - never guess.
Do not calculate anything. Keep times as written (mm:ss).
Output as a table I can paste into a spreadsheet.

A realistic output (illustrative) gives rows such as: batch 4127, 12 March, operator initials, lot "Kenya AA lot 3", green 15.0, roasted 12.7, drop time 11:40. A realistic error: the notebook says "12.7" and the assistant reads "12.1" because of a looped 7. The "?" rule helps with blanks but not with confident misreads, so the spreadsheet needs a check that catches it.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Let the spreadsheet do the arithmetic

Add a formula column for weight loss: (green_kg minus roasted_kg) divided by green_kg. In the example, (15.0 minus 12.7) divided by 15.0 is 15.3%. Roast loss varies with roast level and the coffee, so use your own history, not a published figure. Add a rule that flags any row more than two percentage points away from the average for that green lot. A misread 12.1 would show 19.3% and stand out immediately, which is the check that catches the looped 7.

Now the AI has a use it is good at: looking at the flagged rows and asking what is different. Paste five batches of the same lot with their timings, and ask: "which batch differs most from the others, and in which fields?" It might answer that batch 4131 had a drop time 90 seconds longer and a drop temperature 3 degrees higher. That is a pointer, not a diagnosis; the roaster decides whether it matters by cupping the batch.

If your records feed a quality or traceability system, the habit of one template per batch is worth building before you buy software. A neighbouring trade has the same problem, and AI for a soap maker: batch records, ingredient labels and listings shows the same structure working on a different product.

Tracing a complaint

A cafe emails that last Thursday's bags tasted flat. With a clean log you filter by the dispatch date, find the batches that went into those bags, and compare them with the previous week's. Ask the assistant to produce a short summary of those batches in a table and to list any differences in green lot, timings or weight loss. Then pull a retained sample of the batch and cup it. A retained sample from each batch, kept for a set period, is the other half of traceability; AI cannot replace it.

Job two: wholesale order emails into pick lists

Wholesale customers write the way they write. "Same as last time plus 2 of the Ethiopian", "5kg house espresso beans and 1kg decaf, ground for filter", "Usual please". The task is to turn that into a structured order your team can pick, invoice and ship from.

Give the assistant your catalogue and the customer's history

You turn wholesale order emails into pick lists for a coffee roaster.
Use ONLY the product list and the customer's last order below.
Output a table: product code, product name, bag size, grind, quantity.
If the email says "same as last time", copy the last order and apply
any changes. If a product or grind is unclear, write "QUERY:" and the
question to ask the customer - do not guess.
Finish with a two-line reply to the customer confirming what you
understood, listing quantities, with no prices and no delivery date.

PRODUCT LIST:
[codes, names, sizes]
LAST ORDER FOR THIS CUSTOMER:
[paste]
EMAIL:
[paste]

Say the email reads: "Hi, same as last month please but add 2 bags of the Ethiopian and drop the decaf. Can you grind the house blend a bit coarser for the new batch brewer? Cheers." The last order was 4 x 1 kg house espresso (whole bean), 2 x 1 kg decaf (whole bean), 1 x 1 kg Colombia (filter grind).

A good output (illustrative): house espresso 4 x 1 kg, grind QUERY "Which size is the new batch brewer setting, medium-coarse?"; Colombia 1 x 1 kg, filter grind; Ethiopian 2 x [bag size not stated] QUERY "Do you want 1 kg or 250 g bags?"; decaf removed. The confirmation reply asks the two queries. The assistant did the useful thing: it did not quietly decide a bag size.

What to fix in the first week

  • Check that it never invents a product code. Ask it to list only codes that appear in your list.
  • Check that "usual" without a history returns a QUERY and not an order.
  • Check units: a customer's "5 kilos" must become 5 x 1 kg or 20 x 250 g, according to the pack sizes they have bought before.
  • Keep pricing out of the assistant. Prices come from your invoicing system by customer, so a model cannot misquote a discount.

A person still reads each pick list for a few weeks, with the original email beside it. If your order volume grows, the extended approach to emailed orders in reading emailed orders into a wholesaler's system covers moving from copy-and-paste to a connected workflow. For buying green coffee and consumables, automating purchase orders and supplier emails uses the same pattern in reverse.

A worked sum: how many kilos of green to buy

From the pick lists you can forecast roasting. Suppose next week's confirmed wholesale orders total 214 kg of roasted coffee and web orders usually add 70 kg. At a 15.3% loss, 284 kg roasted needs 284 divided by 0.847, which is about 335 kg of green. Add a buffer of one batch, 15 kg, and you plan for 350 kg. The model can set out the sum, but you supply the loss figure from your own logs and decide the buffer. The forecast only works as well as the logs underneath it, which is why job one comes first.

Job three: label copy from a verified spec

A coffee bag label has two kinds of content. Fixed facts: product name, origin, process, roast level, ingredients, net weight, roast date or best-before, batch number, your name and address, any certification with its licence number. And descriptive text: the tasting notes, the story in two lines, the brew suggestion. AI is good at the second kind and should not touch the first.

The spec sheet is the source

For each product keep a spec: origin and region as on the import documents, producer or cooperative name only if you have it in writing, altitude and variety if known, process, roast level, certifications held, ingredients (just "coffee" for a single origin, or the full list for flavoured products), allowed pack sizes. The assistant gets only this sheet.

Write label copy for a 250 g coffee bag using ONLY the spec below.
Output: product name (max 6 words); tasting notes (3 flavour notes
taken from our cupping notes, not invented); a 25-word description;
a brew suggestion (one line). Do not state certifications, origin
details, altitude, farm or producer names unless they appear in the spec.
Do not use health claims. British English.

SPEC:
[paste]
CUPPING NOTES:
[paste]

Illustrative sample: spec says "Ethiopia, washed, light roast, cupping notes: bergamot, peach, black tea". Output: "Washed Ethiopia. Notes of bergamot, peach and black tea. A bright, tea-like cup for filter brewing. Try 15 g to 250 ml, just off the boil." Fix: the brew suggestion is a suggestion, not a fact, so keep it only if it matches your own recommended recipe. Delete any "single-estate" or "high-altitude" language that crept in from the model's general knowledge of Ethiopian coffee, because your spec did not say it.

Checks the label needs before printing

ItemSource to check againstWhat goes wrong
Net weight statementMeasured packs on a calibrated scale, plus the rules for where you sell (units, size of print, placement)Label says 250 g and packs average 248 g
Roast date or best-beforeYour batch log and your own shelf-life policyDate applied from the wrong batch
Ingredients and allergensSupplier specifications for any flavouring or additiveA flavoured line sold with a plain-coffee label
Origin wordingImport and lot documents"Blend of Ethiopia and Kenya" after the lot changed
Certification marksCurrent certificates and licence numbersMark printed after a certificate expired
Business name and addressYour registrationOld address on an old template

Label rules differ between places, so for each market you sell into, check the official labelling guidance or ask a qualified adviser, and do the same for any allergen statement. The point of the spec sheet is that when a lot changes, you change one document, regenerate the copy and re-run the table. Supplier specification changes and labels covers how to catch edits that break a label, and AI for a pet food business shows another small manufacturer's label routine.

Job four: the messages around the orders

Once the log and the orders are tidy, the same assistant can draft the messages that currently eat your evenings. The rule is unchanged: facts come from your records, wording comes from the model, and a person sends.

A price-change note to wholesale customers

Say your green coffee cost has risen and you are raising the wholesale price of the house blend from $14.50 to $15.40 a kilo from the first of next month. You give the assistant the old price, the new price, the date and two sentences on why, and ask for a note under 120 words that states the change plainly, gives 30 days' notice and thanks the customer without apologising excessively. An illustrative output: "Hi [first name], a quick note that from 1 [month] the house blend will move from $14.50 to $15.40 a kilo. Green coffee costs have risen over the past year and we've held our price as long as we could. Orders placed before that date stay at the current price. If you'd like to talk through your order, just reply. [your name]." Check the arithmetic yourself (an increase of 90 cents, about 6.2%), and confirm that "orders placed before that date" is a promise you will keep.

A quick sum: what the price change is worth

If the 22 wholesale customers together buy about 120 kg of house blend a week, a 90-cent rise adds roughly 120 x 0.90 = $108 a week, or about $5,600 a year before any customers leave. Put that beside the extra green cost per kilo to see whether it covers it. The assistant can build the sheet, but the decision on how much to pass on is yours, and so is the judgement on which customers to tell personally first.

A delayed delivery message

A late shipment of a green lot means a customer's favourite single origin will be out for a week. The prompt: "Write a two-sentence message telling the customer the Colombia will be a week late, offer the house blend at the same price meanwhile, and ask which they prefer." Good drafts name the alternative and ask a question. Weak drafts bury the delay in the third sentence. Read for that.

Stock counts from a photo of the shelf

Some roasters photograph the finished-goods shelf and ask the assistant to count bags by product. Treat the result as a rough prompt for a proper count, not the count. Bags overlap, labels turn away from the camera and similar packaging confuses the reading. A realistic check is to count one shelf by hand and compare. If the assistant's count is within one bag on a shelf of twenty, it is useful for a quick look; for stock you invoice from, count by hand.

How the retained sample ties in

Retained samples close the loop between the log and a complaint. Keep a small sealed sample of each batch with the batch number on it, for a period you set and write down. When a customer says last week's coffee tasted flat, you cup the retained sample beside the current batch. The log tells you what you did, the sample tells you what came out, and the assistant's role is only to line up the log entries for the two batches so you can see at a glance which settings differed. Without the sample you are guessing from paper.

A realistic mistake from each job

  1. Log: the assistant "tidies" a drop time of 9:50 to 10:05 because the pattern looked off. The rule "never normalise values" and the "?" instruction prevent it; check by comparing five rows to the photograph.
  2. Orders: a customer's "2 of the Brazil" is matched to the Brazil decaf rather than the regular Brazil. Fix: ask the assistant to echo product names as well as codes in its confirmation, so the customer spots the slip.
  3. Labels: a new 1 kg bag is created by editing the 250 g label, and the weight statement stays at 250 g on a proof nobody read. Fix: the weight is generated from the pack-size field, never typed.

Building the routine into the week

None of this needs software beyond a spreadsheet, a chat assistant on a business plan and your label printer. A sensible rhythm for a small roastery is as follows.

  • Each time roasting finishes (10 minutes): photograph the notebook, extract rows, scan the flagged loss percentages, correct misreads, save.
  • Each order morning (20 minutes for about eight emails): run emails through the order prompt, read each pick list against its email, send the confirmation queries.
  • When a product changes (30 minutes): update the spec, regenerate label copy, run the label table, print one proof, check it against a physical bag.
  • Monthly (30 minutes): read the batch log summary the assistant prepares, look for drift in loss or timings per lot, and cup any batch it highlights.

Measure the effect for a month: minutes spent on records and orders, the number of mis-picks, and the number of label corrections found at proof stage. If mis-picks fall from about one in thirty to one in a hundred, the check step is working. If they do not move, look at which kind of order email still fails and add that example to the prompt. For the cafe-side view of the same supply chain, coffee shop inventory with AI shows what your wholesale customers are doing on their end, which helps when you write your own order template.

If you would like help deciding which of these three jobs to automate first, and how to hand it over to the team in a form they can run, that is what my AI implementation consultation covers, and you can reach me through the contact page.

Questions roasters ask before using AI

Can AI tell me the best roast profile?

No. It can summarise your own logs, spot that two batches differ and suggest what to compare, but it has not tasted your coffee. Cupping and your roaster's controls decide the profile. Use AI for records, not for taste decisions.

Is it safe to put customer lists into an AI tool?

Use a business plan where content is not used for training by default, and share only what the task needs, such as product codes and quantities. Leave out bank details and anything you would not email to a stranger.

Does coffee need allergen labelling?

Plain roasted coffee usually has no declarable allergen, but flavoured or blended products, added ingredients and shared-equipment statements can change that. Check the labelling rules for the places you sell, and ask a qualified adviser before printing a new label.

Who checks the weights on the label?

You do, with a calibrated scale and a written check each week. AI can calculate expected roasted weight from green weight and your typical loss, but the number on the bag must come from a measured pack, not a model.

Further reads

Sources: the author's guidance on batch records and labelling checks; the FDA's food allergies page for the list of major food allergens (read 5 November 2026); no vendor pricing is quoted. Check weight, labelling and allergen rules for each place you sell.

Want your roastery paperwork tidied properly?

On a 1:1 call we can look at your roast logs, order inbox and label files, choose the one job worth automating first, and decide what your team can maintain.

Book a 1:1 call with me