Track profitability by contract or SKU by computing true per-order profit first — revenue minus product cost, shipping, payment fees, returns reserve, and allocated ad spend — then tag every order with its SKU and its contract and sum the per-order profit inside each tag. The grain you report at (SKU vs. contract) only changes how you group the orders; the per-order math underneath is identical, and it is the part most stores get wrong.

If you run a store with real sales history, you already know store-average margin lies. A blended "we keep about twenty percent" hides the fact that one hoodie SKU carries the business while a mug SKU quietly loses money on every order. The fix is to stop averaging and start grouping — and the two most useful groupings are the SKU and the contract.

The two grains: SKU and contract

A SKU is one sellable variant — a specific design, color, and size. Tracking profit by SKU answers "which products should I scale, cut, or reprice?"

A contract is a recurring commercial arrangement that spans many orders: a wholesale deal with a gym or a coffee shop, a licensing agreement, or even a fulfillment agreement with one print provider versus another. Tracking profit by contract answers "is this relationship worth keeping at the price I negotiated?"

Both roll up from the same atom: the true profit of a single order. Get that atom right and you can slice it either way. Get it wrong and both views are fiction.

What "true" profitability requires (the cost stack)

Most sellers stop at revenue minus product cost and call the rest margin. That number is gross margin, not profit, and for print-on-demand it overstates reality badly. A complete per-order stack for a POD store has five variable layers:

  • COGS — the blank garment plus print charge your provider bills (Printify, Printful, or Gelato).
  • Shipping — the carrier cost the provider passes through, which varies by destination.
  • Payment processing — the gateway's cut of the sale.
  • Returns reserve — a set-aside for refunds and reprints, since you won't know which orders fail until later.
  • Allocated ad spend — the slice of your Meta and Google budget that this order should carry.

On the returns line, a common practice is to reserve two to five percent of revenue against refunds and defects, according to ConnectBooks. Booking that reserve per order stops a clean-looking month from collapsing when the chargebacks land.

Worked example: one SKU, one order

Say you run a store doing 420 orders a month at a $38 average order value, with $3,400 in combined Meta and Google spend. Walk one order of a $38 hoodie SKU:

Line Amount Note
Revenue $38.00 sale price
− COGS (blank + print) −$17.00 provider bill
− Shipping −$5.50 carrier pass-through
− Payment fee (3.5%) −$1.33 gateway cut
− Returns reserve (3%) −$1.14 refund set-aside
= Contribution before ads $13.03
− Allocated ad spend −$8.10 $3,400 ÷ 420 orders
= True per-order profit $4.93

That $4.93 is 13% of the $38 sale. A healthy POD net margin generally runs between fifteen and twenty-five percent after fees, COGS, ads, and refunds, while anything under ten percent usually signals hidden costs, per NovaData's benchmarks. This SKU sits just below the healthy band — invisible at the store-average level, obvious the moment you compute it per order.

The numbers above are an illustration, not a market claim — your provider bill, shipping, and ad efficiency will differ. The discipline is what matters: every variable cost gets attributed to the order before you declare any profit.

Rolling per-order profit up by SKU

Once each order carries a true-profit figure, SKU profitability is just a sum. Tag every order line with its SKU, then add up per-order profit within each SKU and divide by units sold for a per-unit average.

The reveal is almost always a distribution, not a flat line. You might find your top three SKUs earning six to nine dollars an order while a long tail sits near break-even or below. That tail is where repricing, bundling, or retiring a design pays off — and you can only see it at the SKU grain.

Watch the denominator. The same design fulfilled by two providers is effectively two cost profiles; if Printful's blank runs higher than Printify's on the same tee, treat them as separate lines or your SKU average blends two different economics. Our SKU profitability guide walks the full per-variant breakdown if you want the deeper version.

Rolling it up by contract

A contract rolls up the identical per-order atom — you just group by the deal instead of the product. This is where wholesale and B2B sellers get burned, because a negotiated price feels like a win until you net out the real cost stack.

Say a local gym signs a standing contract for 60 custom tees a month at a negotiated $22 each, down from your $31 retail. Your COGS on that tee is $12, you ship one bulk box for a flat $40, and there's no ad spend because the deal came direct. Per unit: $22 − $12 = $10, minus roughly $0.67 of shipping ($40 ÷ 60) and a payment fee, landing near $8.90 of contribution — about $534 across the contract.

Compare that to 60 retail orders of the same tee carrying $8 of allocated ad spend each, and the no-ad wholesale contract can out-earn retail even at a steep discount. You would never see that without grouping by contract. The reverse happens too: a contract priced "to move volume" can run below break-even once you load in the real fulfillment and processing costs, and tracking it by contract is the only way to catch it before renewal.

The allocation problem everyone gets wrong

Ad spend is the hardest line, and it's where the SERP's how-to guides go quiet. Two defensible methods:

  • Blended allocation — total ad spend ÷ total orders, applied evenly. Simple, and honest when most orders come from a shared top-of-funnel. That's the $8.10 we used above.
  • Direct allocation — attribute spend to the SKUs or campaigns that drove it, when your platform data is clean enough to trust.

Blended understates your winners and overstates your losers; direct is more precise but leans on platform attribution that each channel self-grades and over-claims. Pick one method, write it down, and hold it constant — switching mid-analysis makes two periods uncomparable. If you want the full attribution picture across Meta and Google, the marketing dashboard breakdown for Shopify covers how blended and channel views diverge.

Manual spreadsheet vs. automated

You can do all of this in a spreadsheet, and under about fifty SKUs you probably should to learn the mechanics. Pull your sales export, your provider cost report, and your ad reports; match them by order ID; and compute per-order profit before grouping.

The honest cost is time. Doing this by hand runs roughly four to eight hours per month per account, according to NovaData, and it degrades fast as SKU count, channels, and contracts multiply. The failure mode isn't the formula — it's stale COGS, missed refunds, and multi-SKU orders split wrong, which quietly corrupt every downstream grouping.

Above that scale, the practical move is to let the data flow in automatically and keep the per-order math identical. This is the connective tissue between raw numbers and decisions — the broader picture lives in our ecommerce business intelligence hub, and the downstream reporting view in the ecommerce performance analytics guide.

How PodVector AI handles it

PodVector AI gives you Victor, an AI employee that works over your live store data rather than a report you have to assemble. Victor connects to Shopify, Meta Ads, Google Ads, Printify, Printful, Gelato, and Klaviyo, and computes true per-order profit from the real cost lines — provider COGS, shipping, fees, and allocated ad spend — so the SKU and contract rollups sit on the same trustworthy atom.

Because the per-order profit is already computed, grouping it by SKU or by a specific wholesale contract is a question you can simply ask, and Victor can deliver the result as a report to your Google Drive. Victor is not a dashboard you log into to read charts — it's an operator that does the pull, the match, and the math for you. Every write action it takes is approval-gated, so you stay in control of anything that changes.

Start with PodVector AI and let Victor compute per-order profit across your SKUs and contracts.

FAQs

What's the difference between tracking profit by SKU and by contract?

Same per-order math, different grouping. By SKU you sum per-order profit within each product variant to decide what to scale or cut. By contract you sum it within a commercial deal — a wholesale account, a license, or a fulfillment agreement — to decide whether that relationship is worth its negotiated price.

Why not just use store-average margin?

Because averages hide the distribution. A twenty-percent store average can contain SKUs earning nine dollars an order and others losing money, and a blended number gives you no lever to pull. Grouping by SKU or contract surfaces exactly which items and deals make or lose money.

Should ad spend be included in SKU-level profit?

Yes, if you want true profit rather than gross margin. Allocate it either blended (total spend ÷ total orders) or directly to the campaigns that drove each SKU, then keep that method constant so periods stay comparable. Leaving ads out makes every SKU look healthier than it is.

How do I handle the same product fulfilled by two print providers?

Treat it as two cost profiles. If Printify and Printful bill different amounts for the same blank, blending them into one SKU average masks which provider is cheaper. Keep the lines separate, or at least track provider as a dimension so you can compare.

At what point should I stop using a spreadsheet?

Roughly when manual pulls stop fitting in a few hours a month — often past fifty SKUs or once multiple channels and contracts are in play. The spreadsheet doesn't get the formula wrong; it gets stale, and stale COGS or missed refunds corrupt every rollup built on top.

How often should I recompute profitability by contract or SKU?

Monthly is the minimum for pricing and renewal decisions, since refunds and reprints settle after the sale. If you're actively scaling ad spend, a weekly read on your top SKUs catches margin erosion before a full month of loss accumulates.