Mistake one, using the latest purchase price as cost basis.
Shopify itself stores a single cost field per variant. Many merchants update that field with the latest invoice price. So a SKU bought at £6.40 last quarter and £8.80 this quarter shows COGS of £8.80 on every sale, including units that were physically purchased at £6.40. Margins look thin, and end-of-period inventory does not tie out to anything.
The fix is weighted-average cost, recomputed on every receipt. If you have 40 units at £6.40 and receive 60 units at £8.80, your new WAC is £7.84. Sales drawn from that pool post COGS at £7.84, not £8.80. Nonari maintains WAC per branch, so a SKU stocked from two suppliers across two branches has two correct cost bases, not one wrong average.
Mistake two, missing landed cost.
A Brooklyn merchant imports a SKU at $4. The Shopify cost field reads $4.00. The actual landed cost includes ocean freight, port handling, customs duty, sales tax on import (where applicable), and the inland freight from port to warehouse. The realistic landed cost is closer to $5.50. Every Shopify order under the wrong cost looks 27% more profitable than it is.
Landed cost should be allocated across the receipt at the moment goods are received, not at month end. The allocation key is usually unit value or unit volume. On a $30 order, recording COGS at $4 vs $5.50 is a $1.50 difference per unit. Across a season, that is the difference between a profitable category and a loss leader.
- Freight inbound: allocate by value or weight
- Customs duty and import tax: allocate by HS-code-aligned value
- Port and clearing fees: allocate flat across the shipment
- Inland transport to warehouse: allocate by volume
Mistake three, ignoring bundles and kits.
A Shopify bundle SKU often has its own price but no real inventory. The bundle is a virtual SKU composed of physical components. Merchants frequently set the bundle cost manually, or worse, leave it at zero. The bundle then sells with no COGS, and the components never decrement. Inventory drifts, and gross margin on the bundle line looks like 100%.
The correct treatment is a bundle definition that maps the virtual SKU to its component SKUs. On every bundle order, COGS is the sum of component WAC at the source branch, and stock decrements on the components, not the bundle. Nonari handles this with bundle SKUs that explode at order time so margin and stock both stay correct.
Mistake four, COGS posted on fulfillment, not on sale.
Some bookkeepers post COGS only when an order ships. That works for cash-basis dropship, but it breaks accrual stores and creates a timing gap when fulfillment lags by days or weeks. Revenue is in March, COGS is in April, and gross margin per month becomes useless.
COGS should post when revenue is recognized, which on Shopify is order placement for paid orders and fulfillment for unpaid or COD orders. Cash-on-delivery orders are an exception worth mentioning: revenue and COGS only post on courier delivery confirmation, because that is when title transfers and cash is realized. Nonari handles both modes per branch.
Mistake five, refunds that do not reverse COGS.
A refund without a COGS reversal is the most common cause of a margin drift on Shopify. The original order posted revenue and COGS. The refund webhook reverses revenue. If COGS does not reverse with the same WAC, you have just booked a sale at zero revenue and full cost. Across hundreds of refunds, this turns a 38% gross margin into a 31% one on paper.
On a $30 refund of a single unit purchased when WAC was $7, the correct reversal is debit Sales returns $30, credit Shopify clearing $30, debit Inventory $7, credit COGS $7. The unit returns to stock at its original cost basis, not the current WAC. Restocking at current WAC silently shifts margin between periods.
A worked end-to-end example.
Branch A holds 40 units of SKU X at $6.40 WAC. A receipt of 60 units at $8.80 lifts WAC to $7.84. A Shopify order ships 5 units at $33.60 each, total revenue $168. COGS posts at 5 × $7.84 = $39.20. Gross margin: $128.80, or 76.7%. Two units are refunded at $33.60 each. Sales returns: $67.20. COGS reverses at 2 × $7.84 = $15.68. Inventory at branch A ticks back up by 2 units at $7.84.
Net for the order: revenue $100.80, COGS $23.52, gross margin $77.28 or 76.7%. The margin percentage is preserved across the refund because the cost basis on reversal matches the cost basis on sale. This is the invariant that breaks when any of the five mistakes are present.
Where Nonari fits.
Nonari treats every Shopify storefront as a branch with its own WAC ledger. The Shopify connection is per-online-branch, the catalog imports as Nonari Products with branch-scoped inventory, orders post COGS at WAC at the source branch, refunds reverse COGS at the original cost basis, and bundles explode to components. None of this is configuration the merchant has to remember every order.
Catalog import resolves the cost-basis mismatch before it begins. Instead of inheriting a stale Shopify cost field, Nonari sets cost from the receipt history at the branch, then keeps it current as new purchase orders land. The result is a P&L where gross margin reflects what actually happened in the warehouse.