Quick Answer: COGS tracking for a Shopify print-on-demand store means capturing the full fulfillment cost of every order — the blank garment, the print fee, and the shipping charge paid to Printify or Printful — and tying it back to the matching Shopify order. Shopify's built-in Cost per Item field covers the blank but misses destination-based shipping and price changes. You can track it manually with a spreadsheet that combines Shopify exports with provider invoices, or automate the whole thing with PodVector, which pulls live COGS from Printify, Printful, and Shopify into one profit dashboard.

If you only need the definition, read What Is COGS in Print-on-Demand? first. For the wider profit picture, see The Complete Shopify POD Profit Guide and The Complete Guide to Profit Tracking for Shopify POD Stores. For generic Shopify COGS context (not POD-specific), TrueProfit has a decent walkthrough in their Shopify Cost of Goods Sold guide.

What COGS Means in a Shopify POD Store

Cost of Goods Sold is the direct cost of producing and delivering a product to a customer. In a traditional Shopify store, that number is usually stable — you buy inventory at a known unit cost, mark it up, and the math is clean.

Print-on-demand breaks that model in three ways. First, you never hold inventory, so "unit cost" is the supplier's charge at the moment an order is placed. Second, that charge has multiple layers: the blank garment, the print or embroidery fee, and a shipping charge that varies by destination. Third, both Printify and Printful adjust prices throughout the year — sometimes on individual SKUs, sometimes across a whole catalog — which means a COGS figure you captured in January is almost guaranteed to be wrong by April.

For a Shopify POD seller, accurate COGS tracking isn't a back-office accounting chore. It's what separates stores that scale from stores that quietly lose money on every third order.

The POD COGS Formula

The working formula for one POD order is simple:

COGS = Blank Product Cost + Print / Embroidery Fee + Shipping Charged by Provider

A concrete example using a Printify Gildan 5000 t-shirt shipped to California:

  • Blank product cost: $8.66
  • Print fee (included in provider cost): $0.00
  • Shipping charged by Printify: $4.95
  • Total COGS for the order: $13.61

Ship that same shirt to a customer in Germany and the shipping line jumps to roughly $13.95, pushing COGS to $22.61 — a 66% increase on the same SKU. A store that prices for "average" shipping and runs ads to any country is leaking margin on every international order.

For a deeper breakdown of how each piece compounds, see Printify Cost per Sale: What Sellers Should Expect and The Complete Guide to Printful Costs and Fees.

Why Shopify's "Cost per Item" Field Isn't Enough

Shopify gives every product variant a Cost per Item field. Once populated, Shopify uses it in the Finance Summary, the Profit by Product report, and the Gross Profit column on individual orders. For a brand shipping a fixed SKU from a warehouse, that field is enough.

For POD, it has three gaps that matter:

  1. It's a single number per variant. There's no field for "blank + print" versus "shipping," and no way to record destination-based shipping. Whatever you enter becomes the COGS for every order of that variant, worldwide.
  2. It doesn't update itself. When Printify bumps the Gildan 5000 from $8.66 to $9.12, nothing in Shopify changes. Your gross profit reports keep using the old number until you manually edit thousands of variants.
  3. It misses Printify Premium / Printful shipping upgrades. If you use Printify Premium for a discount on blanks (see Is Printify Premium Worth It?), or choose an expedited shipping option, those deltas don't flow into Shopify automatically.

The field is still worth populating — it's the minimum viable COGS tracker, and it powers Shopify's native profit column. But if the Cost per Item field is your only COGS source, your Shopify Gross Profit is an estimate, not a fact.

Tracking COGS Manually with Spreadsheets

Most sellers who outgrow the Shopify field move to a spreadsheet workflow. Done well, it's accurate. Done casually, it lies. A working setup looks like this:

Data sources to combine

  • Shopify order export (Orders → Export → CSV) — gives you order number, SKU, country, line total, and discount.
  • Printify or Printful order history export — gives you the actual provider charge per order including blank, print, and shipping.
  • Shopify Payments / Stripe / PayPal settlement reports — so you can later subtract transaction fees (not part of COGS, but needed for net profit).

Spreadsheet columns that matter

  1. Shopify order ID
  2. Provider order ID (Printify or Printful)
  3. SKU
  4. Destination country
  5. Blank + print cost charged by provider
  6. Shipping charged by provider
  7. COGS (sum of columns 5 and 6)
  8. Gross revenue
  9. Gross profit (revenue − COGS)

Pivot on SKU to find your real per-product margin, pivot on country to find which destinations are dragging margin down, and pivot on week to see the trend. If you want the full manual walkthrough including refunds and ad spend, the step-by-step POD profit calculation guide covers the extended version.

Where manual tracking breaks

It isn't the math — it's the keep-up. Every week you need to re-export, re-match order IDs (Printify's order number isn't the same as Shopify's), re-key any exceptions, and rebuild the pivots. Sellers shipping 50 orders a day will spend 4–6 hours a week on this. At 200 orders a day, the spreadsheet stops working and starts hiding errors.

Automating COGS with PodVector

PodVector was built specifically to close this gap for Shopify POD sellers. It connects to Shopify, Printify, and Printful via official APIs, and its agent layer — Victor — streams every order, variant, shipping charge, and price change into a live BigQuery warehouse behind the scenes.

What that gives you, as a Shopify POD operator:

  • COGS per order that actually reflects what Printify charged you — including the real destination shipping, any Premium discount, and any mid-year price change — not a stale Cost per Item field.
  • Profit by SKU, by country, by ad source, by day — the same pivots you'd build manually, already built and live.
  • Ask Victor a question in plain English — "Which SKUs lost money to EU shipping last month?" or "What's my real COGS on the Bella+Canvas 3001 after the March price update?" — and Victor answers against the live warehouse.
  • No re-keying. Ever.

Victor's architecture matters here because COGS in POD is a time-series problem, not a lookup problem. The same SKU has different true costs in January, March, and August. A live warehouse captures all of that; a flat spreadsheet captures whatever you last typed in.

Today Victor answers questions about your COGS. On the near-term roadmap, Victor also acts — flagging SKUs whose margin has compressed below your threshold, suggesting price changes, and proposing which variants to unpublish. For sellers already using an older tool, see the best TrueProfit alternatives for POD sellers and PodVector vs TrueProfit.

Five COGS Mistakes POD Sellers Make

1. Averaging shipping across destinations

The biggest single error. Plugging "$6" into Shopify's Cost per Item and calling it done means every US order is over-costed by a dollar and every EU order is under-costed by seven. Your gross profit on US orders looks worse than reality, and you'll scale the wrong campaigns.

2. Forgetting the Shopify transaction fee isn't COGS

Shopify Payments, Stripe, and PayPal fees are real costs, but they're operating expenses, not COGS. Mixing them in distorts your gross margin benchmark and makes it impossible to compare products apples-to-apples. Keep them in operating profit (see What Is Operating Profit in POD?).

3. Ignoring refunded-but-fulfilled orders

If a customer refunds after Printify has already produced and shipped the item, you paid COGS and lost the revenue. That order's "profit" is negative, and it needs to show up in your tracking that way. Shopify's native profit reports don't handle this cleanly — covered in The Hidden Costs That Kill POD Profits.

4. Not updating for provider price changes

Printify adjusted prices on dozens of popular blanks in 2025 and early 2026. If your Cost per Item fields haven't been touched since, every margin report you've run is wrong.

5. Using gross margin targets from non-POD stores

A 60–70% gross margin is normal for traditional e-commerce. POD lives at 30–45% gross margin because the supplier is doing the production. Benchmarking against the wrong baseline pushes you to price in a way your niche won't bear.

How Accurate COGS Changes Pricing

Every pricing decision downstream of COGS multiplies the error. If your COGS is off by $2, your break-even ROAS calculation is off, your profit on ad spend (POAS) target is off, and the price you need to charge to survive Meta CPMs is off.

Sellers who lock down COGS tracking first — before they scale ads, before they expand SKUs, before they negotiate with agencies — make faster pricing moves because they trust their numbers. The ones who don't end up making decisions based on Shopify's estimate and learning the truth from Stripe deposits 30 days late.

COGS Benchmarks for POD Products

Rough Shopify POD COGS-as-% of retail price benchmarks, based on Printify and Printful pricing in mid-2026:

  • Unisex cotton tee (Gildan 5000): 55–65% of retail at a $22 price point
  • Unisex premium tee (Bella+Canvas 3001): 50–60% of retail at a $26 price point
  • Pullover hoodie (Gildan 18500): 55–65% of retail at a $42 price point
  • All-over-print (AOP) tee: 55–70% of retail — AOP blanks are noticeably more expensive
  • Ceramic mug (11oz): 45–55% of retail at a $16 price point
  • Poster (18×24): 35–50% of retail at a $25 price point

Anything above 70% of retail in COGS means you're operating on a margin ads cannot support. Anything below 40% usually means either premium positioning or a pricing anomaly you'll want to verify — too low often signals a missing shipping line item, not a unicorn product.

For full product-level analysis, see POD Profit Margins Explained and Printify's Most Profitable Products.

How to Reduce COGS Without Killing Quality

Five levers that actually move the number, ranked by impact:

  1. Switch to Printify Premium or a Printful volume tier. On most Gildan and Bella+Canvas SKUs, the blank discount alone pays back the subscription past ~30 orders a month. Our breakdown: Is Printify Premium Worth It?
  2. Move high-volume SKUs to the cheaper provider. Printify and Printful price the "same" garment differently. Review your top 10 SKUs every quarter and reprice where the delta exceeds $1.
  3. Concentrate ads on domestic regions until COGS justifies international. International shipping can double COGS. Only spend on those markets once the product and price support it.
  4. Switch to cheaper blanks where the niche won't feel it. Not every buyer needs Bella+Canvas. For niches where softness isn't the sell, Gildan 5000 at $8.66 beats 3001 at ~$11.
  5. Raise price before you cut cost. A $2 price increase usually hits the bottom line harder than a $2 cost cut, with less execution risk. Test it.

FAQs

Does Shopify automatically calculate COGS for POD?

No. Shopify uses whatever value you manually entered in the Cost per Item field. It doesn't pull live costs from Printify or Printful, doesn't adjust for destination-based shipping, and doesn't update when providers change their prices. For POD, treat the Shopify field as a floor, not a ceiling.

Should shipping be included in COGS?

For print-on-demand, yes — the shipping charge that Printify or Printful bills you for the order is a direct cost of fulfilling that specific order, so it belongs in COGS. Customer-facing shipping fees you collect belong in revenue. The net of the two is your true shipping impact.

How often should I update COGS?

If you track manually, re-check Printify and Printful pricing on your top 20 SKUs at least once a month, and after any quarterly provider announcement. If you use an automated tool like PodVector, it's continuous — COGS reflects provider charges in near real time.

What's the difference between COGS and operating expenses?

COGS covers costs that only exist because a specific order happened — the blank, print, and shipping. Operating expenses (OpEx) exist regardless of orders — Shopify subscription, apps, ad spend, payment processing fees, and software like profit trackers. Gross profit = revenue − COGS. Operating profit = gross profit − OpEx.

Can I use Shopify's profit reports without populating Cost per Item?

Only in a degraded form. Without Cost per Item, Shopify's Gross Profit column is blank, and the Finance Summary treats every order as 100% profit. Populate the field with your best static estimate even if you use a separate tool for accurate COGS — it at least keeps Shopify's native reports from showing inflated numbers.

Do Printify and Printful sales tax charges count as COGS?

Sales tax charged to you by the provider on the blank is part of the fulfillment cost for that order, so it's fair to include it in COGS for profit-tracking purposes. Sales tax you collect from customers is a pass-through — not revenue, not COGS. Talk to your accountant for how to classify it for tax filings specifically.

How does COGS tracking differ on Shopify vs Etsy for POD?

On Shopify you own the entire stack, so COGS tracking requires combining Shopify order data with provider data. On Etsy, the platform already captures more order metadata, but the same Printify/Printful cost breakdown still has to be layered on. The formula is identical. The plumbing is different.


Stop Guessing at Your Shopify POD COGS

PodVector connects Shopify, Printify, and Printful and shows your real COGS per order — including destination shipping, provider price changes, and refunds — in a live dashboard. Ask Victor any profit question in plain English and get an answer in seconds.

Try Victor Free