Shopify Cost Price Tracking: How to Calculate COGS and Know Your True Margins
Shopify shows you revenue. It does not show you profit — not reliably. Without accurate cost prices per SKU, you can't calculate gross margin, can't tell if a supplier price increase has flipped a product from profitable to loss-making, and can't make data-driven decisions about what to reorder and what to discontinue. Cost price tracking is the foundation of every other financial decision in a product business.
What COGS Is and Why Shopify Merchants Undertrack It
Cost of Goods Sold (COGS) is the direct cost of the products you sold in a given period. For a product business, COGS is primarily the cost you paid your supplier for the inventory. The formula:
Beginning Inventory = inventory value at period start | Purchases = cost of all stock bought during period | Ending Inventory = inventory value at period end
COGS flows directly into gross profit: Revenue − COGS = Gross Profit. And gross margin = Gross Profit ÷ Revenue × 100. A product selling at $50 with a cost of $20 has a 60% gross margin. If your supplier raises the cost to $28, that margin drops to 44% — and if you haven't updated your cost price data, your Shopify reports will still show the old 60% while the actual margin has quietly eroded.
40–60%
typical gross margin range for Shopify product businesses
10%
supplier price increase that can halve gross margin on a low-margin product
0
historical cost records kept by Shopify's native Cost per item field
Shopify's Cost Per Item Field — What It Does and Doesn't Do
Shopify has a Cost per item field on each product variant (Products → select a product → Pricing section). Enter a cost here and Shopify uses it to calculate gross profit in the Finances report. This is useful — but it has four significant limitations that matter for any serious product business:
⚠ Limitations of Shopify's Cost per item
1. One static number per variant. No history. If you update it, the old value is gone. You can't see what a product cost 6 months ago.
2. Not connected to purchase orders. Shopify has no PO system, so there's no way to tie the cost in the product field to the actual price on a specific order.
3. No multi-supplier cost tracking. If you buy the same SKU from Supplier A at $12 and Supplier B at $15, Shopify can only store one cost. The weighted average cost is on you to calculate.
4. Manual update required on price changes. When a supplier raises their price, you must manually update every affected variant. There's no notification, no history of the change, and no link to the PO that first showed the new price.
The Gross Margin Formula Per Product
With cost prices set, you can calculate gross margin per product:
Shopify's Finances → Products report shows gross profit per product if you have costs entered. But remember — that report is only as accurate as your cost data. A supplier that raised prices 3 months ago but whose costs you haven't updated in Shopify will make margins look healthier than they are.
Contribution margin vs gross margin
Gross margin as Shopify calculates it covers only the cost of the product itself. It does not include: transaction fees (typically 1.5–3% for Shopify Payments), outbound shipping if you offer free shipping, return processing costs, or any portion of your fulfillment labor cost. Your true per-unit margin is lower than the gross margin Shopify shows. For products with thin gross margins (under 30%), factor in these additional costs before deciding whether to continue selling a product.
Why Cost Prices Change — and How to Track Changes
Cost prices are not fixed. They change for predictable reasons that you need to track:
Supplier price increases. Announced or unannounced. Commodity input prices, labor costs, currency movements, and demand shifts all drive supplier pricing up. A 10% supplier increase on a product with 30% gross margin reduces your margin to 22%.
Volume discount thresholds. Suppliers often offer tiered pricing — $12/unit for orders under 100, $10.50/unit for 100+, $9/unit for 500+. Your effective cost price changes with each order size, and the decision to cross a volume threshold needs to factor in inventory carrying cost vs the discount benefit.
Currency fluctuations. If you buy from international suppliers in their local currency, your effective cost in your home currency fluctuates with exchange rates even when the supplier hasn't changed their listed price.
New supplier for same SKU. If you switch to a backup supplier for a product, the cost almost certainly changes. Your Shopify cost field should reflect the new supplier's cost, and you should track that it changed.
How EZstock Tracks Cost Prices
EZstock stores a cost price per supplier-product relationship. When you assign a product variant to a supplier in EZstock, you record the cost price for that specific supplier. When you create a purchase order in EZstock, the cost price auto-populates from the supplier-product record, and you can update it on the PO if the supplier has changed their price.
This means your purchase order reflects the real cost you're paying — not a static value that was entered months ago. And when you receive the PO, EZstock has the actual per-unit cost for that batch of inventory, which is the correct COGS input for that shipment.
For multi-supplier scenarios: EZstock tracks the cost price per supplier independently. If Supplier A charges $12 and Supplier B charges $15 for the same SKU, EZstock knows which cost applies to each purchase order — and therefore to each batch of inventory you receive from each supplier.
Using cost data to make better buying decisions
With per-product cost prices tracked accurately, you can make quantitative buying decisions that intuition alone can't support:
Evaluate volume discounts mathematically. If crossing a 500-unit volume threshold saves $3/unit on a product selling 80 units/month, the extra 420 units of inventory will sit for 5+ months. Carrying cost on 420 × $9 = $3,780 of inventory for 5 months at a 20% annual carrying cost = $315. The discount saves 500 × $3 = $1,500. Net benefit = $1,185. That's worth crossing the threshold. EZstock's PO system makes this math easy — adjust the order quantity and watch the total cost update.
Identify margin-negative products. Sort your products by gross margin. Any product below 25% gross margin is a candidate for price increase, supplier renegotiation, or discontinuation — especially if it's a C item in your ABC analysis.
Flag supplier price increases immediately. When you create a new PO in EZstock and the cost price you're entering is higher than the last recorded cost, that's a margin erosion event. Update Shopify's cost per item field at the same time so your financial reports stay accurate.
Track Cost Prices Alongside Your Purchase Orders
EZstock stores per-supplier cost prices, pre-fills POs with the correct cost, and keeps your margin data current as prices change — all inside Shopify.
Shopify has a Cost per item field per product variant and uses it to calculate gross profit in the Finances report. However, it stores only one static cost value per variant with no history, no connection to purchase orders, and no automatic update when supplier prices change. For accurate COGS tracking tied to real purchase order costs, you need a dedicated tool like EZstock.
How do I add cost prices in Shopify?
Go to Shopify Admin → Products → select a product → scroll to the Pricing section for each variant → enter the cost in the 'Cost per item' field. For bulk updates: export the product CSV (Products → Export), update the 'Variant Cost' column, and re-import. Shopify will use these costs in the Finances → Products gross profit report.
What is the difference between cost price and selling price in Shopify?
Selling price is what customers pay (your Shopify product price). Cost price is what you paid your supplier. Gross margin = (Selling price − Cost price) ÷ Selling price × 100. Shopify revenue reports show selling prices. Gross profit reports only appear if you've entered cost prices. Without accurate costs, revenue looks healthy even when supplier price increases have eroded your actual margin.
How do I calculate gross margin per product in Shopify?
Gross Margin % = (Selling Price − Cost Per Item) ÷ Selling Price × 100. In Shopify Analytics, go to Finances → Products to see gross profit per product. Note that this only reflects the product cost — it doesn't include transaction fees, outbound shipping, or fulfillment labor. Your true contribution margin is lower, especially on free-shipping or high-return products.
How do I update cost prices when my supplier raises prices?
In Shopify: manually edit the Cost per item field on each affected variant, or update via CSV export/import. Shopify stores no history of the change. In EZstock: update the cost price on the supplier-product record when you create the new PO at the raised price. EZstock pre-fills future POs with the updated cost, and the PO document reflects the actual price being paid for that order.