Docs
SKU COGS & weighted average cost (WAC)

SKU COGS & weighted average cost (WAC)

How SKU COGS uses date-range blended WAC, landed-cost view, push to Shopify, and how that differs from cost sync at receipt.

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:

  1. SKU COGS report (this page) — an ad hoc report you run when you want. Pick a date range of POs, blend those purchases with a weighted average of what’s currently on the shelf (at today’s Shopify unit cost), review, 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.
  2. Cost sync at receiptalways 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; Unlimited plan.

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 a blended weighted average unit cost (WAC) per SKU, and push that value to Shopify when you are ready.

WAC means weighted average cost: a single cost per unit for a pool of inventory, computed as total dollars ÷ total units in that pool. Blended WAC is WAC when the pool combines shelf stock (dollars from on-hand quantity × current Shopify unit cost) and PO lines in your date range (dollars from PO line totals for that SKU — plus allocated cost adjustments when landed-cost view is on).


What Inventory Mate does today (SKU COGS)

For each SKU (inventory item), the report combines:

  1. 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 Blended WAC 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).
  2. What is on the shelf nowcurrent stock quantity (sum of available across synced locations) and current Shopify unit cost (live from Shopify when possible, otherwise the last synced cost).

That mix is intentional: you are not only averaging recent POs in isolation. You still tie to on-hand quantity and the unit cost Shopify currently holds for that stock, so the proposed number is usually easier to defend than a plain period average alone.

Tradeoffs to keep in mind

  • The Shopify cost used as the shelf anchor may be stale or wrong — the blend assumes it is a reasonable stand-in for “value already on the shelf.”
  • 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.
  • On-hand may already include units received in the range. Because current stock reflects today’s shelf, units that arrived from PO receipts inside your window are usually counted on both sides of the blend (anchor and PO receipts). When the Shopify cost anchor is close to recent PO unit cost the answer is still right; when costs have drifted and Shopify cost is stale, the blend can over- or undershoot a true moving average — see When the blend can mislead.
  • The date filter is by PO created timestamp, not received. POs whose goods have not arrived yet still pump dollars into the blend. Widen the range or wait for receipts when this matters.

When on-hand stock is zero, the blended value is the same as the weighted average PO unit cost for the range (nothing on the shelf to anchor). When you have on-hand stock but no Shopify unit cost, the app cannot form that shelf part of the blend honestly — set or sync cost in Shopify first.

When the blend can mislead

A worked case where the Shopify anchor is stale:

  • On-hand: 100 (50 units bought at $4, 50 units bought at $6).
  • Shopify unit cost: $5 (never updated since the cost change).
  • POs in range: 50 units at $6 → PO line value $300.

Blended WAC as the formula computes it: (100 × $5 + $300) ÷ (100 + 50) = $5.33.

A true moving average of the actual receipts is (50 × $4 + 50 × $6) ÷ 100 = $5.00. The blend overstates by $0.33 because the anchor is older than the in-range receipts and the in-range units are also part of on-hand. Update Shopify cost or widen the date range when this kind of drift is plausible — the longer window dilutes the bias as the anchor’s share grows.


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 (blended) 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.


Blended WAC formula

WAC (weighted average cost) is always total value in the pool ÷ total units in the pool. Here the pool mixes on-hand inventory (valued at Shopify’s unit cost) and PO lines in your date range.

For each SKU:

  1. On-hand value = current stock qty × current Shopify unit cost (units × unit price on the shelf).

  2. 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:

Blended WAC = (on-hand value + sum of PO line totals in range) ÷ (on-hand units + 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. Either way, it is the same units × unit price → dollars pattern as the on-hand side.

That is the value you can push to Shopify as the inventory item unit cost when the inputs are valid. 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

ConceptMeaning
StockSum of available units across synced locations (same family of data as inventory value).
Avg PO costPeriod only: total PO line value in the range ÷ units on those lines — useful for drill-down against receipts.
Blended WACWeighted average cost for the blend of shelf + period PO lines—total $ ÷ total units in that mix; what you can push to Shopify when it can be computed (includes allocated extras when landed-cost view is on).
Current cost (Shopify)What Shopify (or your synced record) says the unit cost is now — used as the shelf anchor in the blend.
Match / mismatchCompares blended WAC to Shopify cost (or falls back to the period average when a full blend cannot be formed), within a small tolerance.

Push to Shopify writes blended WAC (not the raw period-only average). With landed-cost view on, that WAC includes allocated PO cost adjustments (freight, duties, etc.), and the confirm step shows the landed-cost formula and per-SKU breakdown before updating Shopify. When on-hand is zero, blended WAC and the period average coincide.


What gets excluded

The aggregator is conservative — it drops anything ambiguous rather than guess. Lines that never contribute to the blend:

  • 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 blended WAC against Shopify.


How the report relates to receive-time WAC

SKU COGS (this report): Ad hoc — date-range POs blended with current on-shelf WAC. Optionally include landed costs from PO cost adjustments. You run it and push manually when ready.

Cost sync at receipt: Always on once enabled — every PO receive updates Shopify from live on-hand at the PO destination + 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 report (date-range + shelf WAC, optional landed view, manual push). Cost sync at receipt always updates costs on every receive once enabled, with confirmation each time.


At a glance

SKU COGS report (date-range + shelf WAC)Cost sync at receipt
When it runsAd hoc — you open the report and push manuallyEvery PO receive once the setting is on (confirm each time)
MechanismPOs in your chosen date range, blended with current on-hand qty × current Shopify unit cost; optional landed-cost view allocates PO cost adjustments by unit shareAt receive save: live on-hand at destination × live Shopify unit cost + receipt qty × PO line unit cost, then ÷ total units
FitPeriodic review / catch-up; optional landed path closest to Stocky-style landed costingKeep average cost current as stock lands (supplier line cost)
ControlYou choose the window, landed toggle, and confirm each pushToggle in Shop defaults → PO 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 PO receipt — weighted average cost sync to Shopify.