Contribution Margin Math for Shopify Stores With Variable Shipping
Worked contribution margin calculations for Shopify stores where shipping cost varies by weight, zone or order size, and how it changes ad budgeting.
Written by Mantas Jurgutis — Founder, Adsify — builds the Google & Meta automation merchants use daily
Editorially reviewed by Adsify Editorial on June 1, 2026 — Reviewed against Shopify, Google Ads and Meta official documentation.
Why flat shipping assumptions break down
Every contribution margin calculation elsewhere assumes a single, flat shipping cost per order for simplicity. Real Shopify stores selling physical goods often face shipping cost that varies by weight, dimensional weight, destination zone, or number of items in the cart — meaning the flat-shipping assumption can overstate or understate true contribution margin by a meaningful amount depending on order mix. This matters directly for ad budgeting because break-even CPA and ROAS targets calculated off an inaccurate average shipping cost will misjudge campaign performance.
Building a weighted average shipping cost
Rather than picking one shipping cost, pull the last 60-90 days of actual carrier costs from Shopify shipping reports and calculate a volume-weighted average across your real order mix. Worked example: 40% of orders ship at $5.20 (small parcel), 35% at $7.80 (medium), 25% at $12.50 (large/heavy). Weighted average = (0.40×$5.20) + (0.35×$7.80) + (0.25×$12.50) = $2.08 + $2.73 + $3.125 = $7.935, roughly $7.94 per order. This single blended number is far more defensible for budgeting than an assumed flat $6 or $8.
Worked contribution margin with weighted shipping
AOV $72, COGS $23 (32%), payment fees ~$2.39 (2.9%+$0.30), weighted average shipping $7.94 from above. Contribution margin = $72 − $23 − $2.39 − $7.94 = $38.67, or 53.7% of AOV. Break-even ROAS = 1 ÷ 0.537 = 1.86x. Compare this to a naive flat-shipping assumption of $6: contribution margin would be calculated as $40.61 (56.4%), break-even ROAS 1.77x — a difference of 0.09x that, at scale, is the difference between a campaign looking marginally profitable versus marginally unprofitable.
Free-shipping-over-threshold models
Many Shopify stores offer free shipping above a cart value threshold (e.g., free over $75) while charging below it — this bifurcates contribution margin by order size and should be modeled as two separate bands rather than one blended average, since ad campaigns targeting different price points will naturally skew toward one band or the other. Worked example: orders under $75 average $58 AOV, absorb no shipping cost to the store (customer pays $6.99 flat rate), giving contribution margin of roughly 58% of AOV; orders over $75 average $110 AOV, store absorbs $8.50 average shipping, giving contribution margin of roughly 51% of AOV. A campaign promoting a specific $65 product should be judged against the under-threshold margin, not a blended figure.
Weight-based and dimensional weight surprises
Carriers increasingly bill based on dimensional weight (length × width × height ÷ a divisor factor) rather than actual weight for lightweight-but-bulky items, which can make an item that 'feels' cheap to ship actually cost significantly more than the flat rate a store might charge the customer. A store selling a lightweight but bulky home goods item might charge customers a flat $5.99 shipping fee while actual carrier cost, driven by dimensional weight, runs $9.40 — a $3.41 per-order gap that silently erodes contribution margin below what the store's spreadsheet assumes unless it's checked against actual carrier invoices.
Zone-based shipping and geographic ad targeting
Stores shipping nationally (or internationally) via zone-based carrier pricing see meaningfully different shipping cost by customer location — a worked example might show Zone 2 costing $6.10 and Zone 8 costing $14.75 for the same package. If ad campaigns aren't geographically segmented, this variance simply gets absorbed into the blended average; but a store running geo-targeted campaigns (for example, a regional promotion) should recalculate contribution margin using the specific zone mix of that campaign's target geography rather than the store-wide blended average, since it can shift break-even CPA by several dollars.
Multi-item cart shipping efficiencies
Orders with multiple items often ship more cheaply per item than single-item orders because fixed packaging costs and, in many cases, per-package carrier minimums are amortized across more units. A worked example: single-item order ships at $6.50; a 3-item order in the same package ships at $9.20, or $3.07 per item — meaning campaigns or promotions that successfully increase items-per-order (bundling, free-gift-with-purchase, quantity discounts) improve contribution margin not just through higher AOV but through lower shipping cost per unit, a secondary effect worth quantifying when justifying a bundling-focused campaign's budget.
International shipping cost volatility
Stores running international ad campaigns face shipping costs that can vary dramatically by destination country, plus potential duties/customs complexity that some stores absorb and others pass to customers via delivered-duty-paid pricing. A campaign targeting a new international market should build a separate contribution margin calculation using that market's actual landed shipping cost rather than assuming domestic economics apply — a common and costly assumption error when expanding a proven domestic campaign internationally without re-running the shipping math first.
Return shipping as a variable cost
For categories with meaningful return rates, return shipping (whether paid by the store or the customer) is a variable cost that belongs in the contribution margin calculation if the store covers it, which many do via prepaid return labels as a competitive/CX necessity. Worked example: 18% return rate, store-covered return shipping averaging $6.20, effective per-order cost = 0.18 × $6.20 = $1.12 spread across all orders (returned and kept). Adding this to the earlier $38.67 contribution margin example: adjusted contribution margin = $38.67 − $1.12 = $37.55, a modest but real reduction worth including for categories with above-average return rates like apparel or footwear.
Putting the full model together
A complete variable-shipping contribution margin model for a single order: Revenue (realized, post-discount) − COGS − payment processing fees − weighted average outbound shipping cost (segmented by threshold/zone/weight band if material) − expected return shipping cost allocation = contribution margin. This is meaningfully more work than the flat-shipping shortcut used in simpler budgeting exercises, but for stores where shipping cost genuinely varies by 30%+ across the order mix (a common threshold above which the flat assumption becomes materially misleading), it's necessary for setting an accurate break-even CPA and ROAS target.
Operationalizing this without a full-time analyst
Most Shopify stores don't have the bandwidth to rebuild this model from scratch every month. A workable middle ground: recalculate the weighted average shipping cost quarterly from actual carrier data, use threshold/zone segmentation only for campaigns specifically targeting a distinct order-size or geography, and otherwise apply the single blended figure to standard campaign budgeting. This captures most of the accuracy benefit without requiring a rebuilt model for every campaign launched.
