SKU COGS & weighted average cost (WAC)
How SKU COGS uses a date-range PO average, landed-cost view, push to Shopify, and how that differs from automatic cost sync at PO receipt.
Where to find it: Dashboard → Reports → SKU COGS (/dashboard/reports/sku-cogs). Select a shop first.
On each purchase order, supplier cost stays on the line items. Shipping, duties, FX fees, freight, and similar extras sit as separate cost adjustments on the same PO — so you can still audit both numbers.
Inventory Mate has two ways to push costs into Shopify. The big difference is when they run:
- SKU COGS report (this page) — an ad hoc report you run when you want. Pick a date range of POs, review the weighted average of those purchases, and push manually to Shopify. Optionally turn on Landed-cost view to allocate shipping, duties, and other cost adjustments across the products on each PO before you push (closest to Stocky-style landed costing). Available on all plans.
- Automatic cost sync at PO receipt — always on once enabled: every time you receive a PO, we update Shopify with a weighted average from what’s on hand + this receipt (using the PO line / supplier cost), with a confirmation screen every time. Optional shop setting; Growth, Scale, and Enterprise.
The SKU COGS report (under Reports → SKU COGS) helps you align Shopify variant unit cost with what you have been paying on purchase orders. You pick a PO date range, optionally turn on landed-cost view, review suggested cost per SKU, and push that value to Shopify when you are ready.
Suggested cost is the weighted average of PO lines in your date range. Current stock is shown for context; it does not enter the average. That keeps the number stable after you push it to Shopify (unlike mixing the average with “on-hand × the cost you just wrote”).
What Inventory Mate does today (SKU COGS)
For each SKU (inventory item), the report uses:
- Purchase orders in your selected range — e.g. last 30 / 60 / 90 days, 365 days, custom, or all time. Draft and canceled POs (including “cancelled” spellings) are excluded so uncommitted or voided orders do not move averages. Each line contributes quantity × line unit cost (then line tax; see Suggested cost formula); the report sums those line totals for the SKU in the range (and, if you turn on landed-cost view, allocates PO cost adjustments like shipping and duties across lines by unit share).
- What is on the shelf now — current stock quantity (sum of available across synced locations) and current Shopify unit cost (live from Shopify when possible, otherwise the last synced cost). Stock and Shopify cost are for Match and context only.
Tradeoffs to keep in mind
- A short date range can omit older PO lines that still matter for units sitting in current inventory — widen the range or use all time when you need a broader picture.
- The date filter is by PO created timestamp, not received. POs whose goods have not arrived yet still count toward the average. Widen the range or wait for receipts when this matters.
Keeping suggested cost as a period average (not a mix with current Shopify cost) is the usual date-range method. Perpetual WAC — on-hand × old cost + this receipt — is what automatic cost sync at PO receipt does.
Landed-cost view
Off (default for many shops): suggestions use supplier line cost only. Cost adjustments on the PO are still saved — you can audit shipping and duties without folding them into Shopify unit cost.
On: for each PO in range, shipping, duties, and other cost adjustments are allocated across inventory lines by unit share (not by line dollar value). That share is included in the suggested unit cost. Push to Shopify then writes a landed unit cost; the confirm dialog shows base PO cost vs shipping/duties share per SKU before anything is written.
Supplier cost remains on the PO lines either way — landed view does not overwrite how the PO was entered.
Suggested cost formula
WAC (weighted average cost) is total value in the pool ÷ total units in the pool. For this report the pool is PO lines in your date range.
For each SKU:
PO dollars in your range = sum of PO line totals for lines whose PO falls in the range. Each line total starts as line quantity × line unit cost (the supplier unit cost on the line—the same basis as Create order), then applies line tax % to that subtotal. With landed-cost view on, each line also gets its allocated share of PO-level cost adjustments (freight, duties, etc.) by unit share. PO units in range is the sum of quantities on those same lines.
Then:
Suggested cost = (sum of PO line totals in range) ÷ (PO units in range)
A “PO line total” in this formula always means (qty × unit cost) × (1 + line tax% ÷ 100) plus, when landed-cost view is on, the line’s share of PO-level extras (allocated by units, not line value). When landed-cost view is off, the allocated share is zero and the line total is just the supplier subtotal plus line tax.
That is the value you can push to Shopify as the inventory item unit cost. With landed-cost view on, the pushed amount includes allocated shipping/duties; the confirm dialog shows that math before anything is written.
What you see in the app
| Concept | Meaning |
|---|---|
| Stock | Sum of available units across synced locations (same family of data as inventory value). Context only — not part of suggested cost. |
| Suggested cost | Period WAC: total PO line value in the range ÷ units on those lines. Tap the dotted number for the PO-line breakdown. This is what you can push to Shopify (includes allocated extras when landed-cost view is on). |
| Current cost (Shopify) | What Shopify (or your synced record) says the unit cost is now. |
| Match / mismatch | Compares suggested cost to Shopify cost, within a small tolerance. After you push, Match stays Match until POs in the range (or Shopify cost) change. |
| Cost history | Shopify unit cost writes from automatic cost sync at receive and from Push to Shopify on this report. |
Push to Shopify writes suggested cost. With landed-cost view on, that includes allocated PO cost adjustments (freight, duties, etc.), and the confirm step shows the math before updating Shopify.
What gets excluded
The aggregator is conservative — it drops anything ambiguous rather than guess. Lines that never contribute to the average:
- POs in draft or canceled / cancelled status (any case spelling).
- POs with no line items at all.
- Lines with no inventory item linked (e.g. free-text rows).
- Lines with quantity ≤ 0 (returns and corrections). They are not subtracted from PO units or PO value — they are silently ignored. If you rely on returns to lower WAC, log a separate negative-cost adjustment line that is linked to the SKU and has a positive quantity with negative cost.
- Lines with non-finite quantity, cost, or tax values.
Mixed currencies
Line totals are summed across POs without FX conversion. The currency label shown in the report is the currency of the last included PO, which is harmless when all POs use the same currency and misleading when they don’t. If your shop has multi-currency suppliers, narrow the date range or filter the PO list to a single currency before drawing conclusions from this report.
Notifications vs the report
The SKU COGS report is the place to review mismatches: you pick the PO date range each time; stock and Shopify cost are loaded for that session. In-app automated “SKU COGS” mismatch notifications are not sent—open the report when you want to check suggested cost against Shopify.
How the report relates to automatic cost sync at PO receipt
SKU COGS (this report): Ad hoc — weighted average of POs in your date range. Optionally include landed costs from PO cost adjustments. You run it and push manually when ready.
Automatic cost sync at PO receipt: Always on once enabled — every PO receive updates Shopify from live on-hand across all locations + this receipt (PO line unit cost × received delta), before quantities update, with a confirm dialog every time. Uses supplier line cost for the receipt leg — not the same as allocating shipping/duties in landed-cost view.
Future — full ledger per-receipt WAC: A deeper design could treat a receipt ledger as the source of truth (with reconciliation when Shopify and the ledger diverge). That broader ledger product direction is not the same as either path above.
Wrap-up: SKU COGS is the ad hoc date-range PO average (optional landed view, manual push). Automatic cost sync at PO receipt always updates costs on every receive once enabled, with confirmation each time.
At a glance
| SKU COGS report (date-range PO average) | Automatic cost sync at PO receipt | |
|---|---|---|
| When it runs | Ad hoc — you open the report and push manually | Every PO receive once the setting is on (confirm each time) |
| Mechanism | Weighted average of POs in your chosen date range; optional landed-cost view allocates PO cost adjustments by unit share | At receive save: live on-hand across all locations × live Shopify unit cost + receipt qty × PO line unit cost, then ÷ total units |
| Fit | Periodic review / catch-up; optional landed path closest to Stocky-style landed costing | Keep average cost current as stock lands (supplier line cost) |
| Control | You choose the window, landed toggle, and confirm each push | Toggle in Shop defaults; confirm on every receive |
For purchase order lines, receiving, and how POs touch inventory, see Purchase order management. For receive-time cost behavior in detail, see Automatic cost sync at PO receipt.