October 10, 2026 · CostSentry

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

Dark illustration: a dashboard of five round dial gauges with gold needles, one needle swung into the red zone, next to a stack of supplier price lists with one row highlighted in red

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.

MonthRetail revenueRetail marginTrade revenueTrade marginBlended margin
Month 1$42,00040.0%$18,00025.0%35.5%
Month 2$42,00040.0%$24,00025.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:

SKUOld costNew costChangeUnits (90 days)Old cost × unitsNew cost × units
A$10.00$10.40+4.0%300$3,000$3,120
B$4.00$4.000.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:

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:

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

KPICadenceAction when it moves
Margin by channelMonthlyCheck mix before hunting for cost problems
Cost driftEach price file, plus quarterlyReprice or raise it with the supplier
SKUs below floorEach price fileReprice by revenue share, highest first
Cost freshnessMonthlyRequest or locate missing price files
Repricing lagPer increaseShorten 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 ↗
Runs in your browser. Nothing uploaded, no account.