The Quarterly Price Review: A Checklist for a Whole Catalogue
Checking each price file as it arrives answers one question: what changed in this file. It is the right question and it is not enough, because the failures that cost the most are not events. They are a cost that crept up 2% three times, a retail price nobody has touched in two years, a cost field that was never updated after a purchase, and a floor that was set when shipping was cheaper. None of those trip an alert. All of them show up in a review that looks at the whole catalogue on a fixed date, four times a year.
What the quarter catches that the diff cannot
A per-file diff is a comparison between two editions of one supplier's list. It is blind by construction to anything that is not in a price file: your own retail prices, your cost-to-serve, your floor, your sales mix. It is also blind to accumulation, because each comparison starts fresh.
Take a $18.40 line that moves three times in a year — 2.1%, then 1.8%, then 2.4%. Any sensible alert threshold ignores all three.
Four margin points, in $1.18 of gross profit per unit. On a line selling 90 units a quarter that is $106.20 a quarter and $424.80 a year, from a SKU nobody ever flagged. Forty lines behaving that way is real money and there is no moment at which it was noticeable. The quarterly review exists to make it noticeable, by comparing against a point four files back instead of one.
Before you start: four exports
The review is mostly arithmetic on data you already have, and it collapses if you gather the data as you go. Pull all four first, dated, into one folder:
- Products with cost and price — every variant, including the ones with an empty cost field. Those are findings, not gaps.
- Sales by SKU for the quarter — units and revenue. Without this the review will spend its time on lines that do not matter.
- Inventory on hand — units and value, for the exit decisions at the end.
- The quarter's supplier price files and invoices — you need the invoices, not just the files, because what you were billed and what the file said are not reliably the same number.
Keep the export set. Next quarter's review compares against it, and that comparison is where drift becomes visible. A review with no predecessor can only find absolute problems; a review with four predecessors finds trends.
Step 1 — the margin distribution
One table, the whole catalogue, bucketed by current margin at current cost. Not an average: averages hide exactly the shape you are looking for. An illustrative catalogue of 1,240 SKUs against a 30% floor:
| Margin band | SKUs | % of SKUs | % of quarter's revenue |
|---|---|---|---|
| Under 20% | 38 | 3.1% | 2.1% |
| 20–30% | 146 | 11.8% | 11.4% |
| 30–40% | 520 | 41.9% | 44.0% |
| 40% and up | 536 | 43.2% | 42.5% |
184 SKUs sit under the floor — 14.8% of the catalogue and 13.5% of the quarter's revenue. The instinct is to start with the worst 38. The arithmetic says otherwise. On $180,000 of quarterly revenue, the under-20% band carries $3,780; dragging it up to 30% is worth about $680 a quarter. The 20–30% band carries $20,520, and moving it from an average of 25.5% to 30% is worth $923 a quarter — more money, from smaller and far less contentious price moves. Sort the fix list by revenue, not by how bad the number looks.
Step 2 — cumulative drift
The query that pays for the review: for every SKU, cost today against cost at the start of the period, expressed as a percentage, with retail's change over the same period beside it.
drift = (cost_now − cost_4q_ago) / cost_4q_ago
retail = (price_now − price_4q_ago) / price_4q_ago
gap = drift − retail
Sort by gap × quarterly revenue descending. That ordering puts the lines where cost outran price by the most money at the top, which is exactly the work list, and it does not care whether the drift arrived in one jump or six. Anything with a gap above two or three points and meaningful volume needs a decision this quarter.
A second pass on the same data, worth running once a year: the lines where gap is strongly negative. Cost fell and you never passed it on, or never noticed. Those are not always errors — a line whose competitors have not moved is fine — but a few of them are usually a supplier who reduced a price quietly, which is worth knowing before the next negotiation.
Step 3 — stale cost fields
Cross the quarter's purchase invoices against the cost field's last-modified date. In the illustrative catalogue, 310 SKUs were purchased during the quarter and the cost field changed on 190 of them. The other 120 were bought at a price the catalogue does not know about.
Some of those 120 are genuinely unchanged costs. The rest are the most dangerous category in the whole review, because every margin number for them is confidently wrong in the direction that makes things look fine. The fix is mechanical rather than analytical — reconcile invoice line to cost field, then push the corrections in one bulk update — but it has to happen before Step 1's table can be trusted, which is why the honest ordering is to run this first and Step 1 twice.
Step 4 — how old is the retail price
List every SKU by the date its price last changed, oldest first, with quarterly revenue beside it. There is no correct answer for how old is too old — some prices should never move — but a high-revenue line that has not been repriced in two years while its cost drifted is the single most common finding in a first review, and it is invisible in every other view because nothing about it ever changed.
Pair this with a second, cheaper check: the lines where price is a suspiciously round number. Prices that end in 9.00 or 5.00 and have never moved are often a number someone typed once, not a number anyone calculated.
Step 5 — refresh the inputs, not just the outputs
Margin is computed from cost and price, but the floor is computed from cost-to-serve, and cost-to-serve moves quietly. Once a quarter, recompute the three inputs from actuals rather than from what you assumed last time:
- Blended shipping label. Total outbound carrier spend for the quarter divided by orders shipped. A move from $6.42 to $6.91 is 7.6% on the label and 1.6 margin points on a $29.95 single-unit order — larger than most of the cost increases you spent the quarter reacting to. Carrier general rate increases and surcharge changes are annual events that reach you silently.
- Effective payment fee. Total fees divided by total order value, which will not equal your headline rate once mix, refunds and cross-border cards are in it.
- Packaging and pick cost. Consumables spend divided by orders, plus whatever you count for labour.
These feed the per-order margin stack and, through it, the floor itself. A floor that has not been recalculated in a year is a number from a cost structure that no longer exists, and every line you passed as "above floor" this quarter was passed against it.
Step 6 — supplier-level, not SKU-level
Roll the drift from Step 2 up by supplier, weighted by what you actually bought from each. One supplier at +7% across the board is a different problem from seventy scattered increases, and it has a different response: a conversation, a second source, or an origin question if the timing lines up with a duty measure — see how tariffs reach a store that does not import for how to decode that from the price change alone.
While the numbers are open, update the rest of the supplier scorecard: fill rate, lead time, data quality, terms. The quarterly review is the only moment in the year when all the data needed for it is already on the desk, and doing it separately means it does not get done.
Step 7 — decide, in four buckets
Every line on the work list gets exactly one of four outcomes, recorded with a one-line reason. The reason matters more than it looks: next quarter's review reads it and either confirms the call or shows it did not work.
| Bucket | When | What gets written down |
|---|---|---|
| Raise | Below floor, price not tested recently, no MAP or contract constraint | New price, effective date, the margin it restores |
| Hold | Below floor but deliberately — traffic driver, attach line, contract | The reason, and the margin you are accepting |
| Renegotiate | Drift concentrated in one supplier or one product group | The ask, the evidence, who is asking, by when |
| Exit | Below floor, low volume, no attach value, price cannot move | Sell-down plan and the date the line comes off |
The exit bucket is the one people avoid, and it is usually the largest source of recovered margin in a catalogue that has never been reviewed — the arithmetic for that decision is worth having settled before the meeting rather than argued during it. Hold is a legitimate answer; "we'll look at it next time" is not, because it is the answer that produced the current state.
Time budget and cadence
An afternoon, roughly: half an hour to pull the four exports, an hour on Steps 1–4 once the queries exist, half an hour on Step 5, and the rest on decisions — which is the only part that should take long. It compresses sharply after the first pass, because the first pass is where the backlog of never-reviewed lines gets cleared.
Quarterly is the right interval for the catalogue-wide pass because it is long enough for drift to accumulate into a visible number and short enough that a mistake costs one quarter. It does not replace checking files as they arrive; those are different jobs. The intake process catches events, in days. The quarterly review catches accumulation, in months. A store running only the first is fast at responding to increases it can see, and slowly losing points to the ones it cannot.
Run Step 1 in two minutes
Paste your costs and retail prices, get every line under your floor and the price that restores it — sorted so the money is at the top. Free, no account.
Open the free checker ↗