A canteen or caterer can give the AI the site's rules (covers, budget, equipment, diets) and ask for a 20-day cycle table. Cost each dish per cover in a spreadsheet from your supplier prices, and build the allergen matrix from supplier specification sheets. The AI drafts the menu and the sheet logic; prices and allergens come from your documents.
The allergen column is where this goes wrong. Asked cold, an AI will name the obvious allergens in a dish and miss the ones inside the stock cube, the spice paste or the gravy granules, and it can't see which product your supplier really delivers. So the matrix is built from specification sheets, a blank cell means "declared free on the spec", and anything unverified shows CHECK until a person has read the sheet.
The brief that turns a vague request into a usable cycle
A cycle menu is a fixed set of weeks that repeats, and the repeat is what makes it cheap to run: the same recipes, the same supplier orders, a kitchen that gets quicker each time round. The draft is only as good as the rules you give it. The illustrative site here is a staff canteen serving 140 lunches a day from Monday to Friday. Four weeks is 20 service days and 2,800 covers a cycle. Each day offers a hot meat or fish main, a vegetarian main, a side and a dessert or fruit. The contract sets a food-cost ceiling of $2.80 a cover, the kitchen has two combi ovens and one tilting pan, and the site is nut-free.
Write those facts down as rules the AI can't misread:
- Protein rotation: chicken, beef, fish and pork once a week each, plus one other (lamb, turkey or egg).
- A vegetarian main every day and a vegan option at least twice a week.
- No main repeats within ten service days.
- Equipment: no more than two oven dishes at one service and one tilting-pan dish a day.
- The site's exclusions, stated as a hard rule: no nuts or nut-based products anywhere.
Paste your supplier list underneath (ingredient, pack size, price per kilo) so the AI only plans with products you can buy. One instruction matters more than the rest: tell it not to give prices or allergens. You will add both from your own sheets. It may still offer them, as the next section shows, but the instruction makes them easy to spot and ignore.
Draft a four-week cycle menu (20 service days, Monday to Friday) for a staff canteen serving 140 lunches a day.
Each day: one hot meat or fish main, one vegetarian main, one side or vegetable, one dessert or fruit option.
Rules: chicken, beef, fish and pork once a week each, plus one other main (lamb, turkey or egg).
A vegetarian main every day, with a vegan option at least twice a week. No main repeats within 10 service days.
At most two oven dishes at the same service and at most one tilting-pan dish a day.
The site is nut-free: no nuts or nut-based products anywhere in the menu.
Use only ingredients from the supplier list below. Do NOT give prices or allergens; I add those later from my own sheets.
Output a table with columns: week, day, hot main, vegetarian main, side, dessert, cooking method, equipment.
A first draft for week 1 and the three things to fix
This is the week-1 table an assistant produced from that brief (illustrative, trimmed to the columns that matter here).
| Day | Hot main | Vegetarian main | Dessert |
|---|---|---|---|
| Mon | Chicken and chickpea tagine with couscous | Spinach and ricotta cannelloni | Fruit salad and yoghurt |
| Tue | Beef and vegetable stew with dumplings | Sweet potato and black bean chilli with rice | Rice pudding |
| Wed | Chicken katsu curry with rice | Mushroom and lentil shepherd's pie | Baked apple with custard |
| Thu | Baked salmon with lemon potatoes | Cauliflower and chickpea bake | Pecan and maple sponge |
| Fri | Lamb keema with rice | Paneer and pea curry | Banana cake |
It looks plausible, and a slow read finds three problems.
- Two chicken mains. The tagine on Monday and the katsu curry on Wednesday break the once-a-week rule. Swap Wednesday for pork meatballs in tomato sauce with pasta.
- A nut on a nut-free site. The pecan sponge on Thursday. Replace it with a fruit-based dessert. Later the specification sheets must confirm that nothing else on the menu carries nuts either.
- A price from memory. Despite the instruction, the AI added a cost note for the Thursday salmon: $1.54 a portion, from an assumed $11 a kilo. The supplier list says $15.80 a kilo, so a 140 g portion costs $2.21 for the fish alone. Ignore every price the AI offers.
Then run an audit. In a fresh chat, paste the full 20-day table with the rules and ask the AI to check each rule in turn and list every breach with the day and the dish. A second pass over a finished table tends to catch what a first pass over twelve rules at once misses, and it costs a minute. Repeat until the list is empty, then move on to the sums.
Costing a dish per cover: raw weights, trim loss and a hand check
Cost per cover is the weight of each ingredient that goes into one portion, multiplied by its price, with trim loss allowed for. Two details trip people up. Recipe weights should be the usable amounts that go in the pot, and the yield column then lifts the price to cover what you trim away, so an onion that is 90% usable costs more per usable kilo than its invoice price. And everything is costed raw, never from the cooked weight on the plate. The table works one dish through with invented prices.
| Ingredient | Grams per cover | Price per kg as bought | Yield | Cost per cover |
|---|---|---|---|---|
| Chicken thigh, boneless and skinless | 130 | $7.20 | 100% | $0.936 |
| Chickpeas, tinned, drained | 50 | $2.40 | 100% | $0.120 |
| Onion | 45 | $1.10 | 90% | $0.055 |
| Chopped tomatoes, tinned | 60 | $1.60 | 100% | $0.096 |
| Spice paste | 12 | $11.00 | 100% | $0.132 |
| Couscous, dry | 55 | $2.30 | 100% | $0.127 |
| Rapeseed oil | 5 | $3.20 | 100% | $0.016 |
| Chicken and chickpea tagine | 357 | $1.48 |
The spreadsheet does that arithmetic for every dish, from three small sheets. These formulas work in current versions of Excel and Google Sheets.
Ingredients sheet: A ingredient | B supplier code | C price per kg as bought | D yield (0.9 = 90%) | E usable price per kg
E2: =C2/D2
RecipeLines sheet: A dish | B ingredient | C grams per cover | D usable price per kg | E cost per cover
D2: =XLOOKUP(B2, Ingredients!A:A, Ingredients!E:E, "NO PRICE")
E2: =IF(ISNUMBER(D2), C2/1000*D2, "NO PRICE")
Dishes sheet: A dish | B cost per cover
B2: =IF(COUNTIFS(RecipeLines!A:A, A2, RecipeLines!E:E, "NO PRICE")>0, "INCOMPLETE", SUMIFS(RecipeLines!E:E, RecipeLines!A:A, A2))
The last formula earns its length. Without the INCOMPLETE test, a missing price is silently skipped by the sum and the dish looks cheaper than it is, which is exactly the error you would not notice until the invoices arrive. Ask the AI to write these for your own column layout, and to add a check column that lists any recipe line whose ingredient isn't in the price sheet. The sums stay in the sheet. Models slip on long arithmetic, as the tutorial on why AI is bad at maths explains, and a spreadsheet doesn't.
Two habits keep the numbers honest. Measure yields yourself for your ten costliest trimmed ingredients, weighing the raw item and then the usable part, and don't accept a typical figure from the AI; your knives and your supplier's product decide the real one. And cost three dishes by hand with a calculator, one meat, one vegetarian and one with a long ingredient list. If the sheet disagrees by more than a cent or two a cover, find the broken lookup before you trust the rest. The tutorial on building a recipe costing spreadsheet with ChatGPT goes deeper on the layout if you are starting from nothing.
Now scale up. Each day has two mains, so the cost per cover has to be blended by how many people pick each. The week-1 table below assumes 60% take the hot meat or fish main and 40% the vegetarian one. That split is a guess, so replace it with your own servery tally after the first cycle. The side and dessert come to $1.20 a cover every day in this example.
| Day | Hot main (cost) | Vegetarian main (cost) | Blended main | Side and dessert | Plate cost |
|---|---|---|---|---|---|
| Mon | Chicken and chickpea tagine ($1.48) | Spinach and ricotta cannelloni ($1.12) | $1.34 | $1.20 | $2.54 |
| Tue | Beef and vegetable stew ($1.95) | Sweet potato and black bean chilli ($0.98) | $1.56 | $1.20 | $2.76 |
| Wed | Pork meatballs with pasta ($1.35) | Mushroom and lentil shepherd's pie ($1.05) | $1.23 | $1.20 | $2.43 |
| Thu | Baked salmon, lemon potatoes ($2.49) | Cauliflower and chickpea bake ($1.10) | $1.93 | $1.20 | $3.13 |
| Fri | Lamb keema with rice ($2.20) | Paneer and pea curry ($1.25) | $1.82 | $1.20 | $3.02 |
Monday's blended main is 0.6 × $1.48 + 0.4 × $1.12 = $1.34, and the plate cost adds the $1.20 side and dessert. The week averages $2.78 a cover, which is under the $2.80 ceiling, but Thursday at $3.13 and Friday at $3.02 are over it. This contract applies the ceiling to the cycle average, not to each day, so one dear day is fine when cheaper days pay for it. Even so, Thursday's salmon is worth a second look. Baked pollock at $9.40 a kilo brings that dish to $1.60, Thursday to $2.60 and the week to $2.67. Ask the AI for three cheaper alternatives to the salmon from your supplier list, then cost each one in the sheet. The AI proposes and the sheet prices.
Roll the four weeks together and the cycle tells its own story. The week figures below come from the same sheet.
| Week | Draft after rule fixes, average per cover | After cost swaps, average per cover |
|---|---|---|
| 1 | $2.78 | $2.67 |
| 2 | $2.91 | $2.76 |
| 3 | $2.84 | $2.74 |
| 4 | $2.95 | $2.80 |
| Cycle average | $2.87 | $2.74 |
| Cost of 2,800 covers | $8,036 | $7,679 |
| Against the $7,840 ceiling | $196 over | $161 under |
Left alone, the rule-corrected draft would have broken the contract by $196 a cycle, and you would have found out from the month-end invoices. A handful of sensible swaps turns that into $161 of headroom. The weakest assumption in the whole sheet is still the 60/40 split. If 75% had chosen the salmon on Thursday instead of 60%, that day's blended main would have risen from $1.93 to $2.14, about $29 more across 140 covers. One cycle of real tallies from the servery replaces the guess.
Rolling allergens up from supplier specs, not the AI's memory
Use the allergen list your own food rules require. Many frameworks name 14: cereals containing gluten, crustaceans, eggs, fish, peanuts, soybeans, milk, tree nuts, celery, mustard, sesame, sulphur dioxide and sulphites, lupin and molluscs. Others are shorter, and one major list has nine, so trim or extend the columns to match yours. The method is the same either way and it rests on one rule: an allergen flag enters the sheet only from the supplier's specification sheet for the exact product you buy.
Three sheets carry it. The first two you already have from costing.
- Ingredients: one row per product you buy, with supplier code, price and yield, a "spec verified on" date, and one column per allergen holding Y (the spec says the product contains it) or N (the spec says it doesn't). A blank cell means nobody has answered yet.
- RecipeLines: the same dish-and-ingredient lines used for costing, each pulling that ingredient's flags through a lookup.
- Matrix: one row per dish and one column per allergen, showing Y, blank (declared free on every spec) or CHECK.
Anything that isn't exactly Y or N becomes CHECK, including a product that isn't in the Ingredients sheet at all, and a dish shows CHECK in an allergen column if any of its ingredients does. Missing data can never look like a free-from dish.
The AI's useful job is the typing between the PDF and the sheet. Attach the specification sheet and use a prompt that forbids outside knowledge and demands a quotation for every positive.
Read the attached supplier specification sheet and fill one row: product name, supplier code, then for each allergen below write
Y if the sheet says the product contains it, N if the sheet lists it as not present, UNCLEAR if the sheet does not say.
Quote the exact sentence from the sheet for every Y and every UNCLEAR. Use only the sheet. Do not use what such a product usually contains.
Allergens: cereals containing gluten, crustaceans, eggs, fish, peanuts, soybeans, milk, tree nuts, celery, mustard, sesame,
sulphur dioxide and sulphites, lupin, molluscs.
Finally list every "may contain" or "traces of" statement separately.
Here is an illustrative reply for the spice paste in the tagine.
Product: Tagine spice paste, 1 kg tub (code TP-140)
Celery: Y "Contains: celery, mustard."
Mustard: Y "Contains: celery, mustard."
Sesame: UNCLEAR "May contain traces of sesame."
Cereals containing gluten, crustaceans, eggs, fish, peanuts, soybeans, milk, tree nuts,
sulphur dioxide and sulphites, lupin, molluscs: N
May contain: sesame
A person then reads the specification sheet beside that row. Every Y and every UNCLEAR is checked against its quotation, and until you trust the extraction, every N is checked too. Only then are the Y and N values typed into the Ingredients sheet. How you treat "may contain" statements is a policy decision for the kitchen and its food-safety adviser, and the tutorial on building an allergen matrix from recipes and verifying it goes into the cross-contact side. The AI saves the typing. It doesn't save the reading.
With every line verified, a dish rolls up by itself. This is the tagine again, with specification data invented for the illustration.
| Ingredient | What the spec says | Flags entered |
|---|---|---|
| Chicken thigh | No declared allergens | None |
| Chickpeas, tinned | No declared allergens | None |
| Onion | No declared allergens | None |
| Chopped tomatoes, tinned | No declared allergens | None |
| Spice paste (TP-140) | Contains celery and mustard; may contain traces of sesame | Celery Y, mustard Y; note: may contain sesame |
| Couscous, dry | Contains: wheat (cereals containing gluten) | Cereals containing gluten Y |
| Rapeseed oil | No declared allergens | None |
| Dish result | Rolled up from the seven lines above | Celery, cereals containing gluten, mustard; may contain sesame; every other column blank, no CHECK |
Set that beside what a cold question produces. Ask an assistant which allergens are in a chicken and chickpea tagine with couscous and a typical reply is "cereals containing gluten, from the couscous". That is correct and incomplete, because the assistant can't know the paste you buy carries celery and mustard. Only the sheet for that product knows. Illustrative again: the cold reply is typical, and the specification data are invented, so yours must come from your own sheets.
The lookups behind the matrix are short. Put the allergens in alphabetical order and celery comes first: column G on the Ingredients sheet (after the cost columns and the verification date in column F) and column F on RecipeLines. Every other allergen column copies across from it.
RecipeLines, celery column (F2), copy across for the other allergens:
=IF(XLOOKUP($B2, Ingredients!$A:$A, Ingredients!G:G, "")="Y", "Y", IF(XLOOKUP($B2, Ingredients!$A:$A, Ingredients!G:G, "")="N", "N", "CHECK"))
Matrix, celery column (B2), copy across:
=IF(COUNTIFS(RecipeLines!$A:$A, $A2, RecipeLines!F:F, "CHECK")>0, "CHECK", IF(COUNTIFS(RecipeLines!$A:$A, $A2, RecipeLines!F:F, "Y")>0, "Y", ""))
Some products deserve a second read before anything is typed: stock cubes and bouillons, curry and spice pastes, sauces and dressings, gravy granules, breadcrumbs, batters and pastry. Allergens commonly sit in them under names that don't look like allergens, so the spec for each is worth reading twice, and an ingredient that isn't named on the recipe at all (a "seasoning mix") needs its own line. Where the specification sheet is unclear, the answer is a phone call or an email to the supplier, never a guess.
The split between what the AI may do and what it may not is worth printing for the kitchen office.
| Job | The AI may | The AI may not |
|---|---|---|
| Capturing spec data | Propose a row from the PDF with a quoted sentence for every Y and UNCLEAR | Put anything into the sheet unchecked |
| Rolling up | Write and explain the formulas | Declare a dish free from anything |
| Finding gaps | List ingredients with blank cells or no spec | Fill a gap with what such a product usually contains |
| Printing | Format the sheet into a clean table | Re-type the allergen cells |
| Questions | Draft the staff briefing | Answer a diner's allergen question |
When a supplier swaps a product, the matrix goes stale
A matrix is true on the day it is signed and drifts after that. The usual cause is a substitution: the product you ordered is out of stock, the driver brings a near match, and the delivery note carries a different description or code. If Tuesday's stock cubes are a different brand from the ones in your Ingredients sheet, the sheet is now wrong for every dish that uses them, and nothing on the menu says so.
Three habits close the gap.
- The cook who receives the delivery compares the code and description on the delivery note with the Ingredients sheet for the higher-risk products listed above. On any mismatch they clear that product's Y and N cells straight away, which turns every dish using it to CHECK until the new specification has been read.
- Once a week, paste the week's delivery or invoice lines next to the Ingredients list and ask the AI to list every line whose code or description isn't in the list or differs from the stored one. That is a matching job, which assistants usually do well, and the output is a short list to read.
- The new specification sheet is read and entered before the product is used. A dish that shows CHECK isn't served unlabelled, whatever the clock says.
An illustrative line from the weekly matching output:
Delivery note: "Vegetable bouillon powder 1 kg (substituted)", code VB-22. The Ingredients sheet holds VB-10 "Vegetable stock cubes". Different code and different description. Not matched.
Nothing in that line says the new product contains a new allergen, and the AI shouldn't say so either. It says the sheet can no longer be trusted for that ingredient, which is the whole job. The tutorial on spotting supplier specification changes that break labels covers the same discipline for a producer.
Printing the matrix: the AI formats, a person signs
Print the matrix from the sheet. The AI may format the table, but it must never retype it. A model that rewrites a table can quietly drop or change a cell, and the page will still look right. The guard is a count: for each allergen column, count the Y cells on the sheet and on the printed page. If any pair differs, nothing goes on the wall.
Each printed version carries a date, a version number and the name of the person who checked it against the sheet, usually the head chef or food-safety lead. Add the standing line your own rules require telling diners to ask a member of staff about allergens, and keep the signed copy in the same folder as the specification sheets it came from. When a dish changes mid-cycle, the cost and the allergen row are both re-run before the new dish is served, and the version number moves on.
Don't point a chatbot at this sheet to answer diners' questions. The tutorial on whether an AI chatbot should answer allergen questions explains why a wrong answer costs far more than a slow one.
From the cycle to the weekly order
Once the cycle exists, the order sheet is multiplication. For each ingredient in a week: covers, times the share choosing that dish, times the usable grams per cover, divided by the yield for anything you trim, rounded up to the supplier's pack, then grouped by supplier and order cut-off. Ask the AI to build that sheet structure from your cycle table, then check the five lines worth the most money by hand.
Monday of week 1 shows the sum. A hundred and forty covers at a 60% share is 84 hot-main portions, and 84 portions at 130 g of chicken is 10.92 kg. If the supplier sells 2.5 kg bags, 10.92 divided by 2.5 is 4.37, so you order five bags, 12.5 kg, and 1.58 kg is left over, about $11.38 at $7.20 a kilo. Surplus like that is where a planned leftover earns its place (the spare chicken going into Wednesday's soup), or where a different pack size is worth raising with the supplier. For onions the same sum runs on the as-bought weight: 45 g usable at a 90% yield means 50 g to buy per cover.
Add the practical limits the AI can't know unless you say so: delivery days (a Monday dish must be ordered before Thursday's cut-off), minimum order values, shelf life and freezer space. Put them in the prompt for the order sheet.
What to check after the first full cycle
After four weeks you have 20 days of real data to set against the sheet. Five checks tell you whether to trust it.
- Plate weight against recipe weight. Weigh five portions of each of your three costliest dishes. If plates run 10% heavy, the sheet understates the cost by about the same amount.
- Real uptake. Replace the 60/40 guess with the servery tally and re-run the cycle cost. Note which dishes sold out and which were left.
- Waste per cover. Weigh what comes back for a week. The cheapest dish on paper is the one people eat.
- Open CHECK flags. The count should fall to zero before the cycle repeats. A dish served with a CHECK showing is a process failure, not a rounding issue.
- Mid-cycle changes. Count the unplanned swaps. Each should have a cost and an allergen re-run on record.
Then go round again: replace the weakest few dishes by uptake and waste, re-run the audit prompt, refresh prices from the latest invoices, and re-verify any specification that is older than your own policy allows before the cycle starts over.
Allergens are not the only dietary rule. If the site also feeds residents or patients who need texture-modified, diabetic or fortified menus, the cycle needs a wider rule set and a dietitian's sign-off. The tutorial on a care home four-week menu planner with dietary checks shows how that layer is built in.
A spreadsheet carries one site well. It strains when several sites share recipes, when specifications change weekly or when more than two people edit the same file. Dedicated recipe tools exist for that stage. Apicbase describes a menu-planning add-on for planning menu cycles with visibility of cost, stock and production, and Nutritics describes recipe management, meal planning and cost and margin setting on one platform, with allergen information published from the same recipes. Neither shows prices on its site, so you ask for a quote or a demo. Whatever you choose, put two questions to the vendor: how does supplier allergen data get in, and who is responsible for verifying it? Software only stores what somebody typed.
Questions caterers ask about AI menu cycles
Can I ask ChatGPT which allergens are in my recipes?
You can ask it where to look, but not what is true. It will list the obvious ingredients and miss the ones hiding in stock, pastes, sauces and spice mixes, and it can't see which product your supplier actually delivers. Allergen flags must come from the specification sheet for the exact product you buy, checked by a person.
How many weeks should a menu cycle run before it repeats?
Four weeks suits many staff canteens because it gives 20 service days of variety without an unmanageable recipe list. There is no rule. Choose the length from how many days a week people eat with you and how quickly they tire of dishes, then review uptake and waste after each cycle and replace the weakest few dishes before it repeats.
What if a supplier won't give me a specification sheet?
Treat the product as unverified. Mark it CHECK in every allergen column, keep it off any menu that lists allergens, and ask for the allergen statement in writing or switch to a product that comes with one. Never fill the gap from an AI's memory of what the product usually contains.
Do I need recipe software instead of a spreadsheet?
A spreadsheet is enough for one site with a modest recipe list. Dedicated tools such as Apicbase and Nutritics hold recipes, costs and allergens in one system, and neither publishes prices, so you ask for a quote. Whatever you use, ask who verifies the supplier allergen data, because software only stores what someone typed in.
Further reads
- Catering Menu Planning: Scale Recipes and Shopping Lists With AI — Scale recipes and build shopping lists for event menus.
- AI Menu Making Tool: Allergen Icons and Dietary Labels Before You Print — Allergen icons and dietary labels before a menu goes to print.
- How to Forecast Covers and Cut Food Waste With AI — Forecast covers so uptake assumptions stop being guesses.
- How to Price Catering: A Cost-per-Person Sheet With AI — Turn dish costs into a price per person for clients.
- Can AI Write a Catering Tender Response? What to Keep Confidential — Read a catering tender and draft a response safely.
- AI in Hospitality Management: Catch Supplier Price Creep on Invoices — Catch supplier price rises and substitutions on invoices.
- Catering Software for Small Business: Free Options and AI Extras — A free quote, order and invoice stack for a small caterer, then what a free AI assistant adds to each step and where it stops.
- Meal Prep Business Software: Weekly Menus, Orders and AI Labels — Set up a meal prep week: menu, order cut-off, batch counts and labels, plus where AI helps and where allergen and macro checks stay human.
- AI Food Menu Generator: Build a Seasonal Menu From Your Supplier List — Paste your supplier sheet into ChatGPT, draft dishes from what is deliverable, cost every plate and check allergens before printing.
- AI for Delis: Daily Specials, Platter Orders and Allergen Labels — One deli, four weeks: specials built from the chiller, a platter order form that prices itself, and allergen labels a person signs off.
- Can ChatGPT Draft a Personal Chef Contract? Clauses to Check — What ChatGPT can draft in a personal chef agreement, and the cancellation, allergy, grocery and insurance clauses a solicitor should check before signing.
- Catering Event Checklist: Build the Run Sheet From One Brief With AI — A brief template, a prompt and a manager's checklist for building a catering run sheet, equipment list, staffing plan and load-in plan from one client brief.
- Corporate Catering Proposals: Win Office Contracts With AI Outreach — A caterer's plan for office contracts: write to whoever books lunches, send a one-page proposal, follow up three times and track every office in one sheet.
- Wedding Catering Proposals: Tastings, Quotes and Follow-Ups With AI — A caterer's workflow for wedding proposals: tiered quotes you can check, tasting invites, guest dietary lists and follow-ups after the tasting, drafted with AI.
- Personal Chef Client Intake Form: Allergies, Diets and Menus With AI — The fields a personal chef needs for allergies, diets and kitchen details, and how to turn the answers into a menu draft without exposing health data.
- Can ChatGPT Write a HACCP Plan for a Restaurant? What to Verify — What ChatGPT drafts well in a HACCP plan, what it guesses, and the checks your food safety authority still makes: limits, logs, thermometers and training.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: published allergen guidance naming 14 allergens in one framework and nine in another; Apicbase and Nutritics product pages (all checked October 2026). Prices, weights, specification data and menu figures in the examples are invented for illustration.