KPIs for a Reselling Store: Five Numbers You Can Act On

A store that buys wholesale and resells has dozens of numbers it could watch every week: sessions, conversion rate, average order value, ad spend, SKU count. Most of them describe demand. In a reselling business, profit depends on cost and price, and only a few indicators feed those decisions. Five of them follow, each with its formula, worked on one example store you can redo with your own exports.
Why a reseller needs a different short list
In a reselling store, the supplier sets your cost and you set your price. Your margin sits in the gap between two numbers that move on different schedules. Revenue can grow while that gap shrinks, and the usual dashboards will not show it. A useful KPI here passes one test: when it moves, you know what to do next. If a number changes and nobody touches a price, a supplier or a purchase order because of it, you can drop it from the weekly list.
The example store below sells through two channels, its own Shopify storefront (retail) and a set of trade accounts at a discount (trade). It carries 1,200 active SKUs from four suppliers.
1. Gross margin by channel, not blended
The formula is the usual one: (revenue − cost of goods) ÷ revenue. The point is to compute it per channel, because a blended figure mixes two different businesses.
| Month | Retail revenue | Retail margin | Trade revenue | Trade margin | Blended margin |
|---|---|---|---|---|---|
| Month 1 | $42,000 | 40.0% | $18,000 | 25.0% | 35.5% |
| Month 2 | $42,000 | 40.0% | $24,000 | 25.0% | 34.5% |
In month 1, retail earns $16,800 of gross profit and trade earns $4,500, so $21,300 on $60,000 is 35.5%. In month 2, trade grows by $6,000 and earns $6,000 of gross profit, so the total is $22,800 on $66,000, or 34.5%. The blended margin dropped a full point, yet neither channel got worse. That is a mix shift, and it is good news: $1,500 more gross profit. Read the blended number alone and you would go hunting for a cost problem that does not exist.
The reverse case does more damage: retail margin slips while a growing trade channel holds the blended figure steady, and only the per-channel number shows it. For what sits below gross margin, see the real net margin per order, and for why trade prices lag cost increases, trade accounts and B2B price lists.
2. Cost drift, weighted by what you sell
Cost drift is how much your supplier costs have moved over a period. A simple average of percentage changes overstates slow movers and understates bestsellers, so weight it by units sold:
cost drift = Σ(new cost × units) ÷ Σ(old cost × units) − 1
Use units from the last 90 days. Three SKUs from the example store:
| SKU | Old cost | New cost | Change | Units (90 days) | Old cost × units | New cost × units |
|---|---|---|---|---|---|---|
| A | $10.00 | $10.40 | +4.0% | 300 | $3,000 | $3,120 |
| B | $4.00 | $4.00 | 0.0% | 900 | $3,600 | $3,600 |
| C | $25.00 | $26.50 | +6.0% | 60 | $1,500 | $1,590 |
| Total | $8,100 | $8,310 |
Weighted drift is $8,310 ÷ $8,100 − 1 = 2.6%. The simple average of the three changes is 3.3%, which would tell you things are worse than they are for this mix.
Drift matters only next to what your prices did. If these SKUs sold at a 40% margin and retail did not move, the new margin is 1 − 0.60 × 1.026 = 38.4%. That is 1.6 points gone with no single increase large enough to notice. Track cost drift per supplier as well as overall: one supplier drifting at twice the rate of the others is a negotiation topic, and the supplier scorecard shows how to put it next to fill rate and lead time.
3. Share of SKUs below the floor, by count and by revenue
A margin floor is the margin below which a SKU stops paying its way. Choosing a margin floor covers how to set it per category. Once you have floors, count what sits under them, twice:
- By count, 84 of 1,200 active SKUs are below their floor: 7.0%.
- By revenue, those 84 SKUs brought in $5,400 of the month's $42,000 retail revenue: 12.9%.
The count tells you how much work the fix will take. The revenue share tells you how much of the business is affected. Here the gap points to a few fast sellers sitting under the floor, and those are the ones to reprice first. Recompute this after every supplier price file, not only at month end, because a single file can move dozens of SKUs across the line.
4. Cost freshness and repricing lag
The first three numbers are only as good as the cost they use. Shopify keeps one cost per item and no history (more on that in Shopify's cost per item), so two indicators check the inputs:
- Cost freshness is the share of active SKUs whose cost has been checked against a supplier price file in the last 90 days. In the example, 310 of 1,200 have not been, so 25.8% of the catalog is running on a cost nobody has confirmed.
- Repricing lag is the number of days from the date a cost increase takes effect to the date retail changes. If the increase on SKUs A and C took effect on the 1st and retail changed on the 22nd, the lag is 21 days.
The increase in the drift table is $210 over 90 days of sales, about $2.33 a day, so 21 days of lag cost about $49. On three SKUs that is small; the same lag on every file you process late adds up across the catalog.
How often to check each KPI and what to do
| KPI | Cadence | Action when it moves |
|---|---|---|
| Margin by channel | Monthly | Check mix before hunting for cost problems |
| Cost drift | Each price file, plus quarterly | Reprice or raise it with the supplier |
| SKUs below floor | Each price file | Reprice by revenue share, highest first |
| Cost freshness | Monthly | Request or locate missing price files |
| Repricing lag | Per increase | Shorten the path from file to price change |
All five can be built by hand from a Shopify product export, an orders export and your supplier files in a spreadsheet. The limit is upkeep: matching each new file to your catalog and comparing it with the last one takes time, and that is when the numbers go stale. The quarterly price review checklist gives a routine for doing it manually.
CostSentry automates the cost side of this list. It matches supplier price lists to your catalog by SKU or barcode, tracks cost changes and margin per product, and sends an alert when a supplier raises a price or a product falls below your margin floor. To try the arithmetic on one file first, the free supplier margin checker shows margins per SKU without signing up.
Get the margin number from your own files
Drop in your Shopify product export and a supplier CSV, see which SKUs match and which now fall below your target margin. Free, no account.
Open the free checker ↗