Profit analytics

How to Calculate True Profit per Order on Shopify — Step by Step

Your Shopify dashboard says you sold $8,400 last month. Your bank account received a much smaller number, and you can’t fully explain the gap. That gap is where your fees, ad spend, shipping bills, and refunded orders live — scattered across four or five different screens that nobody combines for you.

This guide closes that gap. You’ll get the complete list of costs that sit between revenue and profit, a formula for true profit per order, a full worked example for a $29 product (every number labeled as an example), and a manual spreadsheet method you can finish this afternoon.

By the end, you can look at any order and say what it actually earned — or cost you.

Full disclosure: Seller Tales is published by JoyCraft — when we recommend our own tools below, we say so.

On this page

Why Shopify’s revenue number is not your profit

Shopify’s dashboard is built to show activity: orders, conversion rate, sessions, gross sales. Gross sales is a revenue number. It counts the money customers committed to pay, not the money you keep.

Three problems make revenue a poor stand-in for profit:

  • Revenue ignores your biggest costs. Your supplier invoice, your shipping carrier, and your ad platform never appear in your sales reports. Cost of goods sold (COGS) is invisible to Shopify unless you track it yourself.
  • Fees disappear before the money reaches you. Payment processing fees are deducted on the way to your payout. The number that lands in your bank account is already net of fees, so comparing it to gross sales makes the gap look like a mystery.
  • Revenue counts orders that later get refunded. A sale shows up the day it happens. If the customer returns the product two weeks later, your revenue number from that week is already in your past decisions — pricing, ad scaling, inventory orders.

The consequence is simple and uncomfortable: decisions made on revenue — raising ad budgets, discounting, adding SKUs — can scale losses just as easily as gains. Sellers who discover this late pay for the lesson twice: once in lost margin, once in backtracking.

The seven costs that sit between revenue and profit

Before the formula, here is the full checklist of what eats an order. Keep this list open while you build your sheet.

1. Cost of goods sold (COGS)

What you pay your supplier per unit, including inbound freight to your location if you pay it. If your supplier quote is $8.50 per unit but shipping the batch to you adds the equivalent of $0.80 per unit, your real COGS is $9.30. Many sellers undercount here because they use the unit quote and forget the freight.

2. Packaging and materials

Boxes, mailers, tape, labels, tissue paper, inserts. Small per unit, real across hundreds of orders. If you use branded packaging, this line tends to surprise people.

3. Shipping to the customer

What the carrier charges you per order. Two details matter:

  • If you offer free shipping, the full carrier charge is your cost.
  • If the customer pays shipping, your net cost is what you pay the carrier minus what the customer paid. Track the net figure.

4. Payment processing fees

Every card transaction carries a percentage fee plus a fixed per-transaction fee. The exact rate depends on your Shopify plan, your region, and the payment method, so check your own rate on Shopify’s pricing page rather than borrowing someone else’s number. In your model, either use your actual rate or label any number you plug in as an example.

5. Platform fees

Shopify bills your subscription separately from your sales. Treat the subscription as fixed overhead rather than a per-order cost — but if you want a fully loaded per-order number, divide the subscription by your expected orders for the month and add it. The key is to know which version you’re calculating and stay consistent.

6. Advertising cost, allocated per order

Your ad platforms bill you separately and on their own schedule. To put ads onto an order, divide total ad spend for a period by the orders in that period. At a store level, a blended figure works to start; once volume grows, calculate per channel so a losing channel can’t hide behind a winning one.

7. Refunds and chargebacks

Two costs live here: the money you return, and the cost of goods you don’t get back in sellable condition. A rough allocation is your refund rate multiplied by average order value, adjusted downward if returned items go back into inventory. Conservative math counts the full value as lost until you know your return-resale rate.

One distinction worth keeping straight: COGS, packaging, shipping, processing fees, refunds, and ad spend all scale with orders. Your subscription, apps, and virtual assistant hours do not. Keep fixed overhead in its own bucket so your per-order number reflects what each order truly costs to fulfill.

The true profit per order formula

Here it is, in one line:

True profit per order = revenue per order − COGS − packaging − shipping (net of shipping collected) − payment processing fees − ad cost per order − refund cost per order

And the margin version:

True margin % = true profit per order ÷ revenue per order × 100

That’s the whole thing. No trick terms. The difficulty was never the formula — it’s gathering the seven numbers from the five different places they live in.

If you later compare this seven-line model with a profit app’s shorter formula, the two reconcile cleanly: CostPilot Pro — the app we make at JoyCraft — works from five per-order inputs (COGS, fees, shipping, ad spend, and refunds), where packaging is simply folded into COGS and fixed costs like your Shopify subscription stay out of the per-order figure entirely. It is a consolidated view of the same books, not new math. The worked example below therefore applies to both methods, and we won’t run the numbers twice.

A full example: the $29 product

For example, say you sell a kitchen gadget for $29 with free shipping. Here is every line of the math, with every number marked as an example.

LineExample amountWhere it comes from
Sale price$29.00Your store’s price
COGS−$8.50Supplier quote including inbound freight (example)
Packaging−$0.90Mailer + label + insert (example)
Shipping−$5.30Carrier rate; free shipping offer, so you absorb it (example)
Payment fee−$1.14Example rate of 2.9% + $0.30 on $29 (example — check your actual rate)
Ad spend−$4.00Example: $1,200 spent ÷ 300 orders that month (example)
Refunds−$1.16Example: 4% of orders refunded at full value, goods not resold (example)
True profit$8.0027.6% true margin

Look at what happened to the number:

  • The dashboard showed $29.00 in sales.
  • A quick mental math after the supplier bill suggests about $20.50 left.
  • After every cost line, $8.00 survives.

Now the sensitivity part, because this is where decisions happen: if ad spend had run $6 per order instead of $4, true profit drops to $6.00 and the margin slips to about 20.7%. Same product, same price, same dashboard number — a different business. The per-order view is what lets you see that before it shows up in your bank account.

How to do this by hand: the spreadsheet method

You don’t need any tool to run this calculation. Here is the manual method, step by step.

Step 1 — Export your orders. In your Shopify admin, export the last 60–90 days of orders as a CSV. You need order totals and order count; if you sell several products, export with line items so you can break out by SKU.

Step 2 — Pull fees from your payouts. Open your payout statements and total the payment processing fees for the same period. Divide fees by gross sales to get your effective fee rate. Write that rate into one cell — you’ll reuse it every month.

Step 3 — Calculate COGS per unit. From your latest supplier invoice: unit price plus inbound freight, divided by units received. Do this per SKU. If you buy from multiple suppliers at different prices, use a weighted average or keep rows separate.

Step 4 — Work out net shipping. Total what your carrier billed you for the period and divide by orders shipped. Subtract the average shipping your customers paid you, if any. The result is net shipping cost per order.

Step 5 — Allocate ad spend. Total ad spend across platforms for the period, divided by orders. Keep one row per platform if you want channel-level truth later.

Step 6 — Allocate refunds. From your orders export or payout statement: total refunded value for the period, divided by order count. Note whether returned goods go back into stock; if they reliably do, reduce this figure accordingly.

Step 7 — Build the sheet and set a review habit. One row per SKU (or one row for the whole store to start), one column per cost line. Then re-run the calculation whenever something changes — a price change, a new supplier quote, a shipping rate increase, a new ad channel — and do one full pass each month. Costs drift quietly; the sheet is how you catch them.

The whole setup takes an afternoon. Updating it takes most of an hour each month, more as SKUs and channels multiply.

This works. It is also recurring work, and every hour you spend re-copying numbers is an hour you’re not using to act on them. That’s the point where automation earns its keep: the formula stays the same, the gathering becomes automatic. CostPilot Pro, the app we make at JoyCraft, exists for exactly this step — it reads your Shopify order data and puts the per-order profit figure in one place. Full disclosure: Seller Tales is published by JoyCraft, so take that recommendation with the appropriate salt, and judge it against the free manual method above.

What to do with your true per-order number

The number is a decision tool, not a trophy. Three moves it unlocks:

  • Price checks. If your true margin lands below the level your business needs, you have three levers: raise the price, cut COGS (renegotiate or switch suppliers), or reduce the shipping cost with different packaging or carrier options. Now you know which lever moves the number most.
  • Ad decisions. Your break-even cost per acquisition is your true profit per order. If you spend more than that to win an order, each new order loses money before refunds even enter the picture. Pause at the break-even figure and scale below it.
  • Cut decisions. Products with negative true profit after a fair test are candidates for the chopping block. The per-order view tells you which products are quietly funded by your winners.

One more sanity check: multiply your order count by your true profit per order, subtract fixed overhead, and compare with what actually hit your bank account. If the two don’t roughly agree, a cost line is missing or double-counted. That mismatch is the audit working as intended.

Five mistakes that corrupt the calculation

  1. Double-counting fees. If you start from a number that’s already net of payment fees (like a payout amount) and subtract fees again, your profit is understated. Decide once whether your starting number is gross or net, and keep the sheet consistent.
  2. Ignoring refunded orders. Refunds shrink revenue and lose goods. If they’re not in your model, your profit is overstated — and the overstatement grows with volume.
  3. Spreading fixed overhead into the order cost. Rent, subscriptions, and salaries are real costs, but they don’t change when one more order arrives. Keep them in a separate monthly view; mixing them in makes your per-order number unstable and hard to act on.
  4. Hiding behind blended averages. A blended ad cost can mask one channel that loses money on every order. Calculate per channel as soon as volume allows.
  5. Calculating once and walking away. Supplier prices, carrier rates, ad efficiency, and refund rates all move. A number you calculated in March is a March number.

Seller Tales is a publication by JoyCraft. When we link to our own tools, we say so, and some of those links carry tracking parameters.