Food cost does not usually blow up because you started buying more expensive product. It blows up because the product you already buy quietly got more expensive, and nobody caught it. Case pack drops from a 6/10 to a 6/9 count. A protein moves from indexed to market. A fuel surcharge shows up during a spike and never comes off. The center-of-plate item on your top-selling entree gets substituted for a slightly different SKU that is 7 percent higher per pound. None of these show up as a headline. They show up as a food cost line that is 60 basis points higher than last quarter for reasons nobody can quite explain.

At Hana Group, running a $36M portfolio across 21 franchise units and four retail hosts, I watched this happen at scale. Twenty-one units. Two broadline suppliers, one primary and one back-up. Restaurant Depot as the third-tier pickup vendor. Two produce specialty houses. A protein program on market pricing. If you do not audit this system on a schedule, drift is not a risk. Drift is the base case.

Here is the audit that catches it, the threshold that matters, and the recovery pattern I have seen hold across three different operations.

Why broadline drift is structural, not accidental

Sysco, US Foods, and Performance Food Group are excellent operators. They are also companies with quarterly earnings targets and a pricing team whose job is to expand margin on the accounts that are not watching. That is not a moral failing. It is how the industry works.

There are four mechanisms that produce drift, and every audit has to look at all four:

  • Market-based pricing on proteins. Anything not on contract moves with the underlying market, plus a distributor margin. When the underlying market softens, the distributor margin often quietly expands to hold their landed price where it was. You paid $4.20 per pound in March when the market was $3.10. Market is now $2.80 and you are paying $4.05. That gap is not the market. That gap is the distributor.
  • Unit-of-measure games and case-pack shrink. A case that used to hold 6 x 10 oz portions now holds 6 x 9 oz portions. The item description stays similar. Your order guide still says "case." Per-case price drops 40 cents. Per-ounce price rises 8 percent. Nobody flags it because everyone is ordering by the case.
  • Substitution slippage. An item goes out of stock. The rep substitutes a "comparable" SKU. Comparable in cuisine, not in per-unit cost. The substitution shows up on the invoice, gets received, gets used. Nobody compares it back to the original.
  • Fuel and delivery surcharges. Introduced during a diesel spike. Never removed after the spike resolved. If your invoices have a fuel surcharge line that has not moved in six quarters, that is not a fuel surcharge. That is a permanent price increase you agreed to by not noticing.

None of these are hidden. All of them are visible on the invoice line. The audit just makes you look.

The distributor's pricing team runs on a schedule. If your audit does not, they win by default. This is not a negotiation problem. It is a cadence problem.

The 90-day audit method

The whole audit is one operator, one day, if the data is clean. If the data is not clean, cleaning it takes another day and it is worth every hour.

Step 1: Pull the last 90 days of invoice line detail

Not the summary report. Not the top-20 SKU report. The full invoice line export, from every broadline supplier and every specialty vendor over the threshold. You need seven fields at minimum: SKU, item description, unit of measure, case size, quantity ordered, extended cost, delivery date. Sysco calls this a "purchase history detail." US Foods calls it a "customer purchase history." PFG calls it "purchase analytics." All three can export it to CSV. Restaurant Depot is harder because you buy on the floor, so you use scanned receipts and a spreadsheet.

Step 2: Normalize every line to a per-unit price

This is the step people skip and it is the step that makes the whole audit work. Divide extended cost by actual pounds, ounces, each, or gallons. Not by case. A case of chicken breast at $84.50 tells you nothing. A per-pound cost of $3.38 tells you everything, because you can compare it to last quarter, to the market, and to your back-up supplier.

You will find, the first time you do this, that two or three items on your top-20 list have moved case size without you noticing. That is normal. Add a column called "per-unit price movement, current vs. audit start."

Step 3: Compare against contract or opening period

For every SKU, you need a reference price. There are two kinds:

  1. Contracted items: the price on the contract sheet or on your custom price file. If the invoice per-unit price is higher than the contract, that is a contract violation and it comes back at full recovery.
  2. Market-based items: the per-unit price on your first invoice inside the 90-day audit window, plus a market benchmark where one exists (USDA reports on proteins, Urner Barry on shell egg and boxed beef, retail scanner data on produce as a rough proxy).

Step 4: Flag anything above 4 percent that is not indexed

Four percent is the threshold. Not two percent, not five percent. Below four you are inside the noise band of weekly repricing. Above four is either a contract violation, a substitution, a case-pack change, or the distributor holding a price while the underlying market moved. Every one of those is worth a written challenge.

Per-unit price movement, 47 SKUs, 90-day window +10% +6% +4% +2% 0% -2% -4% 4% CHALLENGE LINE Twelve SKUs flagged above the 4% threshold. Thirty-five inside noise band. Recovery focus is red.

Fig. 1 · Every SKU on one chart. Anything above the dashed line is a written challenge.

Step 5: Send it back in writing, with the invoice line as evidence

Not a phone call. Not a conversation on the delivery. A written email to the supplier rep and their district sales manager, with the SKU, the description, the per-unit price at the audit start, the per-unit price now, the percent movement, and the ask. The ask is either a credit back on quantity purchased during the drift period, a price rollback going forward, or both. On contracted items the ask is nearly always both. On market items it is a rollback going forward, framed against the index.

What the last audit turned up

Recent audit across a 4-unit operation, 90-day window, roughly $340K of purchases in scope. The audit covered 47 unique SKUs across two broadline vendors and one specialty produce house.

Twelve SKUs came back above the 4 percent threshold. The pattern was almost cliche:

  • Three protein SKUs on market pricing where the distributor had held the price flat while the USDA index dropped 6 to 9 percent. Recovery: rollback going forward, roughly $780 per unit per month.
  • Two chicken thigh SKUs where the case pack had shrunk from 40 lb to 36 lb and the case price had dropped only 3 percent instead of the 10 percent the weight change implied. Recovery: switched to the back-up supplier, roughly $410 per unit per month.
  • Four dry goods and paper SKUs that were contracted at a fixed price but had been invoiced at "current list" for two months because the contract had rolled and nobody had re-signed. Recovery: full credit on the delta, roughly $520 per unit per month.
  • One fuel surcharge line that had been in place since a diesel spike 14 months earlier. Recovery: removed, roughly $190 per unit per month.

Total recovery: roughly $1,900 per unit per month, or about $22,800 per unit per year. On a $2M unit doing 32 percent food cost, that is 3.6 percent of food cost, or right around one full point of contribution margin.

A worked example on one SKU

Boneless skinless chicken thigh, 40 lb case at audit start, $2.85 per pound landed. Ninety days later: 36 lb case, $2.98 per case-pound listed. Actual per-pound cost recalculated: (36 x $2.98) / 40 = wait, do it the correct way. Case price is $107.28. Divide by 36 lb of actual product. Real per-pound cost is $2.98. Movement is +4.6 percent. Above threshold. Written challenge with the USDA broiler index attached showing a soft market. Distributor rolled the per-pound price back to $2.86 going forward and issued a $340 credit on the two months of drift. Recovery on one SKU, one location, first quarter: about $80 per month.

The 4 percent threshold is not arbitrary. It is the point where the recovery is worth more than the operator time to write the challenge. Below that, log it, watch it, do not chase.

Where the audit usually fails

A few things I have watched go wrong:

  1. The audit gets assigned to the chef or the general manager instead of the operator. Chefs are excellent at cooking and terrible at spreadsheets. General managers are running a restaurant. This is an area director or fractional operator job. It takes one focused day, not an hour a week for a month.
  2. No comparison to the reference price. People pull the invoice detail, look at the current per-unit cost, and try to decide "does this look right?" You need the delta against a fixed reference. Instinct is not a benchmark.
  3. The recovery does not get calendared. Distributor rep agrees to a rollback. Rollback shows up on next month's invoices for two weeks and then quietly reverts. If you are not spot-checking 30 and 60 days after the recovery, half of it walks back.
  4. The audit stops after the first pass. The whole point is the cadence. First audit: 12 drifts. Second audit 90 days later: 4 drifts. Third audit: 2. Then the distributor rep starts protecting your account because the reputation of your account is that it gets checked.

What the vendor scorecard adds

Once you have run the audit twice, you have data. Take the data and turn it into a one-page vendor scorecard that goes to every broadline rep every quarter. Four rows: number of SKUs above threshold, average movement above threshold, credits promised versus credits received, response time on written challenge. That is it. Distribute it to the rep and to the district sales manager. Copy the specialist on proteins if you use one.

The scorecard does something the audit alone cannot. It shifts the rep's internal incentive. Their district manager now sees your account as one that measures. Reps have a limited number of accounts they can defend hard. The measured accounts get defended. The unmeasured accounts get the pricing team's expansion program. This is not adversarial. It is a system responding to the signal you send.

The point

Supplier price drift is not caused by a bad supplier or a lazy operator. It is caused by the absence of a cadence. Broadline distributors re-price on a rolling schedule. Market items move weekly. Case packs change quarterly. Fuel surcharges outlive fuel spikes. If your operating rhythm does not include a 90-day audit with a 4 percent threshold and a written challenge, you are giving back one point of margin a year to a process nobody is running against you on purpose.

Pull the last 90 days of invoice detail this week. Normalize to per-unit. Find the ones that moved. Write the emails. Track the recoveries. Calendar the next audit for 90 days from today, and put a named person on it. That is the whole job. It is not clever and it is not fast, and it is worth about $22,800 per unit per year.