Profit fundamentals

True Profit on Shopify: The Costs That Arrive Late

True profit on Shopify is the number left once costs that arrive after the sale are attributed back to the orders that caused them: carrier weight adjustments, return freight, late refunds, chargebacks and fee taxes. Because revenue lands immediately and these costs land weeks later, a freshly closed month is always optimistic rather than merely uncertain.

Atul Tirkey, Co-founder, NetNet

Written by Atul Tirkey · Co-founder, NetNet

Updated September 6, 2026 · 4 min read

The word “true” in true profit is doing specific work. It is not a claim that one calculation is more accurate than another, and it is not a marketing adjective. It points at a timing problem.

A sale is recorded the instant it happens. Several of the costs that sale causes are recorded when somebody else gets around to invoicing them — a week later, a month later, occasionally a quarter later. In between, the store has a profit number that is complete on the revenue side and incomplete on the cost side. That asymmetry is what “true profit” is trying to close.

Why the gap runs in one direction

If late-arriving items were a mix of costs and credits, they would be noise and you could ignore them. They are not. Almost everything that lands after the fact is a cost.

Revenue is known at checkout. Discounts are known at checkout. Cost of goods is known as soon as the item ships. But carrier re-weighs, remote-area surcharges, return freight, restocking charges, chargebacks, dispute fees and late refunds all arrive afterwards, and every one of them is a deduction.

That makes a freshly closed month systematically optimistic rather than merely uncertain. The bias has a direction, and knowing the direction is useful even before you know the size: a month reading break-even on the first is more likely to close negative than positive.

The costs that arrive after the order

Carrier weight and dimension adjustments. Parcels get re-measured on the carrier’s belt. If the dimensions you declared were optimistic, the difference is billed later, often without reference to the order.

Surcharges. Remote-area delivery, fuel, residential delivery, peak-season levies. These are applied per parcel and appear as invoice lines rather than as part of the quoted rate.

Return freight and RTO. An undelivered parcel costs the outbound label, the return leg, and usually a handling charge. The order may also be refunded in full, so the store pays three times for a sale it never made.

Late and partial refunds. A refund issued in April against a February order changes February’s profit. Note that a partial refund does not return the shipping cost — that money is spent regardless of how much of the sale survives.

Chargebacks and dispute fees. These can be raised long after the sale, and they reverse revenue that has already been banked, counted, and spent on more inventory.

Tax charged on fees. In several markets the gateway fee itself carries tax. It is a small percentage of a small percentage, which is exactly why it never makes it into a spreadsheet.

Reshipments. A damaged item replaced free of charge doubles the fulfilment cost of an order whose revenue does not change.

Attributing a late cost back to the order that caused it

There are two ways to handle a cost that arrives in April for an order placed in February, and only one of them preserves anything useful.

The easy way is to book it to April. The month it landed absorbs it, the books balance, and nobody has to reopen anything.

The problem is that this quietly destroys every cut of the data below store level. April’s numbers now carry February’s return freight, so April looks worse than it was and February looks better than it was. Worse, the cost is attached to the wrong product, the wrong channel and the wrong customer — so product-level profitability, channel profitability and cohort analysis are all measurably wrong, in a way that never resolves.

The alternative is to attribute the cost back to the originating order. Historical figures then change after the fact, which feels wrong the first few times it happens. It is correct. The parcel that was re-weighed belongs to the order that shipped it, and any answer to “which products actually make money” depends on that link holding.

Practically, this means every late cost needs a key back to an order. Carrier invoices carry tracking numbers, gateway disputes carry transaction IDs, 3PL charges carry reference numbers. The join is usually available; it is just tedious, which is why it is the first thing dropped from a manual process.

What is genuinely un-attributable

Not everything should be forced onto an order, and pretending otherwise invents precision.

Monthly 3PL storage, minimum-volume commitments, software subscriptions, insurance — these belong to the period. They are real costs and they reduce net profit, but they are not caused by any particular sale. Spreading them evenly across orders makes a heavy month look artificially efficient and a quiet month artificially expensive.

The clean rule: if the cost would still exist had that specific order not been placed, it belongs to the period, not to the order. Everything else attaches upstream, to the sale that caused it.

What to do about it

Three habits close most of the gap without much ceremony.

Treat the first close as provisional and say so out loud, especially if someone else reads the number. Re-read the month once at around six weeks, when carrier and gateway activity has settled. And keep the join keys — tracking numbers, transaction IDs, reference numbers — attached to orders as they flow in, because reconstructing them afterwards is where manual processes give up.

None of this changes what the business earned. It changes when you find out, and how confidently you can act on a number that is only a fortnight old.

Reopening a month that already closed

The same month that closed at $11,560 of net profit, revisited eight weeks later once every invoice, dispute and refund had landed.

Net profit as first reported
$11,560
Net profit after everything landed
$9,234
Share kept
79.9%
Reopening a month that already closed
Line Amount
Net profit as first reported $11,560
Carrier weight and dimension adjustments Parcels re-measured after collection $310
Remote-area and fuel surcharges $145
Return freight on 22 undelivered parcels Outbound already paid, inbound billed separately $690
Refunds issued after the period closed On orders counted as profitable at the time $820
Chargebacks and dispute fees $265
Tax charged on gateway fees $96
Net profit after everything landed $9,234

The month lost $2,326, about a fifth of the profit it originally reported, without a single new order being touched. Nothing here was an error: every line is a real cost that simply had not been invoiced yet on the day the month closed.

Where the numbers come from

Every figure above traces to a specific field in a specific system. These are the ones that matter, and where each one goes wrong.

Data sources and their caveats
Figure Source Where it breaks
Carrier adjustments and surcharges Weekly carrier invoice line items, matched by tracking number Adjustments reference the tracking number rather than the order, so matching them back takes a lookup.
Return freight and RTO Carrier invoices for the return leg, plus 3PL restocking charges The return leg often bills under a different service code than the outbound parcel.
Chargebacks and dispute fees Gateway dispute records A dispute can be raised up to 90 days later and reverses revenue you already banked and spent.
Refunds Shopify refund records against the original order A partial refund does not return the shipping label cost, which stays spent whatever the customer gets back.

What this does not tell you

  • Attributing late costs back to closed periods means historical figures change after the fact, which is correct but uncomfortable if someone has already reported those numbers to an investor or a lender.
  • Not every late cost can be traced to a single order. Monthly 3PL storage and minimum-volume fees genuinely belong to the period rather than to any individual sale, and forcing an allocation invents precision.
  • None of this fixes a store whose gross margin is too thin. Late costs explain a gap of a few percentage points, not the difference between a viable business and an unviable one.

Frequently asked questions

Why does my profit keep dropping after the month ends?

Because revenue is recorded when the order is placed and several real costs are invoiced weeks later. Carrier adjustments, return freight, chargebacks and late refunds all attach to orders that were already counted, so a closed month drifts downward as they arrive.

Should a late cost be booked to the month it arrived or the month of the order?

To the month of the order, if you want per-product and per-channel profit to mean anything. Booking a February carrier adjustment against February punishes a month that had nothing to do with the parcels being adjusted.

How long should I wait before treating a month as final?

Most costs settle within four to six weeks, but chargebacks can arrive up to 90 days after the sale. Treat the first close as provisional, review after six weeks, and accept that disputes may still reopen it.

Does this mean my current profit number is wrong?

It means it is provisional and biased upward, which is different from wrong. Knowing the direction of the bias is most of the value — a fresh month reading break-even is more likely to close negative than positive.

Keep reading — Profit fundamentals

All profit guides

Scale profitably.

Know what every order made you.

Install Free on Shopify