featured article

Shopify Shipping and Fulfillment Costs: How to Track Them Accurately

Nachman Lieser

July 8, 2026

Charging customers $7 for shipping does not mean shipping costs you $7. The gap between what you collect and what you spend on fulfillment is a margin leak most sellers never measure.

Shipping is two separate things in your books, and conflating them is where the error starts. There is shipping income, the amount you charge the customer at checkout. And there is shipping expense, the amount carriers, 3PLs, and fulfillment centers charge you to actually move the goods. These are different numbers, they live in different parts of the income statement, and the difference between them is a real component of your margin.

For a $2M+ seller, fulfillment is frequently the second-largest cost after the product itself. Tracking it as a single vague "shipping" line tells you nothing about whether your free-shipping threshold is profitable, whether your 3PL is competitive, or whether a heavy SKU is quietly losing money on every order. Granular tracking turns fulfillment from a black box into a managed cost.

The components of fulfillment cost

Fulfillment is not one charge. For a typical Shopify operation running through a 3PL or self-fulfilling, the costs break down into distinct pieces, each worth tracking on its own:

COST COMPONENTWHAT IT ISTYPICAL ACCOUNT
Carrier postageWhat UPS, USPS, FedEx charge to shipShipping expense
Pick and pack3PL labor to assemble each orderFulfillment expense
Packaging materialsBoxes, mailers, fill, tapePackaging expense or COGS
Storage / warehousing3PL or warehouse space feesWarehousing expense
Receiving fees3PL charge to take in inventoryInbound / inventory cost
Returns processingCost to handle and restock returnsReturns expense

Roll all of these into one line and you cannot answer the questions that matter. Split them and you can see exactly where fulfillment cost is concentrated and whether any piece is out of line.

Shipping income vs shipping expense

Start with the cleanest distinction. Shipping income (what you charge customers) belongs in revenue, on its own line, separate from product sales. Shipping expense (what carriers charge you) belongs in costs. The two should never be netted against each other into a single number, because netting hides the relationship you most need to see: are you collecting more or less than shipping actually costs you?

A store that offers free shipping collects zero shipping income but still pays full shipping expense. That is a deliberate margin decision, and you can only evaluate it if both numbers are visible. A store charging flat-rate $7 shipping while paying an average $9 to ship is losing $2 per order on fulfillment and may not know it because the loss is buried.

Is outbound shipping a COGS or an operating expense?

Both treatments exist and both are defensible. Some sellers put outbound shipping in COGS, reasoning it is a direct cost of delivering the sale, which pulls it above the gross-profit line. Others treat it as an operating expense below gross profit. The right choice depends on how you want to read margin and should be applied consistently. What matters is that you pick one, document it, and do not flip back and forth, because inconsistency makes period comparisons meaningless. Inbound freight (the cost to get inventory to you) is more clearly a product cost and is usually capitalized into inventory, then released as COGS when the item sells.

3PL invoices are not self-explaining

A 3PL invoice bundles storage, pick-pack, receiving, and shipping into one document, often with hundreds of line items. Booking the whole invoice to a single "fulfillment" expense throws away the structure. The better practice is to split the invoice into its components and post each to the right account, so over time you can see storage creeping up (a sign of slow-moving inventory) or pick-pack costs rising faster than order volume (a sign of a problem in your fulfillment mix).

This is detailed work, and at volume it is exactly the kind of thing that should be systematized rather than done by hand each month.

Why this connects to per-product margin

The reason granular fulfillment tracking matters is that shipping cost is not uniform across your catalog. A small, light, high-margin item ships cheaply. A large, heavy, low-margin item can cost more to ship than it earns. If your books treat shipping as one pooled cost, every SKU looks equally profitable, and you keep selling the loser because the average hides it.

Per-unit cost accounting, including fulfillment, is what surfaces the loser. ConnectBooks applies FIFO COGS per unit and tracks costs at the channel and product level, so you can see true profitability per SKU rather than an average that lies. Pair accurate product COGS with honest fulfillment tracking and your margin numbers finally describe reality.

Returns are a fulfillment cost too

Returns cost money twice: the return shipping (often on you) and the labor to inspect and restock. A high return rate on a particular SKU or category quietly erodes margin through fulfillment cost, not just lost sales. Track returns processing as its own cost so a rising return rate shows up as a number you can act on, rather than a slow drain you only feel in the bank balance.

Is shipping income the same as shipping expense?

No. Shipping income is what you charge customers at checkout and belongs in revenue. Shipping expense is what carriers and 3PLs charge you and belongs in costs. They are different numbers and should never be netted, because the gap between them is a real part of your margin.

Should outbound shipping be COGS or an operating expense?

Either is defensible. Putting it in COGS treats it as a direct cost of the sale and pulls it above gross profit. Treating it as an operating expense puts it below. Choose based on how you want to read margin, apply it consistently, and document the choice so period comparisons stay valid.

How should I book a 3PL invoice?

Split it into its components (storage, pick-pack, receiving, shipping) and post each to the right account, rather than booking the whole invoice to one fulfillment line. The split lets you spot rising storage costs from slow inventory or pick-pack costs growing faster than orders.

Why track fulfillment cost per product?

Because shipping cost varies wildly by SKU. Heavy or bulky low-margin items can cost more to ship than they earn, but a pooled shipping line hides that. Per-unit cost tracking surfaces the unprofitable SKUs that an average would conceal.

Where does inbound freight go?

Inbound freight (the cost to get inventory to your warehouse) is a product cost, usually capitalized into inventory and released as COGS when the item sells. This is distinct from outbound shipping, which is the cost of delivering a sale to the customer.

ConnectBooks tracks fulfillment costs at the channel and product level with FIFO COGS per unit, so your margin reflects what shipping really costs. See plans from $149/mo at /pricing.

Take Control of Your E-Commerce Business with ConnectBooks

Running an e-commerce business comes with plenty of challenges, but ConnectBooks is here to make your life easier. With real-time insights, seamless integrations, and detailed tracking of your profitability and inventory, you can stay ahead of the game. Whether you’re selling on Amazon, Shopify, Walmart, TikTok or eBay, ConnectBooks helps you manage your finances with 100% accuracy and confidence, so you can focus on growing your business.

Ready to level up? Start making smarter, data-driven decisions every step of the way. Try ConnectBooks Free Today or Schedule a Demo