“Free shipping” is a phrase that describes what the buyer sees, not what actually happens to the cost. Someone pays for the carrier to move the box: either the buyer, through a higher listed price that absorbs the shipping cost, or the seller, through a margin reduction on every order. When a store advertises free shipping, the cost has not disappeared, it has moved into the product price or into the margin line, and if the bookkeeping does not track it explicitly, it becomes invisible in exactly the report that most needs to show it: per-order and per-SKU profitability.
Most sellers know this in the abstract. Where it goes wrong in practice is in how shipping cost gets recorded: lumped into a single general “shipping expense” account at the store level, disconnected from the specific orders and SKUs that generated it, which makes it impossible to see whether a given order or product is actually profitable once its real shipping cost is included.
Why “Free” Shipping Still Has a Real Cost
There are two structural ways free shipping gets funded, and most stores are doing some blend of both without a clean split between them:
Built into the listed price. The product’s selling price is set higher than it would be if shipping were charged separately, with the shipping cost embedded in that higher price. This works cleanly in theory, but it requires the price increase to actually reflect the real average shipping cost for that product; a flat price increase across a catalog with widely varying product weights and sizes will overcharge for shipping on light items and undercharge on heavy ones.
Absorbed directly into margin. The listed price stays where it would have been with paid shipping, and the shipping cost is simply eaten as a margin reduction on every order. This is common on marketplaces where price competitiveness against other listings makes raising the price to cover shipping impractical, and on Shopify stores using free shipping as a conversion-rate lever without repricing to offset it.
Neither approach is wrong on its own, but a store needs to know which one it is actually running, and by how much, to understand true per-order margin. A store that believes it built shipping into pricing, when the actual average shipping cost has crept above what was priced in, is absorbing an unplanned margin loss on every order without visibility into it.
Allocating Shipping Cost Per Order and Per SKU
The fix is to track shipping cost as a per-order (and, where products vary significantly in size or weight, per-SKU) cost, the same way landed cost of goods is tracked per unit, rather than as a single lump expense account that only shows a monthly total disconnected from any specific sale.
A workable allocation approach:
- Pull the actual carrier cost per shipment from the shipping label provider or platform (Shopify Shipping, Amazon’s fulfillment fee structure, a third-party carrier account, or a 3PL’s shipping pass-through) rather than assuming a flat average
- Attribute that actual cost to the order it shipped, and where an order contains a single SKU, to that SKU
- For multi-item orders, allocate the shipping cost across the SKUs in the order, commonly by weight or dimensional weight proportion, since a flat per-unit split misrepresents cost when order contents vary in size
- Compare the allocated shipping cost against the shipping revenue (if any is charged) or against the shipping amount assumed to be built into the price, to see the actual shipping margin or shipping cost drag by SKU
This produces a per-SKU shipping cost figure that can sit alongside landed cost of goods and platform fees in a true contribution margin calculation, rather than a store-level shipping expense total that says nothing about which products are driving the cost.
Carrier Cost Variability Breaking Flat-Rate Assumptions
Carrier pricing is not flat. It varies by actual and dimensional weight, package dimensions, origin and destination zone, and service level, and rate cards are updated periodically by every major carrier. A store that prices free shipping into its catalog based on a flat assumed shipping cost per order, without revisiting that assumption as the product mix or carrier rates change, will drift out of alignment over time, typically in the direction of underpricing for heavier or bulkier items as they are added to the catalog.
This is a particular risk for stores that expanded their product range after the free-shipping pricing decision was originally made. A product line’s shipping cost assumption set when the catalog was all small, light items does not hold once a heavier or larger product is added under the same free-shipping policy, and the newer product can be shipping at a loss that a store-level shipping expense total will not surface.
Platform-Subsidized Shipping and Double-Counting Risk
Several platforms bundle or discount shipping cost in ways that create a risk of either missing the true cost or double-counting it:
| Program | What it does | Double-counting risk |
|---|---|---|
| Shopify Shipping discounted rates | Provides discounted carrier rates through Shopify’s negotiated volume pricing | Recording the discounted rate as the shipping expense while also assuming a separate margin-drag allocation for shipping already built into pricing can double the assumed cost |
| Amazon FBA fulfillment fees | Bundles pick, pack, and outbound shipping into a single per-unit fulfillment fee, already reflected in the settlement report | Treating FBA outbound shipping as a separate cost on top of the fulfillment fee already recorded, rather than recognizing that shipping is embedded in that fee, overstates total shipping cost |
| Third-party carrier accounts or 3PL shipping pass-through | Carrier cost billed directly, sometimes with a markup or handling fee from the 3PL | Failing to separate the carrier cost from the 3PL’s handling or pick-and-pack fee obscures which portion is actually shipping versus fulfillment labour |
The core risk in each case is the same: a cost that is already embedded in one line item (a fulfillment fee, a bundled rate) gets recorded again separately, inflating the apparent shipping cost, or a cost that looks bundled is actually separate and gets missed entirely. The 3PL Warehousing and Fulfillment Cost Accounting guide covers the fulfillment side of this in more detail for sellers using a third-party warehouse.
Building the Per-Order Shipping Allocation Workflow
- Identify every source of shipping cost: carrier accounts, Shopify Shipping, Amazon FBA fulfillment fees, 3PL pass-through charges
- Confirm which costs are already bundled into another fee (such as Amazon’s fulfillment fee) versus billed separately, to avoid double-counting
- Pull actual per-shipment cost data rather than relying on an assumed flat rate
- Allocate multi-item order shipping cost across SKUs by weight or dimensional proportion
- Compare allocated shipping cost per SKU against any shipping revenue charged and against the amount assumed to be built into the listed price
- Flag SKUs where actual shipping cost materially exceeds what was priced in or assumed
- Revisit the pricing or shipping-cost assumption periodically, particularly after adding new products with different weight or size profiles, or after carrier rate changes
- Feed the resulting per-SKU shipping cost into the broader contribution margin calculation alongside landed cost and platform fees
Scope of This Guide
This guide covers how to identify and allocate the true cost of free and flat-rate shipping programs for Canadian e-commerce sellers. It does not cover:
- Landed cost of goods calculation, covered in Landed Cost for Canadian E-Commerce Sellers
- Third-party logistics and fulfillment fee structures generally, covered in 3PL Warehousing and Fulfillment Cost Accounting
- SKU-level and bundle margin analysis once true costs, including shipping, are known, covered in Blended SKU and Bundle Margin Analysis
- Carrier selection or rate negotiation strategy
Free shipping is a legitimate and often necessary competitive decision. What it should never be is an invisible one. A store that knows its actual per-order shipping cost, and where that cost concentrates by SKU, can make a deliberate pricing decision instead of discovering the margin impact after the fact.
Get in touch if your shipping cost currently lives in a single general expense account disconnected from order and SKU data. Building a per-order allocation is usually the missing piece in an otherwise complete margin analysis.