Record cost of goods sold by matching each sale to the direct cost of producing it — for a print-on-demand store, that is the supplier's product charge plus the shipping you paid, booked in the same period as the order. Do it per order instead of once a quarter, and COGS stops being a tax formality and becomes the number that tells you whether each sale actually made money.

If you already run an operating store, you don't need another post explaining that COGS means "cost of goods sold." You need to know how to record it so the figure is right at the line-item level — because that is the only version of COGS that feeds a true profit number.

The ranking guides on this keyword stop at the textbook formula and a sample journal entry. They assume you hold inventory on a shelf. For a print-on-demand (POD) store, almost none of that applies the way they describe, and the gap is exactly where sellers misstate their margin.

What recording cost of goods sold actually means

COGS is the set of direct costs tied to producing the specific items you sold in a period — not your overhead, not your ads, not your Shopify subscription. The core accounting rule is the matching principle: you recognize the cost in the same period as the revenue it generated.

The classic formula every guide repeats is:

COGS = Beginning inventory + purchases − ending inventory.

That formula was built for a store that buys stock, holds it, and sells it down. It answers "how much of my shelf did I consume?" For a POD operator, the answer is almost always that your shelf is empty.

The per-order reality for a POD store

Here is the part the generic articles miss. You don't hold inventory — the item is printed only after the order is placed. So your beginning and ending inventory are both effectively zero, and the formula collapses to:

COGS = what your supplier charged you to make and ship the orders in the period.

That is cleaner than it sounds, and it changes how you record. You have two valid methods, and for POD one is far more useful.

  • Periodic: total up every supplier charge for the month and book it in one entry. Simple, but it hides per-order economics.
  • Perpetual (per-order): record the production cost of each order the moment it is fulfilled. More entries, but it is the only approach that lets you see profit on a single sale.

For an operator who wants to know which products and which price points actually earn, the per-order method wins. The broader operations economics all build on getting this line right.

Worked example: recording COGS on a month of orders

Say you run a store doing 340 orders a month at a $31 average order value, with $2,800 a month in Meta spend. Your supplier (Printify or Printful, say) charges $12.50 per unit plus $4.75 shipping on your bestselling tee.

Per order, your COGS is:

$12.50 + $4.75 = $17.25

Across the month:

Line Calculation Amount
Revenue 340 × $31 $10,540
COGS (supplier product + shipping) 340 × $17.25 $5,865
Gross profit $10,540 − $5,865 $4,675
Gross margin $4,675 ÷ $10,540 44.4%

That $5,865 is the number you record as cost of goods sold for the month. Everything below the gross-profit line — ads, apps, your time — is operating expense, not COGS.

The periodic journal entry

If you book it monthly, the entry is one line. Because you pay the supplier per order rather than pre-buying stock, you credit cash or accounts payable instead of an inventory asset:

Account Debit Credit
Cost of goods sold $5,865
Accounts payable / Cash (supplier) $5,865

The perpetual, per-order entry

If you book it per order — the method that actually earns its keep for POD — each fulfilled order posts its own small entry at the moment the supplier charges you:

Account Debit Credit
Cost of goods sold $17.25
Accounts payable (supplier) $17.25

Do that 340 times and you land at the same $5,865 — but now you can filter COGS by product, by variant, by promotion, and see exactly where margin leaks.

What belongs in COGS — and what doesn't

The single most common recording error is dumping the wrong costs into COGS, which flatters or wrecks your gross margin depending on which way you err.

Belongs in COGS: the supplier's per-unit production charge, the shipping the supplier bills you, and any per-order printing or personalization fees.

Does NOT belong in COGS: Meta and Google ad spend, your Shopify plan, design apps, transaction/processing fees in most setups, and your own labor. Those are operating expenses. The textbook guides are right on this one point, and it matters: misclassifying your $2,800 of Meta spend as COGS would understate gross profit by that full amount and make every product look unprofitable.

If you want the clean separation between what sits above and below the gross-profit line, our guide on how to forecast operating expenses walks the expense side in the same framework.

Where POD makes COGS trickier than textbook inventory

Three POD-specific wrinkles never show up in the standard articles, and each one quietly distorts recorded COGS.

Refunds don't return inventory. When a stocked retailer refunds an order, the item comes back and re-enters inventory — only shipping is lost. A printed-on-demand item can't be restocked, so when you refund, the COGS you already recorded stays spent. Record the refund as a revenue reversal, but leave the production cost where it is; it's a real, unrecoverable cost of that sale.

Chargebacks eat COGS on top of the fee. If a customer disputes a charge and you lose, you lose the revenue, the already-spent COGS, and a chargeback fee — a flat $15 per dispute on US Shopify Payments accounts, refunded only if you win. Your recorded COGS for that order doesn't disappear; it just stops having revenue attached to it.

Supplier charges vary by order. Shipping cost shifts with destination, and product cost shifts with variant and promotion. A per-order recording method captures that variance automatically; a monthly lump-sum hides it, so you never learn that your international orders carry a thinner margin.

The profit angle the accounting guides skip

Recording COGS correctly isn't bookkeeping hygiene — it's the input to the only question that matters: did this order make money?

Take the same store. Gross profit per order is $31 − $17.25 = $13.75. But you spent $2,800 on Meta across 340 orders, so ad cost per order is $2,800 ÷ 340 = $8.24. True profit per order is:

$13.75 − $8.24 = $5.51

That $5.51 is invisible unless COGS is recorded per order and sits next to the ad spend for the same orders. This is the full-funnel math the unit-economics breakdown in the Joby investor deck illustrates at a different scale, and it's the same discipline behind the operators interviewed on the ecommerce operations podcast.

Stitching production cost to ad spend by order, across live data, is exactly the work PodVector AI's Victor does. Victor is an AI employee that connects to Shopify, Meta Ads, Google Ads, Printify, Printful, Gelato, and Klaviyo, and computes true per-order profit — product cost, shipping, and acquisition cost on every order — then delivers the reports to Google Drive. Victor is not a dashboard you log into to read charts; he does the reconciliation for you. You can put Victor to work on your store and stop hand-recording COGS across spreadsheets.

For the full picture of how recorded COGS rolls up into contribution margin and break-even, the ecommerce operations economics hub ties the pieces together.

FAQs

Do I record COGS when the order is placed or when the supplier charges me?

Record it at fulfillment — the point the supplier produces the item and bills you — so the cost lands in the same period as the revenue. For most POD stores the order and the supplier charge happen within hours, so the timing difference is rarely material. If an order straddles a month-end, match the COGS to the period you recognized the sale.

Is shipping part of COGS for a POD store?

The shipping your supplier charges you to produce and send the item is a direct cost of that sale, so most operators record it in COGS. The shipping you separately pay for returns or your own promotional free-shipping giveaways is usually an operating expense. Keep the two buckets distinct so your gross margin reflects production, not marketing choices.

Why does my recorded COGS make my margin look worse than other sellers brag about?

Because you're probably recording it honestly and they're probably not. A lot of "70% margin" claims exclude supplier shipping, or quietly leave out the production cost on refunded and disputed orders. A fully loaded COGS — product plus shipping on every fulfilled order, with refunds and chargebacks left as spent cost — gives a lower but real number you can actually run a business on.

Periodic or perpetual — which should a POD store use?

Perpetual (per-order), if you can automate the capture. It's the only method that lets you see profit on a single product or a single promotion. Periodic monthly recording is acceptable for tax filing, but it averages away exactly the per-order detail you need to decide what to scale and what to kill. If you're recording by hand, start periodic and move to per-order once a tool pulls the supplier charges for you.

Does recording COGS change if I also sell on a marketplace?

The production cost recording is the same, but marketplace fees complicate the picture. On your own Shopify store those selling fees are operating expenses, not COGS. On a marketplace, high percentage fees eat the same gross profit your COGS defines — which is why the per-order margin you record on your own store is the cleaner baseline for deciding where a product is worth selling.