All articles
Business Strategy

How to Track Shopify COGS for Tax and Profit Reporting

Learn how to track Shopify COGS correctly for tax season — from entering landed costs to exporting gross profit reports your accountant can actually use.

2026-07-226 min readBy BulkOps.ai

Every April, a version of this conversation plays out between Shopify merchants and their accountants: "What was your cost of goods sold?" "Um… I think I have some of that in a spreadsheet somewhere." If that sounds familiar, you're not alone — but it's costing you money, either in overpaid taxes or in profit reports you can't trust.

COGS tracking isn't glamorous, but it's one of the most financially consequential things you can get right in your Shopify store. This guide covers exactly what data you need, where it lives in Shopify, and how to keep it accurate enough to hand to your accountant without scrambling at year-end.

What COGS Actually Means for a Shopify Merchant

Cost of goods sold (COGS) is the direct cost of producing or purchasing the products you sell. For a DTC brand selling work jackets at $120, the COGS might look like this:

Cost ComponentAmount
Manufacturer cost$42.00
Inbound freight (per unit)$3.50
Duties & customs$4.00
Packaging$1.50
Total landed COGS$51.00

On a $120 sale, that's a gross margin of 57.5% — not the 65% you'd calculate if you only counted the $42 manufacturer cost. Small miscalculations per unit compound fast: sell 500 jackets and you've understated your COGS by $4,500, which means overstating your taxable income by $4,500.

For tax purposes, COGS reduces your taxable income directly. Accurate COGS tracking isn't just good accounting hygiene — it's how you make sure you're not handing the IRS more than you owe.

What Shopify Tracks (and What It Doesn't)

Shopify stores a "cost per item" field on each product variant. This is what it uses to calculate margin in Shopify Analytics and the Finances summary. But Shopify does not automatically produce a COGS report in a tax-ready format. It doesn't know about freight, duties, or packaging unless you bake those into the cost per item field yourself.

What Shopify gives you:

  • Cost per item (stored per variant)
  • Units sold (from order data)
  • A gross profit report in Analytics (revenue minus cost × units sold)

What Shopify doesn't give you out of the box:

  • Landed cost (manufacturer cost + freight + duties)
  • Opening and closing inventory valuation formatted for a tax return
  • A COGS line item ready for Schedule C or your P&L

The fix: build landed cost into your "cost per item" field from the start, and export the gross profit report from Shopify Analytics for your accountant to work from. Everything else flows from those two things being accurate.

How to Enter Cost Per Item Correctly

In Shopify, cost per item lives in the product editor under Inventory → Cost per item. It's set per variant, which lets you capture real cost differences — a premium XXL size that costs $2 more from your supplier, for instance.

The number you enter should be your fully landed cost: what it actually costs to get that unit into your warehouse, ready to ship. Take a Stanley-style insulated tumbler imported from a factory:

  • Unit cost from factory: $8.00
  • Ocean freight (per unit): $0.90
  • Customs duty (4%): $0.32
  • 3PL receiving fee: $0.25
  • Landed cost: $9.47

Enter 9.47, not 8.00. If you enter the factory price only, your margin and COGS reports are wrong — and your tax deductions are understated.

If you haven't been doing this consistently, the missing cost per item problem is extremely common across Shopify stores and fixable in bulk. The bigger ongoing challenge is updating costs when supplier prices or freight rates change — which they do, often and without warning.

Calculating COGS for Your Tax Filing

The IRS formula for COGS (used on Schedule C for sole proprietors and on most business returns) is:

COGS = Beginning Inventory Value + Purchases − Ending Inventory Value

For a Shopify merchant, this breaks down as:

  1. Beginning inventory value: total cost of unsold products at January 1 (quantity × landed cost per unit)
  2. Purchases: total amount paid to suppliers for new inventory during the year
  3. Ending inventory value: total cost of unsold products at December 31

Shopify Analytics → Reports → Finances → Gross Profit gives you revenue minus cost for all sold items, broken down by product. Many accountants for small ecommerce businesses use this report directly as a COGS cross-check — if your cost-per-item data is clean, the numbers should tie out.

If your store does over $1M/year or carries significant physical inventory, you'll likely want a proper inventory accounting integration (QuickBooks, Xero, or A2X) that pulls order and cost data from Shopify automatically. For most stores under that threshold, accurate cost-per-item data plus the Shopify gross profit export is sufficient.

What Your Accountant Actually Needs

Here's the practical handoff checklist for tax season:

What They NeedWhere to Get It in Shopify
Total revenueAnalytics → Finances → Total sales
Gross profit by productAnalytics → Reports → Gross profit by product (export CSV)
Inventory value at year-endReports → Inventory → Inventory value (export December 31 snapshot)
Supplier invoices / purchase ordersYour email or supplier portal — Shopify doesn't store these

The inventory value report is the one most merchants forget. At year-end, export it and save it with your tax documents. It's your ending inventory number, which feeds directly into the COGS formula. If you didn't save the December 31 snapshot, your accountant is guessing — or asking you to recreate it from memory months later.

Keeping COGS Current: A Practical Workflow

The single biggest cause of bad COGS data is stale costs. Supplier prices go up. Freight rates swing (as they did in 2021 and again in 2024). Duty rates change. Here's a repeatable workflow:

  • On every new purchase order: Calculate the landed cost per unit using the actual freight quote and duty rate. Update cost per item in Shopify for affected variants before you receive the shipment — not after, when you're busy processing inventory.
  • Quarterly: Filter your product editor for variants with no cost set and fill the gaps. A store with 200+ SKUs will almost always have products added without cost data.
  • December 31: Export the inventory value report immediately. Don't wait until tax season — this date-specific snapshot can't be reconstructed later.

BulkOps flags products with missing cost data as a first-class alert in the Data Insights tab, so you can see exactly how many SKUs have gaps before they become a problem at tax time. Once your costs are accurate, cost-based pricing formulas ensure your retail prices stay correctly aligned with your actual landed costs — no manual recalculation required when a supplier raises prices.

Related reading


If your cost-per-item fields are missing or outdated across hundreds of products, BulkOps's Data Insights tab flags every gap and lets you update costs in bulk — so your COGS data is clean before tax season, not scrambled together during it. Install BulkOps →

Shopify COGS trackingShopify COGS for taxesShopify cost of goods soldShopify profit reportingShopify tax accounting

Try BulkOps.ai free on your store

Everything covered in this article is built into BulkOps.ai. Free plan for stores up to 50 products — no credit card required.

Add to Shopify — Free

Was this helpful?