Your Shopify dashboard shows revenue. It shows gross margin if you have been good about entering COGS. Neither of those is profit.
Real profit, the number that decides whether you can afford to scale ads or order more stock, lives somewhere between the Shopify order, the PayPal payout, the Meta ad account, the bank statement, and the refund you issued last Tuesday. Most Shopify brands we work with at Perch only find out they were wrong about it when cash gets tight.
This post walks through the full true-profit formula for a Shopify brand. Every cost line, why it matters, and a worked example at $2M in annual revenue. If you operate a multi-store setup, the math is the same, just multiplied across stores and aggregated.
What Shopify's built-in reports actually show
Shopify's profit report is a useful starting point and not much more. It calculates gross profit as revenue minus the cost of goods sold, and it assumes you have entered accurate COGS on every variant. That covers the two biggest lines, but stops there. It does not include:
- Payment processing fees (different for each provider)
- Chargeback losses and dispute fees
- Refund processing costs
- Currency conversion spreads
- Shipping costs you absorbed (where not already in COGS)
- Ad spend on Meta, Google, TikTok, or elsewhere
- Fixed overheads: software, salaries, contractors
- Payout hold reserves (cash you technically earned but cannot use yet)
In practice, these add up to between 4% and 6% of revenue before you even touch advertising costs. A brand with $2M in revenue can easily be leaking $80,000 to $120,000 a year in costs that do not show up in the standard Shopify profit report.
The full true-profit formula
Here is the formula we use in every Perch dashboard. It is not complicated, it is just that nobody shows you all the pieces in one place.
Note: held funds (payout reserves) do not reduce profit on paper, but they do reduce your usable cash. We track them separately, not as a cost line. More on that below.
Every line, explained
1. Cost of goods sold
Direct product costs. Manufacturing, materials, inbound shipping to your warehouse. Shopify can handle this if you enter COGS per variant, but it will not catch mid-year price changes from your supplier unless you update each variant. For most brands doing $2M+, COGS lands between 40% and 50% of revenue.
2. Shipping costs you absorbed
Any shipping cost beyond what the customer paid. If you offer free shipping on orders over a threshold, the shipping cost on those orders comes out of your margin. Many brands assume this is baked into COGS, but it is usually tracked separately in ShipStation, Easyship, or your 3PL's invoice.
3. Payment processing fees
This is where brands with multiple payment providers get burned. Each PSP charges different rates and reports fees in different formats. As a rough guide for US brands in 2026:
| Provider | Typical rate | Per-transaction flat fee |
|---|---|---|
| Shopify Payments | 2.9% | $0.30 |
| PayPal | 2.89% | $0.49 |
| Stripe | 2.9% | $0.30 |
| Klarna | 3.29%-5.99% | $0.30 |
| Afterpay / Clearpay | 4%-6% | $0.30 |
International cards, business cards, and disputes push these rates higher per transaction. If you have not pulled the actual fee data from each provider's API, you are guessing.
4. Chargeback losses
Every chargeback is a double hit: the customer gets their money back, and the PSP charges you a dispute fee on top. A 0.5% chargeback rate (typical for ecommerce) on a $2M revenue store costs around $10,000 in refunded revenue, plus another $3,000 to $5,000 in dispute fees. Brands with subscription products or high-risk categories can run 1% or higher.
5. Refund processing costs
Refunds do not usually return the processing fee to you. If a customer paid $100, you paid $3.20 in fees, and then they return the product, you refund the $100 but keep eating the original $3.20. For a brand with a 3% refund rate, this alone is worth 0.1% of revenue, or $2,000 a year at $2M.
6. Currency conversion spreads
If your store sells in EUR and your bank holds USD, every payout runs through a conversion spread of 0.5% to 2% depending on your provider. Shopify Payments, PayPal, and Airwallex all take a cut on conversion. Wise is cheaper but not free. For multi-currency brands, this is a real line item.
7. Ad spend, across every platform
Revenue minus all the above is your contribution margin. Ad spend is what sits between contribution margin and real profit. If you run on Meta, Google, and TikTok, you need to pull spend from every platform and every ad account within each platform. A $2M brand running Meta + Google typically spends 20-30% of revenue on ads.
8. Fixed overheads
Software, salaries, contractors, rent if you have a warehouse, any other cost that does not vary with order volume. These sit at the bottom of the P&L, often forgotten in day-to-day reporting. Subscription tracking matters because software fees alone can easily be $3,000-$5,000/mo for a serious ecom brand.
Worked example: a $2M Shopify brand
Here is what the math actually looks like for a real-size Shopify brand. Numbers are representative, not from a specific client.
| Line | Amount | % of revenue |
|---|---|---|
| Revenue | $2,000,000 | 100.0% |
| COGS (45%) | −$900,000 | 45.0% |
| Shipping absorbed | −$60,000 | 3.0% |
| Payment processing fees (3.0% blended) | −$60,000 | 3.0% |
| Chargebacks + dispute fees (0.5% rate) | −$13,500 | 0.7% |
| Refund processing (3% refund rate) | −$1,800 | 0.1% |
| Currency conversion (0.8% blended) | −$16,000 | 0.8% |
| Meta + Google ad spend (25% of revenue) | −$500,000 | 25.0% |
| Fixed overheads (software, salaries) | −$180,000 | 9.0% |
| True profit | $268,700 | 13.4% |
Now compare that to what Shopify's profit report would show for the same brand. Shopify sees revenue of $2M, subtracts COGS of $900,000, and reports gross profit of $1.1M (55% gross margin). That number is both technically correct and practically useless. The gap between Shopify's gross profit and actual true profit in this example is $831,300. If you are making budget decisions on the Shopify number, you are going to run out of cash long before your numbers tell you to.
Why this matters for decisions, not just bookkeeping
The reason true profit matters is not accounting neatness. It is that every major decision in a Shopify business depends on it:
- When to scale a Meta campaign. The right threshold is your true breakeven ROAS, which requires knowing real fee and refund rates, not gross margin.
- Which products to stock more of. Per-product true profit can look very different from per-product gross margin once chargebacks and refund rates are factored in. A product with 60% gross margin but a 15% return rate may be worse than one with 50% margin and 2% returns.
- Whether you can afford to hire. Gross profit does not pay salaries. Real profit does.
- When to negotiate supplier terms. Knowing true per-SKU margin tells you which products are worth pushing for better pricing, and which ones to drop.
The further you get from true profit as your decision input, the more of your margin decisions become guesswork dressed up as analysis.
The practical problem: this data lives in 6+ places
Here is why most Shopify brands never calculate true profit properly. The numbers are scattered across:
- Shopify admin (revenue, COGS, refunds)
- Shopify Payments dashboard (most fees)
- PayPal (their fees, separately)
- Stripe (their fees, separately, if used)
- Meta Ads Manager (ad spend per account)
- Google Ads (ad spend, MCC accounts)
- TikTok Business Center (if used)
- Your bank statements (conversion spreads, chargebacks)
- Your accounting software or a Google Sheet (overheads)
The manual approach: your ops person (or you, at 11pm) opens each dashboard, exports a CSV, pastes it into a master sheet, and reconciles. This takes 3-5 hours a week and breaks every time a provider changes their export format. It also means your "real profit" number is stale by the time you see it.
The SaaS approach: Triple Whale, Northbeam, Lifetimely, and similar tools pull this data via API. They work for standard setups. For multi-store, multi-BM, or non-standard banking configurations, they tend to struggle, and the price scales with either your revenue or your traffic. We've written a detailed comparison vs Triple Whale that covers the long-term cost math.
The custom approach: commission a dashboard built around your exact stack. This is what we do at Perch. The build takes 3-4 weeks, costs a one-time fee, and pulls every line of the true-profit calculation automatically from every provider's API. No CSV exports, no manual reconciliation.
One last thing: held funds vs true profit
Held funds deserve their own mention because they are often confused with costs. They are not. If Airwallex is holding 13% of your payouts for 75 days, that money is still yours, it is just not yet available. It counts as revenue when earned, not when paid out. So held funds do not reduce your true profit number, but they absolutely reduce your usable cash position, which is a different thing.
Most brands we see track profit and usable cash as the same number. They are not. A profitable brand can still run out of cash if enough of it is sitting in payout reserves. We go deeper on this in a separate post on Airwallex holds.
Bottom line
True profit is revenue minus every cost: COGS, shipping, processing fees per provider, chargebacks, dispute fees, refund processing, currency spreads, ad spend, and overheads. Most Shopify reports stop at gross margin, which overstates profit by something like 4-6% of revenue before ads. For a $2M brand, that is the difference between "we're profitable" and "we're barely breaking even."
Whether you calculate this in a spreadsheet, a SaaS tool, or a custom dashboard, the math is the same. The question is how much of your team's time you want to spend reconciling numbers instead of making decisions with them.
Want this built for your stack?
We build custom profitability dashboards for Shopify brands. One-time project, no per-revenue fees. Tell us about your stores, processors, and banks and we'll email your quote.
Get your quote →