Table of Contents
- What COGS Actually Means for a POD Store
- Why Shopify's Native Cost Tracking Fails You
- The Four Costs That Make Up True POD COGS
- Manual COGS Tracking: When It Works and When It Breaks
- Automating COGS Tracking: What to Look For
- From COGS Visibility to Margin Action
- How Victor Connects COGS to Every Decision
- FAQs
What COGS Actually Means for a POD Store
COGS stands for Cost of Goods Sold. For a traditional retailer, that's a fixed price paid upfront for inventory. For a print-on-demand seller, the math is different every single time.
You never pre-buy stock. Your supplier charges you at the moment an order is placed—so your COGS is per-order, not per-batch. That distinction changes everything about how you track it.
The same T-shirt design can cost you a different amount to fulfill depending on which print provider takes the order, which print method was used, and whether the customer is domestic or international. Static tracking simply cannot keep up.
Why Shopify's Native Cost Tracking Fails You
Shopify lets you enter a "Cost per item" on every product variant. That number feeds the Profit Margin reports under Analytics → Reports, and for a standard inventory-based store, it's a reasonable starting point.
For POD sellers, it's not enough. Shopify stores one static number per variant—it doesn't update when your supplier changes prices, and it can't account for destination-based shipping charges or post-fulfillment adjustments.
Both Printify and Printful reprice blanks throughout the year. A cost you recorded in January is likely wrong by spring—and Shopify has no mechanism to flag that drift or correct it automatically.
The Four Costs That Make Up True POD COGS
Understanding what belongs in your COGS number is the first step toward automating it correctly. Miss any layer, and your margin looks better than it is.
1. Blank product cost. The base garment, mug, canvas, or accessory charged by your supplier. This is the number most sellers track—and the most variable, because it depends on the SKU, the print area, the provider, and your plan tier.
2. Print or embroidery fee. Charged on top of the blank. It varies by print method (DTG vs. embroidery vs. sublimation) and by the number of print locations on the product.
3. Destination-based shipping. Your POD supplier charges real shipping at the moment of fulfillment. The same SKU can cost materially more to ship internationally than domestically—a gap that static COGS tracking ignores entirely.
4. Supplier plan adjustments. Printify Premium and similar discount tiers shift your true COGS the moment they're activated. A shirt that costs one amount to fulfill on a free Printify plan might cost materially less on a paid plan—and your margin reports need to reflect that immediately.
None of these four layers is optional. Leave any one out and you're optimizing against a number that doesn't reflect reality.
Manual COGS Tracking: When It Works and When It Breaks
Manual tracking means exporting your Shopify orders, pulling fulfillment invoices from Printify or Printful, and reconciling them in a spreadsheet. For a store doing fewer than 50 orders a month, this is manageable.
As you grow, the process breaks in predictable ways. Supplier price changes hit mid-month and you don't catch them until the next export. International orders inflate your apparent costs and you only see it in aggregate. Ad spend attribution requires a separate pull from Meta or Google and a VLOOKUP that someone has to run.
The spreadsheet approach also gives you a snapshot, not a live signal. By the time you act on a margin problem spotted in a weekly export, you may have run dozens more orders at a losing margin. Manual tracking tells you what happened—it doesn't help you stop the bleed in time.
If you're scaling up, check out the guide on how to bulk update prices across Shopify collections as a companion workflow for when your COGS tracking reveals you need to reprice at scale.
Automating COGS Tracking: What to Look For
A proper COGS automation system for POD sellers needs to do four things well.
Pull supplier costs before an order is placed. You need to know your margin on a product before you price it and advertise it—not after 30 orders have shipped. The best systems pull catalog costs from Printify, Printful, and Gelato so you can see margin on any product with zero sales history.
Update costs when suppliers reprice. If your POD provider raises base costs on a SKU, that change needs to flow through to your margin reports the same day—not at your next manual export. Automation that relies on you to re-enter costs manually isn't really automation.
Add ad spend to the per-order profit number. Gross margin tells you what you kept after fulfillment. True profit tells you what you kept after the ad that brought the customer in. A COGS automation system without ad spend integration gives you an optimistic number that can mask a losing store. See also which AI ecommerce automation approach improves reporting dashboards for sales for a deeper look at how the layers connect.
Turn the number into an action, not just a report. COGS visibility is only valuable if it changes what you do next. The best automation systems don't just surface margin data—they connect that data to pricing decisions, ad budget adjustments, and product decisions.
For context on how COGS fits into the broader print-on-demand strategy picture, read the strategy hub and the print-on-demand topic overview.
From COGS Visibility to Margin Action
Seeing your real COGS is step one. The question is what you do with it.
The most common margin problems POD sellers find once they have accurate COGS are: products priced below margin after ad costs, international orders that look profitable until shipping is included, and hero SKUs whose margins eroded after a supplier price change they didn't catch.
Each of these has a different fix. An under-priced product needs a price adjustment. A bad-margin product driving ad spend needs a campaign pause or a budget cut. A SKU whose costs went up needs either a price increase or a supplier switch. Good COGS automation connects the insight to that specific action.
For example, if a supplier inventory problem is eating into your margin through rush fulfillment, the playbook on how to pause Meta ad campaigns when Printify inventory runs low shows you how to stop spending behind a fulfillment problem before it compounds. Similarly, if your COGS data reveals that repeat customers are your most profitable segment, automating Klaviyo lifecycle flows is the logical next move to protect that margin. And if you want to project which customer segments will drive Q4 margin, the repeat customer revenue prediction guide for Q4 covers that specifically.
For fulfillment speed decisions that affect your per-order cost structure, also see express POD fulfillment.
How Victor Connects COGS to Every Decision
Victor is the AI employee inside PodVector who reads your Shopify orders, your Printify, Printful, and Gelato catalog costs, your Meta and Google ad spend, and your Klaviyo data—and then tells you the next move to grow your profit.
Here's what that looks like in practice for COGS tracking.
Before you make a single sale, Victor pulls your Printify, Printful, and Gelato product costs so he can tell you the margin on any product at your current list price. You don't need a single order to know whether a product is worth advertising. This is different from any static "Cost per item" field—Victor reads the live catalog cost, so when your supplier reprices a SKU, that change shows up immediately.
After orders come in, Victor works out true profit per order: what the customer paid, minus the supplier cost (blank + print fee + destination-based shipping), minus Shopify and payment fees, minus the ad spend that brought the customer in. That's your real number—not gross margin, not an estimate.
When the number reveals a problem, Victor doesn't just show you a chart. He tells you the specific move—reprice this product, pause this campaign, shift budget away from this ad set—and shows you the exact change with an Approve or Reject button. You approve, and Victor makes the change for you on Shopify, Meta Ads, Google Ads, or Klaviyo.
Every Monday, Victor sends a Weekly Health Report on last week's products, traffic, ads, and margins—so margin problems don't hide between reporting sessions. Every material action waits for your approval; Victor never makes a change without showing it to you first.
If you want to understand the full scope of what Victor can read and act on, the Printify login and integration guide covers the connection setup, and the broader print-on-demand strategy resources explain how it all fits together.
Stop guessing your margin. Let Victor read your real numbers.
Victor pulls your Printify, Printful, and Gelato costs, adds your Shopify fees and ad spend, and tells you the exact product or campaign to fix—then makes the change when you approve it.
FAQs
Does Shopify automatically track COGS for print-on-demand sellers?
Shopify stores a single static "Cost per item" per variant, and it uses that number in its Profit Margin reports. For POD sellers, that field is a starting point—not a real answer. It doesn't update when Printify or Printful reprice SKUs, it doesn't account for destination-based shipping charges, and it has no connection to the ad spend that drove each sale. You need a layer on top of Shopify to track true COGS automatically.
What's the difference between COGS and true profit for a POD store?
COGS covers your fulfillment cost: the blank product, the print fee, and supplier-charged shipping. True profit subtracts everything else on top—Shopify and payment-processor fees, ad spend attributable to that order, app subscriptions, and any refunds or chargebacks. A product can have a healthy gross margin after COGS and still be unprofitable once ad costs are factored in. Both numbers matter; only tracking one gives you a false read.
How often do Printify and Printful change their prices?
Both providers reprice blanks throughout the year—sometimes on individual SKUs, sometimes across categories. There's no fixed schedule. This is exactly why static COGS tracking breaks down: a cost figure that was accurate in January may be meaningfully wrong by April, and neither Printify nor Printful sends an automatic alert to update your Shopify "Cost per item" field.
Can I see my POD product margins before I make any sales?
Yes—if your COGS automation pulls catalog costs from Printify, Printful, or Gelato directly. Victor does this: he reads your supplier catalog costs before you sell anything, so you can see the margin on a product at any list price with zero orders. That lets you make pricing and advertising decisions before you commit ad spend, not after.
What should I do when COGS tracking reveals a product is losing money?
The fix depends on where the leak is. If supplier cost has risen and your price hasn't moved, reprice the product. If ad spend is the culprit, reduce the budget or pause the campaign on that product and shift spend to higher-margin SKUs. If international shipping is eroding margin on a specific design, consider geo-targeting your ads to domestic audiences or adding an international shipping surcharge. Victor identifies which of these applies and proposes the specific change for your approval.
Does automating COGS tracking require a developer?
No. The right tools connect to Shopify, your POD supplier accounts, and your ad platforms without custom code. Victor connects to Printify, Printful, Gelato, Shopify, Meta Ads, Google Ads, and Klaviyo—and starts reading your real numbers as soon as you link your accounts. No developer, no custom integration, no spreadsheet gymnastics.
How does ad spend fit into COGS tracking for POD?
Strictly speaking, ad spend is not COGS—it's a customer acquisition cost that sits below gross profit on a P&L. But for POD sellers running Meta and Google campaigns, it's the line that most often turns a profitable-looking product into a losing one. A complete COGS automation system needs to pull ad spend per order and include it in the true profit calculation, or you're optimizing against an incomplete number.