Export your expiry list with unit cost, shelf price, units on hand and recent daily sales, then give an AI assistant your rules: price floor, markdown steps by days left, and lines to skip. It proposes a price for each line, a manager approves, and you track waste and margin on one aisle for two weeks before widening.
The AI applies rules; it doesn't invent them. It will price 300 lines faster than a person, but the rules (what counts as short-dated, how deep each step goes, which products are never marked down) are yours to settle before anything is typed. Dates matter most. It knows only what is in your file, and a safety date is not a pricing opportunity.
Where AI helps and where a spreadsheet rule does the job
Markdown pricing has two layers. The first is arithmetic: how many units you hold, how many days remain, how fast the line normally sells, and so how many are likely to be left over. A spreadsheet formula does that perfectly well, and you should keep it visible. The second layer is clean-up and judgement, where an AI assistant earns its place. It tidies an export with inconsistent product names, turns your notes into written rules, applies the rules to every line with a reason, stress-tests edge cases and summarises the waste log each week.
What it can't do is know your shoppers. The depth of each step is a starting guess that two weeks of your own data will correct.
Dedicated platforms exist, and they are built for chains. Retail Insight's WasteInsight, for example, alerts store staff to near-expiry lines, recommends markdown prices and aims to prompt reductions up to a week before the date while some margin remains. Its product page names supermarket chains as customers and offers a demo or a pilot rather than a price list. For one shop, the spreadsheet-plus-assistant routine below covers the same logic. If you do ask a platform for a quote, compare it with the waste you measure under this routine. The tutorial on AI for supplier invoices and shelf prices in a grocery store covers neighbouring jobs, and the one on testing price changes in a supermarket covers everyday prices rather than expiry markdowns.
Build the expiry list before the AI sees it
The ordinary barcode on a pack carries no date. Some newer 2D codes can hold one, but only if your suppliers print them and your scanners read them, so for most small shops the expiry list has to come from somewhere else: goods-in checks, batch details from the supplier's delivery note, or a daily walk along the shelves with a handheld or a clipboard. Pick one source and keep it consistent. Use one row per product per date batch, with these columns:
sku,description,date_type,units_on_hand,avg_daily_units,days_left,unit_cost,shelf_price,restricted
1001,Natural yoghurt 500 g,best_before,36,5,4,0.78,1.60,N
1002,Fresh filled pasta 250 g,use_by,18,4,3,1.30,2.80,N
1003,Chicken curry ready meal,use_by,12,5,2,2.10,4.50,N
Average daily units comes from the till's item report over the last four weeks, divided by the days you were open. If the till can't report by item, use weekly units divided by trading days. Use prices without sales tax so margins compare, and unit cost from your latest invoice rather than an old price list.
Let the AI clean the file first: standardise names, and flag impossible rows such as negative stock, a shelf price below cost or an expiry date already past. The tutorial on cleaning messy data covers the technique.
Then take out what this routine must never price. Age-restricted goods, such as alcohol, tobacco and vaping products, are out of scope: mark them restricted = Y so the prompt skips them, because their pricing and promotion rules are set separately and an AI suggestion could breach them. Keep infant formula, baby food, medicines and supplements out as well. Their date rules are strict, and a shelf-price tweak is not the place to learn them.
Markdown rules a manager can sign off
Write the rules in plain words and get a manager's signature on them before any prompt is typed. Begin with the date types.
Where a date is a safety date, which many places print as "use by" on chilled meat, fish and ready meals, treat it as a hard stop: nothing is sold after it. A quality date such as "best before" is about taste and texture, and what you may do after it depends on the rules where you trade, so this routine only marks down before the date and never tries to sell past it. Decide too whether use-by items may be sold until close on the date itself or are pulled the day before. The aisle below uses "sold until close, pulled at close", which is a choice to check with your food-safety adviser, not a given.
Days left counts the trading days you can still sell the item, including today and the date on the pack. A pack dated Friday, checked on Wednesday, has three days left, and closed days don't count. Surplus is units on hand minus (average daily sales multiplied by days left): the number you expect to be left at the end. Only surplus units get marked down. Marking every unit gives margin away on those that would have sold anyway, while moving the surplus into a reduced bay leaves the rest at full price.
| Days left | Markdown on surplus units |
|---|---|
| 5 or more | Hold the price; flag the line for tomorrow |
| 4 | 15% off |
| 3 | 25% off |
| 2 | 40% off |
| 1 (last trading day) | 60% off; 75% off from 5 pm; use-by items pulled at close |
Add a price floor of 50% of unit cost. That number is mine, picked to start a discussion, and below it a manager decides. Allow one step per line per day. A manager approves the list each morning, and nobody on the shop floor changes a price on their own.
One aisle worked through: the chilled dairy and ready-meal bay
Illustrative figures for a Tuesday morning in a chilled bay of ten lines, after the restricted flag has removed anything age-limited. "Cost at risk" is surplus units multiplied by unit cost: what you would lose if they were binned.
| Line | Units | Days left | Sold per day | Surplus | Step today | Reduced price | Cost at risk |
|---|---|---|---|---|---|---|---|
| Natural yoghurt 500 g (best before) | 36 | 4 | 5 | 16 | 15% | $1.36 | $12.48 |
| Fresh filled pasta 250 g (use by) | 18 | 3 | 4 | 6 | 25% | $2.10 | $7.80 |
| Chicken curry ready meal (use by) | 12 | 2 | 5 | 2 | 40% | $2.70 | $4.20 |
| Hummus 200 g (use by) | 24 | 5 | 4 | 4 | Hold | $1.90 | Watch |
| Cheddar block 350 g (best before) | 20 | 12 | 3 | None | None | $4.20 | None |
| Sliced ham 120 g (use by) | 15 | 2 | 6 | 3 | 40% | $1.56 | $3.60 |
| Fresh orange juice 1 L (use by) | 10 | 1 | 3 | 7 | 60% | $1.40 | $11.20 |
| Cream 300 ml (use by) | 20 | 3 | 4 | 8 | 25% | $1.50 | $7.60 |
| Mixed-berry yoghurt 4-pack (best before) | 16 | 2 | 3 | 10 | 40% | $1.44 | $11.00 |
| Plant-based milk 1 L, chilled (best before) | 14 | 6 | 2 | 2 | Hold | $2.10 | Watch |
Seven lines get a markdown, covering 52 surplus units with $57.88 of cost at risk. Hummus and plant milk have a small surplus but too many days left, so they are held and flagged for tomorrow. Cheddar has no surplus at all, since 12 days at 3 a day is more than the 20 on hand. The orange juice drops to $0.88 after 5 pm, which stays above its $0.80 floor.
The markdown prompt for the chilled bay
You are helping a grocery store manager set markdowns for short-dated chilled stock.
I will paste a CSV with these columns: sku, description, date_type, units_on_hand,
avg_daily_units, days_left, unit_cost, shelf_price, restricted.
Definitions: days_left counts the trading days left to sell the item, including today and
including the date on the pack (a pack dated Friday, checked on Wednesday, has 3 days left).
surplus = units_on_hand minus (avg_daily_units x days_left).
Rules:
1. Skip any row where restricted is Y, and say you skipped it.
2. If surplus is 0 or less, do nothing.
3. If days_left is 5 or more, hold the price and flag the line for tomorrow.
4. Otherwise apply this step to the surplus units only: 4 days 15% off, 3 days 25%,
2 days 40%, 1 day 60% (75% from 5 pm).
5. Never go below 50% of unit_cost. If a step would, say so and leave the price for a manager.
6. Do not suggest bundles, multi-buys or any other promotion. Do not suggest selling any
use_by item after its date.
Return a table: sku, description, surplus, step, new_price, cost_at_risk, note. Then list every
assumption you made and every row you were unsure about.
What came back, and what I fixed
The first pass, before the days-left definition and the last rule were added, got four lines wrong or odd. These are illustrative, but the errors are the usual ones:
| Line | First-pass answer | Problem |
|---|---|---|
| Sliced ham | 60% off, $1.04, 3 units | Counted the use-by date as a day it couldn't sell, so it saw 1 day left, not 2. The step should be 40%, $1.56. |
| Hummus | 25% off, $1.43, 4 units | Five days left, so the ladder says hold and flag for tomorrow. |
| Natural yoghurt | Added "bundle: 2 for $2.50" | A promotion that isn't in the rules. |
| Orange juice | 60% off at $1.40, 75% off from 5 pm at $0.88 | Correct; $0.88 clears the $0.80 floor. |
The fixes are one sentence defining days left and one banning promotions. Re-running should give the table above. The "list your assumptions" line earns its place too: an off-by-one error shows up in the assumptions before it shows up in a price, which is early enough to catch it before a sticker is printed.
Now compare acting today with waiting. If every surplus unit sells at today's step, the seven lines recover $80.64 against $57.88 of cost. If instead everything waits for the 60% step on the last day, they recover $49.48, which is $31.16 less and below cost. Binned stock recovers nothing. Acting early pays only if the reduced units really sell, and some shoppers who would have paid full price will pick the cheaper unit. That leak is what the two-week check below measures.
Category rules: bread, bagged salad and long-life chilled
One ladder doesn't suit every category, because what drives the loss differs. Write a short rule for each category you add to the trial, and give the AI that rule in place of the general one.
| Category | What drives the loss | Rule style |
|---|---|---|
| Bread and other in-store bakery | Time of day, not the date: it is stale tomorrow | Hourly steps: 30% off from 3 pm, 50% from 5 pm, the last few at 75% half an hour before close. Bake less tomorrow by tracking what was left. |
| Bagged salad and fresh herbs | Quality falls visibly before the printed date | Start the ladder a day earlier than the date suggests, check by eye, and pull wilting stock at any price. |
| Long-life chilled, such as hard cheese | Weeks of life, so a late surplus is easy to move | Mark down only inside the last 5 days, and test bundles and multi-buys here before deep cuts. |
| Fresh meat and fish | Safety dates and cold-chain risk | Last-day reductions only if your policy and your food-safety adviser allow them. Never alter a date label. |
A bakery sum shows the difference. Say 40 loaves were baked at a cost of $0.55 each and a shelf price of $2.00. At 3 pm, 22 remain, and the shop sells about four an hour until 7 pm, so about 16 more go at full price and 6 are left over. Those 6 cost $3.30. If they go at $1.40 from 3 pm and $1.00 from 5 pm, even the cheaper outcome brings in $6.00, which beats the bin. The bigger win is tomorrow: bake 34 loaves instead of 40, and the surplus shrinks without a sticker.
Edge cases to hand the AI before you trust the rules
Paste these in as test rows, confirm the output matches what you'd do by hand, then run the real list.
- One day left and 40 units. The ladder says 60%, then 75% from 5 pm, but the floor may block the second step. The AI should leave that price for a manager, not break the floor.
- A line already on promotion. It must not stack a markdown on top of a shelf deal.
- A multi-buy price on the shelf (two for a set price). Markdowns on one unit of a multi-buy confuse the till; flag the line for a manager.
- A use-by date already passed. The answer is to pull it, never to price it.
- A public holiday. Closed days aren't trading days, so they shouldn't count towards days left.
- Less than a week of sales history. There is no run rate to trust, so a manager sets the price by hand.
- A seasonal spike, such as a long weekend that lifts sales of ready meals. A manager overrides the average daily sales.
Stickers, tills and staff minutes
Use one sticker colour per step so staff can check the bay at a glance, and put each sticker where it won't cover the date, the allergen text or the barcode. A covered barcode rings up the full price, which turns a markdown into a complaint at the till. Before the first morning, scan one sticker of each colour through a till to confirm it rings the reduced price. If your till can't take a price override or a markdown barcode, stop there and ask your supplier, because the routine isn't practical without one.
Time matters too. At about six seconds a sticker (my assumption, so time your own), 120 stickers take 12 minutes a pass, and two passes a day cost around 24 minutes, about $6 a day at $15 an hour. That cost belongs in the check below. If you have electronic shelf labels, the same rules can drive them, but keep a person approving the batch, and paper stickers are easier for a one-aisle trial. The tutorial on a supermarket AI poster maker in Canva covers shelf-edge signs if you want a neat "reduced to clear" bay. If a sign shows a "was" price beside the new one, the "was" price should be one the item genuinely sold at. Rules on price comparisons differ by place, so ask your adviser before you print any.
A morning routine that fits inside an hour
Keep the standing rules as the instructions of a project in your assistant (ChatGPT and Claude both offer projects), so every morning starts from the same wording and nobody rewrites the prompt. Then the day runs like this:
- 7:30. Export the expiry list from goods-in records and the till's item report. About 10 minutes.
- 7:40. Paste it into the assistant, and read the assumptions list before the table. About 5 minutes.
- 7:45. The manager checks the table against the rules, fixes odd lines and signs the printed list. About 10 minutes.
- 8:00. Staff sticker the reduced bay and move the surplus units into it. About 15 to 20 minutes.
- 3 pm. Second pass for lines that moved to a new step, and the bakery step.
- 5 pm. The last-day 75% step. Thirty minutes before close, pull any use-by items left and log each with its reason.
- Friday. Ask the assistant to summarise the week's waste log: top five lines by cost, reasons, and any line that appears twice.
The AI step is five minutes of a morning that takes about 45. Most of the time goes on checking and on the shop floor, which is as it should be.
Reading the first two weeks: waste, margin and shopper habits
Record the same measures for the four weeks before the trial and for each week of it. These are made-up figures, shown to teach the reading, not results to expect.
| Measure | 4-week baseline | Week 1 | Week 2 |
|---|---|---|---|
| Bay sales | $2,400 | $2,455 | $2,470 |
| Gross margin on sales | 31.5% | 30.3% | 30.4% |
| Gross profit | $756 | $744 | $751 |
| Waste at cost | $210 | $148 | $131 |
| Profit after waste | $546 | $596 | $620 |
| Sticker labour | $0 | $46 (26 minutes a day) | $39 (22 minutes a day) |
| Profit after waste and labour | $546 | $550 | $581 |
| Full-price units sold per day | 412 | 405 | 398 |
Waste fell and margin percentage fell with it, which is what you'd expect when stock sells for less. After labour, week 1 barely beat the baseline ($4 better) and week 2 was $35 better. The number to watch is the last row: full-price units are down 1.7% then 3.4%. If it keeps sliding, shoppers are learning to wait for the reduced bay, and the fix is to delay the early steps or make them shallower. If it holds, widen the trial to the next aisle.
Check against a control aisle if you can: leave one similar bay on the old routine for the same two weeks, so a busy week or a supplier problem shows up in both. The tutorial on a weekly retail KPI sheet in Excel shows how to keep these rows from your till data.
Tuning the ladder from a clearing table
After the two weeks, count for each step how many units you put on the reduced bay and how many sold at that step. Unsold units carry over, so a unit can appear at more than one step. These figures are made up, to show the reading:
| Step | Units out at this step | Sold at this step | Cleared |
|---|---|---|---|
| 15% off | 34 | 9 | 26% |
| 25% off | 40 | 18 | 45% |
| 40% off | 55 | 41 | 75% |
| 60% or 75% off | 30 | 27 | 90% |
A step that clears under a third, like the 15% one here, mostly costs sticker minutes and nudges full-price shoppers towards the reduced bay. Either skip it, or move it later. The 40% step clears three-quarters, which suggests that is where these shoppers respond. The last step clears 90%, and the remaining 10% is real waste, so look at the ordering of those lines. Change one step at a time and give each change a full week, or you won't know which change did what.
Stock that still won't sell, and the cheaper fix upstream
After the last step, you have three honest options: pull it, donate it where the rules and your arrangements allow, or bin it. Log each unit with the reason (damaged, wrong forecast, display overstock) so the waste log tells you what to change. Where a donation partner takes short-dated food, agree handling and cut-off times with them first, so you never donate stock that is past a safety date.
The cheaper fix is upstream. A line that needs a markdown every week is a line you ordered too much of. The tutorial on setting reorder points with AI covers sizing orders. Use the weekly waste log to find the three lines that cost you most, and fix those orders first.
Grocery markdown questions answered
Can AI change shelf prices without a person approving them?
It can if your systems allow it, but I wouldn't switch that on for a first run. Keep a manager approving each morning's list, because the AI sees only your file and can't spot a damaged pack, a missing date or a promotion already running. After several clean weeks you can decide what, if anything, to automate.
How deep should the first markdown be?
There is no universal figure. Start shallow while several days remain, for example 15% to 25%, and deepen as the date nears, then compare waste and margin over two weeks. The ladder above is a starting guess for you to test on one aisle, not a benchmark and not a promise of results.
Does the AI know a product's expiry date?
No. It knows only what you paste in. The ordinary barcode doesn't carry a date, so the list has to come from goods-in checks, batch records or a daily shelf walk. If a date is wrong or missing in your file, the AI will price the line on bad information with complete confidence, so check the file first.
What about alcohol and other age-restricted goods?
Keep them out of the export. Their pricing and promotion rules are set separately, and an AI suggestion could breach them. Handle those lines by hand under whatever rules apply to your licence, and keep this routine to food and household goods that carry no age limit.
Further reads
- How Can AI Help a Small Supermarket? Pricing, Stock and Posters — The wider pricing, stock and signage picture for a small supermarket.
- AI for Convenience Stores: A Weekly Routine for Reorders and Rotas — A weekly routine for reorders, prices and rotas.
- Coffee Shop Inventory With AI: Ordering Milk, Beans and Pastries — Cutting short-dated waste on milk and pastries.
- Florist Inventory Management: Use AI to Track Stems and Waste — Waste tracking for another perishable product.
- Can AI Help a Convenience Store Drive Sales? Where to Start — Where else AI can lift sales in a small store.
- How AI Helps Marketing in a Small Supermarket: 5 Jobs and the Limits — Five marketing jobs for a small supermarket, with limits.
- How to Forecast Covers and Cut Food Waste With AI — The same waste logic applied to a restaurant kitchen.
- AI in Food Retail: Jobs a Deli or Farm Shop Can Hand Over First — Six jobs a deli or farm shop can hand to AI, the hours each saves, the check that stays with staff, and the order to start in.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Retail Insight's WasteInsight product page, read in October 2026; the author's worked arithmetic. All store figures are illustrative, and date rules vary by place, so confirm with your food-safety adviser.