,

COGS pro prodejce Shopify v QuickBooks: Praktický průvodce

COGS pro prodejce Shopify v QuickBooks: Praktický průvodce

Your store didn't lose money in March. Your bookkeeping recorded a container of inventory as if you'd set it on fire.


Your P&L for March shows a $19,000 loss. April shows your best month ever. Nothing about your store changed between the two — same products, same ad spend, roughly the same sales. The only difference is that in March, you wired your supplier for a container of stock, and in April, you didn't.

If you've stared at a month like that and quietly concluded your books can't be trusted, you've found the single most common COGS error Shopify sellers make in QuickBooks: recording inventory purchases as an expense the day the money leaves. Do that, and your monthly profit stops tracking your sales and starts tracking your purchasing schedule. Big buy, terrible month. No buy, fake great month. The numbers are answering "what did I spend?" when you're asking "what did I earn?"

This post fixes the timing. You'll see how COGS actually works mechanically, what belongs in it for an e-commerce store (and what doesn't), and the three practical ways sellers track it at store scale — with a worked example month and journal entries you can copy.

The Lie: "COGS Is Whatever I Spent on Inventory This Month"

Here's the belief that produces the March-loss-April-record pattern: cost of goods sold is the money you sent your supplier.

It's an easy belief to hold, because it matches how the cash moved. You spent $19,000 on products. Products are goods. Surely that's your cost of goods sold.

But COGS isn't a cash concept — it's a matching concept. The cost of a product belongs in the same month as the revenue from selling it. When you buy 6,000 units in March and sell them over five months, March didn't consume 6,000 units of cost. March consumed however many units March sold.

Expense the whole purchase on arrival and you've charged five months of product cost to one month. March's gross margin looks like a disaster, the summer months look like you're selling product that cost nothing, and no individual month tells you what your store actually earns. That's the number a lender, an acquirer, or your own pricing decisions depend on — and it doesn't exist in your books.

How COGS Actually Works: Inventory Is an Asset Until It Sells

The correct mechanics have two moves, and QuickBooks has an account for each.

Move one: when you buy stock, it goes to an Inventory asset account — not an expense. You haven't lost that money. You've converted cash into product sitting in a warehouse, and product you own is an asset, the same as the cash was. Your P&L doesn't flinch.

Move two: when a unit sells, its cost moves from Inventory to COGS. The sale creates two things at once: revenue (what the customer paid) and cost of goods sold (what that unit cost you). Both land in the same month — which is the entire point. Revenue minus COGS is your gross profit, and now it's a real number regardless of when the containers landed.

That's it. That's the whole model:

Event What happens in QuickBooks
You buy stock Inventory (asset) goes up. Cash goes down. P&L unaffected.
A unit sells Revenue is recorded. That unit's cost moves Inventory → COGS.
Stock sits unsold It stays on the balance sheet as an asset. No P&L impact.

Whether stock moves to COGS one order at a time or in one monthly batch is a tracking-method question — covered below. But the destination is always the same: cost recognized when the item sells, not when you buy it. (If you're deciding between recording COGS continuously versus in periodic batches, that's the periodic-vs-perpetual question — we walk through it in our guide to e-commerce inventory accounting methods.)

What Belongs in COGS for a Shopify Store (and What Doesn't)

COGS should contain every cost required to get a sellable unit to your warehouse shelf — and nothing after that point. For most Shopify sellers, that means three things go in:

  • Product cost — what you paid the supplier for the unit itself.
  • Inbound freight — the container, air freight, or courier cost of getting stock from your supplier to your warehouse or 3PL.
  • Import duties and tariffs — customs charges on the way in.

Product cost plus inbound freight plus duties, divided across the units in the shipment, gives you landed cost per unit — the number all COGS math runs on. If you import, calculating it properly matters more than anything else in this post; we've written a full walkthrough in our guide to landed cost accounting for importing sellers.

Just as important is what stays out of COGS:

  • Pick, pack, and fulfillment fees — what your 3PL charges to ship an order is a cost of fulfilling, not a cost of the goods. It's an operating expense. (3PL invoices deserve their own line-by-line reading — see how 3PL pricing actually works.)
  • Outbound shipping to customers — same logic. Operating expense (some stores show it just below gross profit as a fulfillment cost; either way, it's not COGS).
  • Shopify and payment processing fees — selling costs, not product costs.
  • Ad spend, packaging inserts, software — operating expenses, all of them.

The line matters because gross margin should answer one question: what does the product itself cost? Stuff fulfillment and selling costs into COGS and you can't compare your margin to anything — not to other stores, not to your own history, not to what an acquirer expects. Our e-commerce chart of accounts template has the COGS and operating sections pre-drawn so these land in the right buckets from the start.

Three Ways to Track COGS at Store Scale

Knowing the model is one thing. Recording COGS on 1,500 orders a month is another. In practice, Shopify sellers use one of three methods.

Method 1: The monthly COGS journal entry

The workhorse. Once a month, you calculate COGS in a spreadsheet and record it in QuickBooks as a single journal entry:

  1. Maintain a landed cost per SKU. One spreadsheet column per SKU: supplier cost + allocated freight + allocated duties, per unit. Update it when a new shipment lands at a different cost.
  2. Pull units sold per SKU for the month. Shopify's sales-by-product report gives you this directly.
  3. Multiply and sum. Landed cost × units sold, per SKU, totaled.
  4. Record one journal entry: debit COGS, credit Inventory, for the total.

Purchases during the month go to the Inventory asset account when the bills are entered. The month-end entry moves out exactly what sold.

Strengths: works at any order volume, costs nothing, keeps you in control of landed cost. Weaknesses: it's manual, it's monthly (no mid-month margin visibility), and its accuracy depends on your landed-cost spreadsheet being current. A quarterly cycle count to true-up the Inventory balance keeps small errors from compounding.

For most stores between roughly 200 and 5,000 orders a month, this is the honest recommendation. It's an hour a month once the spreadsheet exists.

Method 2: QuickBooks Online's built-in inventory tracking

QBO Plus and Advanced can track inventory natively: you set a cost per product, QBO holds quantity on hand, and every sale posts COGS automatically using FIFO.

At small scale — a handful of SKUs, modest order volume — this works. At Shopify store scale, three frictions show up. Every order has to arrive in QBO as an itemized, product-mapped transaction for the automatic COGS posting to fire, which means per-order sync with clean SKU matching across your catalog. QBO's cost tracking starts from your purchase bills, so landed cost only gets in if you consistently allocate freight and duties onto item costs — most sellers don't. And a large tracked catalog makes the QBO file heavier and every mismapped SKU a data problem.

Strengths: COGS posts itself, order by order, with no month-end entry. Weaknesses: demands per-order itemized sync, disciplined landed-cost entry on every bill, and ongoing SKU hygiene. Reasonable under ~50 SKUs and moderate volume; increasingly fragile beyond that.

Method 3: Dedicated inventory software

Past a certain point — multiple warehouses, bundles and kits, assembly, thousands of SKUs — inventory management outgrows both spreadsheets and QBO's native tracking. Tools in the Cin7, Katana, or inFlow class track quantities and costs as their core job and push summarized COGS and inventory-value entries to QuickBooks.

Strengths: built for the problem; handles landed cost, assemblies, and multi-location properly. Weaknesses: real monthly cost, real implementation effort, one more sync to maintain. The right answer when inventory complexity is the bottleneck — not before.

A Worked Example Month

Fictional store, round numbers. You sell three SKUs of ceramic drinkware. In March, a shipment lands: $42,000 of product, $4,800 in ocean freight, $1,200 in duties — $48,000 total landed cost.

When the shipment lands (entered via the supplier and freight bills):

Debit Inventory $48,000 · Credit Accounts Payable / Cash $48,000

March's P&L: untouched. Your balance sheet now carries the stock as an asset.

During March, you sell 1,620 units across the three SKUs for $51,000 in revenue. At month end, you pull units sold per SKU from Shopify and multiply by landed cost:

SKU Landed cost/unit Units sold Náklady na prodané zboží
Mug, 12 oz $6.40 900 $5,760
Tumbler, 16 oz $8.10 520 $4,212
Carafe set $19.50 200 $3,900
Total 1,620 $13,872

The month-end journal entry:

Debit Cost of Goods Sold $13,872 · Credit Inventory $13,872

March's gross profit: $51,000 − $13,872 = $37,128, a 72.8% gross margin. The remaining $34,128 of the shipment stays on the balance sheet, waiting to become April's, May's, and June's COGS as it sells.

Now run the same month the wrong way — the whole $48,000 expensed on arrival. March shows $51,000 in revenue against $48,000 in "cost": a 5.9% margin. April, with similar sales and no purchase, shows nearly 100%. Same store, same products, and two numbers that are both useless. That's the entire difference the timing makes.

Where the Sales Side Fits

Every method above depends on the same thing: knowing exactly what sold, per SKU, per month, and having clean revenue in QuickBooks to match your COGS against. If your Shopify orders land in QBO as lump-sum deposits — or not at all — the COGS entry has nothing trustworthy to pair with, and gross margin stays fiction no matter how good your landed-cost spreadsheet is.

That revenue side is the part worth automating first, and it's the part LedgerPort handles: orders, refunds, fees, and payouts synced from Shopify to QuickBooks with products mapped to the right QBO items and income accounts mapped where you want them. LedgerPort doesn't calculate your COGS — that's your landed-cost math or your inventory tool — but it makes sure the revenue those costs match against is accurate to the penny, month after month. There's a free plan for stores up to 30 orders a month, and paid plans start at $25/month.

See how LedgerPort keeps the revenue side of your gross margin clean →

The Version of You That Trusts the P&L

Six months from now, the March container lands and your P&L doesn't blink. Gross margin reads 72% in March, 71% in April, 73% in May — a signal tight enough that a two-point drop sends you to check freight rates instead of doubting your books. When your CPA asks for inventory on hand, it's a balance sheet number, not a guess.

The mechanics in this post are the whole trick: purchases to the Inventory asset, a landed cost per SKU, cost recognized in the month the unit sells. Pick the tracking method that matches your scale — the monthly journal entry is enough for most stores — and the purchasing schedule stops writing your P&L. COGS is one pillar of a clean e-commerce ledger; for the full picture, start with our complete guide to e-commerce accounting.

Ukončete ruční zadávání dat navždy

Propojte svůj obchod s QuickBooks za 15 minut a zbytek nechte na LedgerPort.

Začít zdarma Zobrazit ceny →

Spojte se s námi:

Automatizujte své účetnictví pro e-commerce ještě dnes

Propojte svůj obchod Shopify nebo WooCommerce s QuickBooks za méně než 15 minut — bez nutnosti kódování.

14denní záruka vrácení peněz · K dispozici bezplatný plán