Restaurant Menu Price Increase: Test Each Change by Dish With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Restaurant Menu Price Increase: Test Each Change by Dish With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Restaurant Menu Price Increase: Test Each Change by Dish With AI.

Raise prices only on the dishes whose plate cost has risen, in small steps, two to four dishes at a time, and leave comparable dishes alone as a control. Log every change, then after three to four weeks give your POS item sales to an AI and ask it to compare each dish's share of sales and profit.

The AI does the sums; it cannot judge cause. It will not know that Tuesday was quiet or that the lamb ran out twice, which is why the test rests on shares of sales, untouched control dishes and a rule you write before you see the results. The method is for cost-driven rises only; deciding which dishes to promote or drop is a different job, covered in AI menu engineering.

Follow me on Instagram@sagnikteaches

Start with what each dish now costs you every week

A price rise should answer a number, not a feeling. For each dish you need three figures: the plate cost when you last set the price, the plate cost today, and how many plates you sell in a normal week. If you have no plate costs yet, build them first with a recipe costing spreadsheet; everything below depends on them being roughly right.

Connect on LinkedInSagnik Bhattacharya

The simplest rule I know for a cost-driven rise is dollar pass-through: new price equals current price plus the rise in plate cost, rounded up to the next 50 cents. It keeps the gross profit on each plate whole, even though the percentage drifts. Restoring the old food-cost percentage instead would push the rib-eye below to about $38.50, a rise of roughly 13% on a dish guests already treat as a splurge. That is exactly the size of step people notice.

Subscribe on YouTube@sagnikteaches

The worked example is a 56-seat bistro with eight popular mains; every figure from here on is illustrative.

DishSold a weekPricePlate cost (then → now)Food cost (then → now)Extra cost a weekPass-through price
Rib-eye steak34$34.00$12.90 → $14.6037.9% → 42.9%$57.80$36.00
House burger62$17.00$4.90 → $5.6028.8% → 32.9%$43.40$18.00
Fish and chips58$18.50$5.00 → $5.6527.0% → 30.5%$37.70$19.50
Chicken thigh traybake46$19.50$5.20 → $5.9526.7% → 30.5%$34.50$20.50
Slow-cooked lamb shoulder22$27.00$9.20 → $10.4034.1% → 38.5%$26.40$28.50
Pan-fried hake28$24.00$7.30 → $8.1030.4% → 33.8%$22.40$25.00
Mushroom risotto31$16.00$3.40 → $3.7021.3% → 23.1%$9.30$16.50
Roast cauliflower steak19$15.00$2.80 → $2.9518.7% → 19.7%$2.85$15.50

The eight dishes are absorbing $234.35 a week between them, roughly $12,000 a year if nothing changes. The leak is also uneven: the rib-eye costs you $57.80 a week and the cauliflower $2.85. A flat 5% across the menu would over-charge the dishes that barely moved and under-recover the ones that jumped.

Let the AI do the arithmetic, then check it

Paste the five columns you already have (dish, price, cost then, cost now, plates a week) into ChatGPT, Claude or Gemini and give it the rule in words. Telling it what not to do matters as much as the task.

I run a restaurant and need to pass cost rises on to menu prices.
For every dish in the table below:
1. Extra cost per plate = plate cost now minus plate cost then.
2. Extra cost per week = extra cost per plate x plates sold a week.
3. Pass-through price = current price + extra cost per plate, rounded UP to the next 50 cents.
4. Percentage rise on the current price, one decimal place.
Rank the dishes by extra cost per week and show every calculation so I can check it.
Do not suggest dropping or promoting dishes and do not change any figure I give you.

Dish | Price | Cost then | Cost now | Plates a week
Rib-eye steak | 34.00 | 12.90 | 14.60 | 34
House burger | 17.00 | 4.90 | 5.60 | 62
(...the other six dishes...)

A typical first answer looks like this (illustrative, abridged):

Rank | Dish             | Extra/plate | Extra/week | Pass-through | Rise
1    | Rib-eye steak    | 1.70        | 57.80      | 36.00        | +5.9%
2    | House burger     | 0.70        | 41.40      | 18.00        | +5.9%
3    | Fish and chips   | 0.65        | 37.70      | 19.50        | +5.4%
...
8    | Cauliflower steak| 0.15        | 2.85       | 15.50        | +3.3%
Total extra cost per week: $232.35

Three things to fix in that output. The burger line is wrong: 62 plates at 70 cents is $43.40, not $41.40, so the total is $2 short of the true $234.35. Language models can slip on multiplication, so recalculate three lines on a calculator, or ask for the answer as a spreadsheet formula you can fill down. Second, a 15-cent rise on the cauliflower does not justify a 50-cent price change; absorb it. Third, the AI has no idea how your menu reads, so look at every new price against its neighbours. A burger that now costs more than a pasta dish guests see as the same tier may be wrong for reasons the sheet cannot see.

Choose a first wave: money at stake, spread across the menu

Rank by extra cost a week, then pick the first wave with these rules rather than simply taking the top four.

  • Mix volumes. One high seller, one mid seller, one premium dish that sells slowly. If you only move the best sellers you will not learn how the slow premium dishes react.
  • Watch close substitutes. If two dishes guests compare, such as two steaks, both rise, judge them as one group later. If only one rises, expect some guests to switch to the other.
  • Keep three or four controls. Comparable dishes with the same service pattern, left alone, are what separate a price effect from a bad week. Without them you are guessing.
  • Cap the step. I would use about 6% as a ceiling for one move. If the pass-through needs more, take 6% now and plan a second step.
  • Avoid disrupted weeks. No public holidays, private events, new menu launches or promotions inside the test window.

In the bistro, the first wave is the rib-eye ($34.00 to $36.00), the burger ($17.00 to $18.00), the chicken traybake ($19.50 to $20.50) and the lamb ($27.00 to $28.50). The controls are fish and chips, the hake, the risotto and the cauliflower. Fish and chips is the third-biggest leak at $37.70 a week, so holding it back for the first four weeks costs about $150. That is the price of a clean read, and it is usually worth paying. The second wave then takes fish and chips to $19.50 and the hake to $25.00.

The price-change log an AI can read back to you

The log is the second input to every read-out. Without it, the AI sees sales moving but has no idea what you changed or when. Keep it in a spreadsheet with one row per dish per change.

WhenDishOld → newPlate cost nowStaff toldPOS updatedPrinted and online menus
Wave 1, MonRib-eye steak$34.00 → $36.00$14.60Pre-shift, MonMon 9 amPrinted Fri; QR Mon
Wave 1, MonHouse burger$17.00 → $18.00$5.60Pre-shift, MonMon 9 amPrinted Fri; QR Mon
Wave 1, MonChicken traybake$19.50 → $20.50$5.95Pre-shift, MonMon 9 amPrinted Fri; QR Mon
Wave 1, MonLamb shoulder$27.00 → $28.50$10.40Pre-shift, MonMon 9 amPrinted Fri; QR Mon

Look at the last column. The printed menus changed four days after the POS, which means guests on Monday to Thursday read one price and were charged another. A log makes that gap visible. It also gives the AI something to check. You can paste in a messy note from the kitchen and ask for a tidy row:

Turn these notes into rows for my price-change log. Columns: when, dish, old price, new price,
plate cost now, who was told, POS updated, printed and online menus updated.
If a detail is missing, write MISSING rather than guessing. Then list anything that looks inconsistent.

Notes: "burger up $1 from monday. menus reprinted fri. qr done mon. rib eye 36 now. told staff at pre-shift."

A good answer fills in four columns for the burger, writes MISSING for the plate cost, and flags that printed menus lag the POS by four days. If it flags nothing, your prompt was too loose. One naming rule belongs here too. In Square's item sales report, renaming an item makes it a separate entry, so a dish renamed "House burger (new price)" would split its history in two. Keep the dish name identical across every change and record the price in the log. In Toast's product mix report there is an "aggregate data by name" setting that merges items sharing a name across menus, which helps when a dish sits on both a lunch and a dinner menu.

Export the numbers: same weekdays, three weeks before and four after

The AI reads whatever you hand it, so hand it the right slice. You want plates sold and net sales for every dish, by week, for three weeks before the change and four weeks after, with the same weekdays in each window. A week that includes a public holiday against one that does not is not a fair comparison.

  • Toast: Toast's help describes the product mix report under Reports, Menus, Product mix. It can compare two periods side by side, has a "% of total" switch, and exports to Excel or CSV. If you have entered item costs in Menu manager, it can also show cost of goods sold, gross profit and gross margin columns, which saves a join in your sheet. Toast's product mix guide lists the steps.
  • Square: Square's help points to Reports, Custom, Custom item report in the Dashboard, showing quantity sold, gross sales and net sales, with Export in the top right (CSV or Excel). Its item sales report guide has the details.
  • Anything else: ask for item sales by week, or by day if you can get it. Most systems offer some form of item sales export, though the report name differs.

Add what the POS cannot know in a small notes column: evenings a dish was off, private hires, weather you would otherwise forget, a new special that competes with a moved dish. This note is the difference between a believable read-out and a confident wrong one, as the lamb shows below. Item sales contain no guest details, so there is little privacy risk. Delete employee names if your report carries them.

Reading the results: four weeks after the first wave

Here is the bistro's wave one, with plates sold a week averaged over the three weeks before and the four weeks after. Gross profit uses today's plate cost in both periods; otherwise the cost rise itself makes the "before" column look better than it was and the price rise looks like a bigger win than it is.

DishPricePlates a weekShare of mainsGross profit a week
Rib-eye steak$34.00 → $36.0034 → 3311.3% → 11.2%$659.60 → $706.20
House burger$17.00 → $18.0062 → 6020.7% → 20.3%$706.80 → $744.00
Chicken traybake$19.50 → $20.5046 → 4815.3% → 16.3%$623.30 → $698.40
Lamb shoulder$27.00 → $28.5022 → 187.3% → 6.1%$365.20 → $325.80
Fish and chips (control)$18.5058 → 5819.3% → 19.7%$745.30 → $745.30
Pan-fried hake (control)$24.0028 → 279.3% → 9.2%$445.20 → $429.30
Mushroom risotto (control)$16.0031 → 3110.3% → 10.5%$381.30 → $381.30
Cauliflower steak (control)$15.0019 → 206.3% → 6.8%$228.95 → $241.00

Total mains fell from 300 plates a week to 295, so raw unit counts overstate every drop. Share of mains (a dish's plates divided by all mains plates in the same period) removes that drift. The four controls moved by at most one plate and half a point of share. That is your noise floor: in this bistro, anything smaller than about two plates or one point of share is not evidence of anything.

The prompt that produces this view is short, and the kitchen note matters.

I raised prices on four dishes and left four unchanged as controls. Attached: plates sold and net sales
per dish per week (3 weeks before, 4 weeks after), my price-change log and today's plate costs.
1. Work out each dish's share of all mains plates in each period.
2. Work out gross profit a week as plates x (price - plate cost), using TODAY'S plate cost in both periods.
3. Show moved dishes first, then controls, before and after, in one table.
4. Say which changes are bigger than the week-to-week movement of the controls.
Do not explain causes unless I give them to you.
Kitchen note: lamb was off on two evenings in week 2 of the after period.

A first read-out might conclude (illustrative): "Rib-eye, burger and chicken added $158.90 a week between them. Lamb share fell 1.2 points and gross profit fell $39.40. Chicken share rose about 1 point despite its price rise, so it appears price-insensitive: consider a further increase. Recommendation: reverse the lamb rise."

I would not act on three sentences of that.

  • The lamb verdict is too quick. Lamb sold 19, 15, 19 and 19 plates in the four weeks; the 15 is the week with two evenings off. Without that week it averages 19, three below baseline. That is still a dip, but a smaller and cleaner one. Hold the new price for three more weeks with lamb always on, then decide.
  • The chicken conclusion is a leap. Chicken sits beside the burger and rib-eye, which both rose, so some guests probably traded down to it. Judge the group: the four moved dishes together are up $119.50 a week, about three-quarters of the $162.10 a week the cost rise was taking from them.
  • The AI may stray into causes. If a read-out says sales dipped "due to weather" or "a local event" and you gave it neither, strike the sentence. Plausible explanations the AI invented are worse than none.
  • Check the cost basis. If a before figure uses the old plate cost, the gains look larger than they are. Recompute one dish by hand.

Rules to write down before the results come in

Agree the decision rule while you cannot yet see the numbers, or you will bend it to the result you hoped for. These thresholds are my starting points. Set yours from the weekly swings of your own control dishes.

What the numbers showWhat you do
Share down by less than 1 point and gross profit a week upKeep the new price and queue the dish's next step if its cost is still ahead of its price
Share down by 1 point or more, or the window was disrupted (stock-out, event, promotion)Hold the price for three more clean weeks and re-read
Share down by 1 point or more and gross profit down in two clean weeks runningTake half the step back, or reverse it, and look at portion size or the dish itself
Change of two plates a week or fewer on a dish selling under 30Ignore it; it is inside the noise

Applied to the bistro: rib-eye, burger and chicken are keeps. Lamb is a hold, because week 2 was disrupted. If lamb is still three plates down after three more full weeks, I would take it to $28.00 rather than reverse it, since $28.00 still recovers most of the $1.20 plate-cost rise.

Telling guests: menu wording, floor script and online listings

For steps under about 6%, I change the numbers and add nothing. A paragraph of explanation draws attention to a rise most guests would not have registered. If you want some wording, keep it factual and short. Ask an AI for options, then edit hard.

Write three short ways to tell restaurant guests that a few menu prices have gone up by about $1 to $2.
Factual, no apology, no blame, no promises about future prices. One for the menu footer (under 15 words),
one for an email to regulars (under 60 words, use [first name]), one for a server to say if asked (under 30 words).

A typical first draft reads: "Due to unprecedented supplier price rises, we have been forced to increase some prices. We promise this will be our last increase this year." Fix it three ways. Delete "unprecedented" and "forced", which sound like a plea. Delete the promise, because you cannot keep it if your costs move again. Replace the rest with the plain fact: "Some prices have changed as our ingredient costs have risen. Thank you for eating with us." For staff, the script is one sentence they can say without sounding defensive, such as "A few dishes moved by a dollar or two because our ingredient costs went up; the new menu has everything."

Whatever you say, change every surface on the same day: the POS, printed menus, the QR menu, your website, Google listings and any ordering page. Delivery apps are their own question because commission changes the sum; see pricing on delivery apps. If you reprint menus often, a Canva menu template makes same-day swaps realistic. Check any rules on displaying prices that apply to you, and treat a mismatch between menu and bill as a complaint waiting to happen.

What muddies a price test, and how each one shows up

  • Printed menus lag the POS. It shows up as "why was I charged $18?" at the table and a quiet fall in the dish's plates the week the gap existed. The log column catches it.
  • A portion or recipe change at the same time. Gross profit moves for a reason that has nothing to do with price. Log recipe changes in the same sheet and start the test clock again.
  • A promotion landing in the window. A two-for-one dessert offer shifts shares across the whole menu. Postpone the test, or record the offer in the notes column so the AI does not read the shift as a price effect.
  • A dish renamed to carry its price. In Square's reports the renamed item becomes a separate entry, so the "before" and "after" no longer sit on one row.
  • Too few plates. A dish selling 12 a week moves by three on a normal week. Treat it as part of a group, or give it a longer window.

A four-week routine you can repeat for every wave

  1. Three weeks before: refresh plate costs, pick the wave and controls, and write your keep, hold and reverse rules. About an hour the first time, and 20 minutes after that.
  2. Change day: update the POS, printed and online menus together, tell staff at pre-shift, and fill in the log rows.
  3. Weeks one to four: keep the notes column honest. Do not peek daily; one weekly look at plates and shares is enough.
  4. End of week four: export, run the read-out prompt, recompute one dish by hand, apply your rules.
  5. Week five: record the decision in the log, then start wave two with the dishes you held back.

The rhythm works because each step is cheap. Most of the effort sits in the first plate-cost table; after that a wave costs two short sessions and a few minutes a week. Your supplier invoices are where the next wave comes from, which is why comparing supplier prices week by week pairs naturally with this: it flags the line that rose 9% before your plate-cost sheet does.

Questions owners ask before changing a menu price

How often can a restaurant raise menu prices?

There is no fixed rhythm. Small, cost-driven steps in waves usually go down better than one big annual jump. Re-run your plate-cost table whenever a supplier change moves a dish's cost by roughly 5% or more, and let the log and your control dishes tell you whether guests noticed the last wave before you start the next.

Should every dish go up by the same percentage?

No. Plate costs rise unevenly, so a flat percentage over-charges dishes whose cost barely moved and under-recovers the ones that jumped. Work from the extra cost per plate, pass that through in dollars, round up to your next price step, and leave dishes with tiny cost changes alone.

How long should I wait before judging a price change?

Three to four weeks of the same weekdays is a sensible minimum for dishes that sell 30 or more plates a week. Slower sellers need longer, because one or two plates either way is noise. Skip windows with holidays, private events or a dish that ran out, or note them so the AI does not treat them as normal.

Is it safe to put POS item sales into ChatGPT or Claude?

Item sales hold no guest details, so the risk is low, but remove staff names and any customer fields first. Business plans from the main vendors do not train on your content by default, and consumer plans have a model-training switch in privacy settings. Check the setting on the plan you use.

Further reads

Sources: Toast support pages (Product Mix report overview), Square support pages (item, category and modifiers sales reports), and the plate-cost and POS figures in the worked example, which are illustrative.

Want your first price-change wave planned properly?

On a 1:1 call we'll go through your plate costs and POS exports, pick the dishes to move first, and set up the log and the AI read-out so you can run each wave yourself.

Book a 1:1 call with me