If you run an operating store, this distinction is not academic. The wrong definition hides losing orders behind a healthy-looking gross margin. Let's pin down what each term counts, then walk a real order so you can see the gap in dollars.
The short definition of each
Cost of goods sold is the direct cost of the units you sold in a period. For a print-on-demand shop, that is what your supplier charges to produce and ship the item — nothing else. For a stocked-inventory shop, it is the landed cost of the goods that left your shelves.
Cost of sales is a wider bucket. It starts with COGS and adds the other direct costs of making a sale happen: outbound fulfillment, payment processing, and often the packaging and handling tied to each order. Service businesses that carry no inventory use "cost of sales" (or "cost of revenue") precisely because they have direct delivery costs but no "goods."
That is the core of cost of revenue vs cost of goods sold too — cost of revenue is the service-world name for the same broad bucket. All three describe direct costs above the gross-profit line; they differ only in how much they sweep in.
Here is where the ranking guides get sloppy. Some assert cost of sales is "always" larger than COGS and that COGS is "always" tax-deductible while cost of sales is not. In practice the labels are used loosely across accounting software and industries, and both sit above gross profit on the income statement. What matters for a store owner is not the label but which costs you're capturing — because the costs you leave out are the ones that quietly eat your margin.
Why the difference matters for an operating store
Say you run a POD store doing 340 orders a month at a $31 average order value — about $10,540 in monthly revenue. You pay Meta roughly $2,800 a month in ad spend.
If you only track COGS, your income statement looks clean. But COGS says nothing about the payment fees on every order, the ad spend that acquired the customer, or the cost of the disputes and refunds that POD sellers eat in full. Those are exactly the costs that separate "gross margin looks fine" from "we're losing money per order."
This is the profit angle every generic definition skips. The gap between COGS and a full cost-of-sales view is where your real per-order profit lives. Our ecommerce ops economics hub walks the whole money stack for small Shopify and POD shops; this article is the accounting layer underneath it.
Worked example: the gap in one order
Take one $45 order fulfilled through a POD supplier. Here is how the two figures diverge.
Cost of goods sold (COGS) — the narrow figure:
- Supplier product cost: $17.00
- Supplier shipping charged to you: $5.00
- COGS = $17.00 + $5.00 = $22.00
That gives a gross margin of ($45.00 − $22.00) ÷ $45.00 = 51%. Looks great. This is the number a COGS-only view reports.
Cost of sales — the broader figure:
Now add the other direct costs of actually making that sale:
- COGS (from above): $22.00
- Payment processing (roughly 2.9% + 30¢ on $45): $1.61
- Custom packaging insert and handling: $0.90
- Cost of sales = $22.00 + $1.61 + $0.90 = $24.51
Cost of sales is $2.51 higher than COGS on this single order. Across 340 orders a month, that is about $853 in direct selling costs that a COGS-only report simply doesn't show.
And neither figure yet includes the customer-acquisition cost. At $2,800 of Meta spend over 340 orders, that's about $8.24 of ad spend per order. Subtract that too and your true per-order profit is $45.00 − $24.51 − $8.24 = $12.25, not the $23.00 the 51% gross-margin line implied. Same order, two very different stories.
Where each figure belongs on your P&L
Both COGS and cost of sales sit above the gross-profit line on your income statement — that part the SERP gets right. Ad spend usually sits below it, as a sales-and-marketing operating expense, which is why acquisition cost hides from gross margin entirely. If you want the accounting mechanics of booking these entries, see the cost of goods sold journal entry walkthrough and the deeper piece on recording cost of goods sold.
A related trap is confusing these direct costs with capital purchases. A one-time equipment buy is not COGS or cost of sales — it's a capital expense amortized over time. The difference between capital expenditures and operating expenses is a separate line entirely, and mixing it into cost of sales distorts your margin in the other direction.
The POD-specific twist most guides miss
For a normal retailer, a refunded item usually comes back and re-enters inventory, so the COGS loss is recoverable. For POD, there is no restock — the item was printed to order and can't be resold, so the COGS you paid your supplier is gone the moment you refund.
That's why chargebacks and refunds belong in your real cost-of-sales thinking, not as a footnote. A lost dispute typically costs a merchant around two to two-and-a-half times the order value once you add unrecoverable product, shipping, ad spend, and fees, according to chargeback.io's Shopify fee guide. On Shopify Payments, the chargeback fee itself runs $15 per dispute for US merchants and is only refunded if you win.
Run the arithmetic on the $45 order above if it turns into a lost dispute: the $45 clawed back, the $15 fee, the $22 sunk COGS, plus the $8.24 of ad spend — roughly $90 out of pocket on a $45 sale. That is a cost of sales your gross-margin line will never warn you about.
How to actually track this without a spreadsheet nightmare
Most store owners default to COGS because it's the number their supplier hands them. The broader cost-of-sales view requires stitching together supplier invoices, Shopify payment fees, ad platform spend, and refund records — per order. That reconciliation is where the profit truth lives, and it's genuinely tedious by hand.
This is the job PodVector AI was built to do. Victor, our AI employee, connects to Shopify, Meta Ads, Google Ads, and your POD supplier — Printify, Printful, or Gelato — and computes true per-order profit by pulling the product cost, fees, and ad spend into one number, then delivers the reports to your Google Drive. Victor is not a dashboard you have to read; he's an employee who does the reconciliation and every write action he takes is approval-gated, so you approve before anything executes.
If you're weighing how deep to model direct costs, the unit-economics discipline in this cost-per-seat-mile breakdown is a useful analog: the operators who win are the ones who push cost allocation all the way down to a single unit sold.
FAQs
Is cost of sales the same as cost of goods sold?
No, though they overlap and are often used interchangeably. COGS is the narrower figure — just the direct cost of the goods sold. Cost of sales is broader, adding other direct selling costs like fulfillment and payment processing. If your accounting software uses them as synonyms, check which costs are actually inside the number before you trust your margin.
Which one should my Shopify or POD store use?
Track both. Use COGS for the clean gross-margin line your accountant and taxes need. Use a fuller cost-of-sales view — ideally down to true per-order profit including fees and ad spend — for the operating decisions about pricing, product mix, and ad budgets. The COGS-only number will make losing products look profitable.
What is the difference between cost of revenue and cost of goods sold?
Cost of revenue is the service-industry name for the broad direct-cost bucket, roughly equivalent to cost of sales. It's used by SaaS, consulting, and media businesses that have direct delivery costs but no physical inventory to call "goods." For a product store, cost of sales is the more natural term; the underlying idea — all direct costs above gross profit — is the same.
Does cost of goods sold include shipping?
For POD, the shipping your supplier charges you to produce and send the item is part of COGS, since it's a direct cost of getting that unit made and out the door. Outbound shipping you subsidize or eat as a promotion is better treated as a selling cost inside cost of sales. The key is consistency — pick a treatment and apply it to every order.
Why doesn't my gross margin match my bank balance?
Because gross margin is built on COGS, which excludes payment fees, ad spend, refunds, and disputes. Those live in your broader cost of sales and in operating expenses. A store can show a healthy gross margin and still lose money once acquisition cost and POD refund losses are counted — which is exactly why per-order profit, not gross margin, is the number to steer by.