My Shopify store is not profitable: a margin diagnostic for owners doing real revenue.
If your Shopify dashboard shows healthy sales but your bank account stays flat, six hidden costs are eating the gap. Here's the diagnostic, the math, and the fix for each — sized for stores doing €10k, €30k, and €60k a month.
If your Shopify store shows healthy revenue but your bank account never grows, you are not running a broken business — you are running a business with six invisible costs that Shopify Analytics does not net against your sales. nouz exists because owners doing real revenue (€10k, €30k, €60k a month) keep arriving at the same painful conclusion: my Shopify store is not profitable, and I cannot tell why. The six hidden costs are platform + app fees, transaction fees, shipping reality, returns, ad-driven customer acquisition cost, and inventory write-offs. This post walks each one with real math, then gives you a seven-minute diagnostic you can run tonight against last month's actual numbers.
TL;DR
Why Shopify Analytics doesn't show true profit
Shopify Analytics is a sales reporting tool. It tells you how much money your store collected. It does not tell you how much of that money you kept. The dashboard's headline numbers — gross sales, net sales, orders, average order value — are all revenue metrics. Profit metrics require subtracting costs Shopify does not always see: your monthly Shopify plan, your installed app subscriptions, third-party payment fees, fulfilment and shipping, return handling, ad spend across Meta and Google, and the cost of inventory that gets stuck on shelves.
Even if you set Cost per item on every variant (most stores do not), Shopify's profit report only nets COGS. It does not subtract apps, payment fees beyond Shopify Payments, shipping subsidies, refunds (those flow as negative orders, not as a margin line), Meta ad spend, Google ad spend, or write-offs. The number you see on your dashboard is approximately gross margin minus product cost. The number you actually live on — operating profit, also called EBIT — is much lower.
The structural fix is to do the subtraction yourself, daily, against the revenue Shopify reports. Our free true-profit calculator runs the exact math below for one day or one month. Use it once and you will know within five minutes whether your store is making €0.60, €6, or €60 of operating profit per €100 of revenue.
Hidden cost 1: Shopify platform + app fees eating margin
Your monthly Shopify bill looks reasonable on its own. Shopify Basic is €29/month. Shopify is €79/month. Shopify Advanced is €299/month. Then the apps land. Klaviyo for email starts at €0 free-tier but climbs steeply past 1,500 contacts — most stores doing €30k/month sit between €60-€180/month. A review app (Loox, Judge.me) adds €15-€40. Cross-sell or bundle app (Bold, ReConvert) adds €20-€60. SEO app (Plug In SEO, Yoast) adds €15-€30. A reporting app (Lifetimely, TrueProfit) adds €30-€100. Pre-order, wishlist, currency converter, returns portal — each €10-€40.
Total monthly platform + app cost for an established Shopify store typically lands between €150 and €450, with the median around €230. That is a fixed cost that gets paid whether you sold €10,000 or €60,000 that month. On a €10k revenue month, €230 of apps is 2.3% of revenue gone. On a €60k month, the same €230 is 0.38% — the cost gets diluted as you scale, but it does not go away.
| Stack tier | Typical monthly cost | % of €10k revenue | % of €30k revenue | % of €60k revenue |
|---|---|---|---|---|
| Lean (Basic plan, 3 apps) | €80 | 0.80% | 0.27% | 0.13% |
| Standard (Shopify, 6 apps) | €230 | 2.30% | 0.77% | 0.38% |
| Heavy (Advanced, 10+ apps) | €520 | 5.20% | 1.73% | 0.87% |
| Bloated (legacy stack, unused apps) | €750+ | 7.50%+ | 2.50%+ | 1.25%+ |
The bloated row is the one nobody admits to. Three years into running a store, every owner has 4-7 apps they installed for a campaign, never uninstalled, and are still paying for. The first audit any Shopify owner should do every quarter: open your Settings > Billing > Subscriptions tab and remove every app you have not consciously used this quarter. Most owners recover €50-€150/month on first audit.
Hidden cost 2: transaction fees vs Shopify Payments
Shopify Payments is the path of least resistance. You sign up, you accept cards, you pay one transparent rate. For European stores using Shopify Payments on the Shopify plan, the rate is roughly 1.7% + €0.25 for European cards and 2.5% + €0.25 for non-European cards. If you use a third-party gateway instead (Stripe, Mollie, Adyen, PayPal, Klarna), Shopify adds an additional platform fee: 2.0% on Basic, 1.0% on Shopify, 0.5% on Advanced — on top of whatever your processor charges.
That additional platform fee is the single most common margin leak that owners never notice. If your store is on Shopify Basic and you process €30,000/month through Stripe at 1.4% + €0.25, you pay Stripe roughly €430 in processing fees AND Shopify another 2% = €600 on top — for a combined €1,030/month, or 3.4% of revenue. Switch the same volume to Shopify Payments at 1.7% and you pay roughly €580. You just recovered €450/month. €5,400/year. For doing nothing.
| Setup | Processing rate | Shopify platform fee | On €30k/month |
|---|---|---|---|
| Basic + Shopify Payments | ~1.7% + €0.25 | 0% | €595 |
| Basic + third-party (Stripe etc.) | ~1.4% + €0.25 | +2.0% | €1,030 |
| Shopify plan + third-party | ~1.4% + €0.25 | +1.0% | €730 |
| Advanced + third-party | ~1.4% + €0.25 | +0.5% | €580 |
PayPal and Klarna are the second silent killers. Both look harmless at checkout — customers like them, so you keep them on — but PayPal Express typically charges 2.49% + €0.35 in Europe, and Klarna's Pay-in-3 takes 3.29% + €0.30. If 25% of your orders go through PayPal at a higher rate than your card rate, your blended payment cost goes up by roughly 0.4-0.7 percentage points. That is real money on a €60k month.
The fix: match your Shopify plan to your volume. The Shopify plan (€79) saves €300/month vs Basic at €30k of third-party-processed volume — it pays for itself. Advanced (€299) saves another €150/month vs Shopify at €60k volume. Or move to Shopify Payments and eliminate the platform fee entirely. Use our break-even ROAS calculator to see how payment rate changes the ad spend you can afford.
Hidden cost 3: shipping cost reality
"Free shipping over €50" is the most expensive free thing on the internet. Every DTC owner discovers this around month three: customers love it, conversion rate climbs, and somehow the bank account shrinks. The math is mechanical. If your average order value is €65 and your true shipping cost is €7.20, you absorbed €7.20 on every order — which on a 30% gross margin (€19.50 of margin per order) eats 37% of the margin on every shipment.
The deeper problem: most stores price as if shipping is a small variable cost, when it is actually their second-largest direct cost after COGS. A DHL Standard parcel within Germany costs €4.80-€6.50. A cross-border EU parcel costs €9-€14. An international parcel costs €18-€38 depending on weight and country. Add packaging materials (€0.40-€1.20), pick-and-pack labour or fulfilment-service fee (€1.50-€3.50 per order), and a polybag/insert/thank-you-card (€0.20-€0.60). A realistic delivered-to-doorstep cost for a domestic order is €7-€10, not the €5 that many owners use in their head.
| Order type | Shipping cost | Packaging | Pick + pack | True per-order cost |
|---|---|---|---|---|
| Domestic (DE/AT) | €5.20 | €0.80 | €2.00 | €8.00 |
| Cross-border EU | €10.50 | €0.80 | €2.00 | €13.30 |
| UK or Switzerland | €16.00 | €1.20 | €2.00 | €19.20 |
| International (US/CA) | €28.00 | €1.20 | €2.00 | €31.20 |
Now compare against the shipping fee you actually collect from customers. If your average customer pays €4.90 shipping (or €0 above your free-shipping threshold), and your true cost is €8.00 domestic, you subsidize €3.10 per order. Across 500 domestic orders per month, that is €1,550 of margin you literally paid to the courier. On a €30k month at 30% gross margin (€9,000 gross margin), losing €1,550 to shipping subsidy means 17% of your gross margin is gone to one line.
The fix has three parts. First: calculate your true blended shipping cost monthly. Take your total shipping spend (DHL, DPD, UPS, fulfilment-service invoices) and divide by total orders. Compare to what you collected. Second: raise your free-shipping threshold. If your AOV is €65, a free-shipping threshold at €75 pushes customers to add €10 of product — at 30% margin that recovers €3 of margin while costing you the €8 shipping you were already paying. Third: charge real shipping for international orders. Customers in the US ordering from Europe expect to pay shipping; subsidizing €25 cross-Atlantic per order destroys those orders' contribution margin.
Hidden cost 4: returns and refund rate
If you sell apparel or footwear, your return rate is somewhere between 18% and 35%. If you sell beauty, accessories, or homeware, it is 4-12%. If you sell single-SKU consumables or niche electronics, it might be 1-4%. Most owners genuinely do not know their own number because Shopify does not surface return rate prominently — you have to compute it from the Refunds report and divide by orders.
Here is why this matters: a 25% return rate does not mean you lose 25% of revenue. It means each refunded order costs you the original shipping (paid forward), the return shipping (often paid by you to retain the customer), the restocking labour, and the inventory cost of any item that comes back damaged or worn. On a €65 apparel order that gets returned, the realistic cost is: €8 outbound shipping (sunk), €6 return shipping (you paid it), €2 labour to inspect and restock, €0.80 packaging materials wasted = €16.80 of direct cost on a refunded order. Multiplied by the 25% of orders that get returned, you lose €4.20 of margin per total order — across 500 orders/month that is €2,100/month of pure leakage.
| Category | Typical return rate | Cost per return | Margin impact at €65 AOV |
|---|---|---|---|
| Apparel (women's) | 25-35% | €16.80 | €4.20-€5.88 per total order |
| Apparel (men's) | 15-22% | €16.80 | €2.52-€3.70 per total order |
| Footwear | 20-30% | €19.40 | €3.88-€5.82 per total order |
| Beauty / personal care | 4-8% | €8.20 | €0.33-€0.66 per total order |
| Accessories / jewellery | 6-12% | €11.40 | €0.68-€1.37 per total order |
| Homeware / non-fragile | 5-10% | €14.20 | €0.71-€1.42 per total order |
| Consumables (single-SKU) | 1-4% | €8.00 | €0.08-€0.32 per total order |
The fix is rarely "reduce returns to zero" — that requires changing your product or your customer base, both slow. The fast fixes are: charge for return shipping in your terms (€4.90 is typical and reduces return rate by 15-30% on its own); show better size and fit information (a single accurate size chart can reduce apparel returns by 20%); use customer reviews with photos so buyers self-select; and ban serial returners (1-2% of customers drive 15-20% of returns).
Hidden cost 5: ad-driven customer acquisition cost
If you run Meta or Google ads, customer acquisition cost (CAC) is probably your largest variable cost — and the one most stores get wrong by the widest margin. The naive calculation: ad spend ÷ new customers = CAC. The honest calculation: ad spend ÷ new customers, then subtract from the contribution margin per customer (not from revenue), and compare to lifetime value, not first-order value.
Most DTC stores at €10k-€60k/month revenue spend €30-€80 to acquire a customer whose first-order contribution margin is €15-€35. That looks like a disaster — and on first order, it is. The math only works if the customer comes back. If 35% of your customers re-order within 12 months and average lifetime value is €110, your CAC of €55 is fine. If only 15% re-order and lifetime value is €72, you are losing money on every customer you acquire and growing into a deeper hole the more you spend.
| Monthly revenue | Typical ad spend | Typical new customers | Implied CAC | CAC as % of AOV |
|---|---|---|---|---|
| €10k | €2,500-€4,000 | 50-90 | €38-€55 | 58-85% |
| €30k | €7,500-€12,000 | 150-250 | €40-€65 | 62-100% |
| €60k | €15,000-€24,000 | 300-500 | €42-€72 | 65-110% |
The fix is not "spend less on ads" — that usually collapses revenue. The fix is to know your real numbers and adjust the dials that move them. Three dials matter:
- Increase AOV. Bundles, cross-sell at checkout, free-shipping threshold tuning. A €5 AOV bump on a €60 order is 8% more contribution margin per customer with zero CAC change.
- Increase repeat rate. Email + SMS flows on Klaviyo or similar typically lift 12-month repeat rate by 4-8 percentage points. On a customer base of 2,000, that is 80-160 extra repeat orders.
- Lower CAC selectively. Kill the worst-performing 20% of campaigns. Most ad accounts have one or two creative variants doing the heavy lifting and the rest dragging down blended ROAS.
Run the math against your own numbers with our CAC calculator and our customer lifetime value calculator. The honest answer to "should I spend more on Meta?" is "only if CAC is less than 12-month margin per customer." Anything else is paying to grow a business that is shrinking on every order.
Hidden cost 6: inventory write-offs and obsolescence
Every store ends up with inventory that does not sell at full margin. Seasonal products that miss their window. Sizes that were over-ordered. Colours customers passed over. Discontinued variants. Bundles that got broken up for cross-sell and never re-bundled. This dead and slow-moving inventory is paid-for cash sitting on a shelf, slowly losing value, and most stores never quantify it.
The accounting reality: when you buy inventory, you have not yet incurred a cost — you have converted cash into a current asset. The cost hits your P&L only when the item sells (COGS) or when you write it down. The two failure modes:
Failure mode 1: stuck inventory inflates apparent margin. You bought 200 units at €18/unit. You sold 140 at €60. Your gross margin on the 140 looks healthy: €60 - €18 = €42 = 70% margin. But the remaining 60 units are stuck and will only sell at €30 (50% off) in next season's clearance. Real per-unit margin across the full 200 units: ((140 × 42) + (60 × 12)) ÷ 200 = €32.40 average margin per unit ordered. That is 54% margin, not 70%.
Failure mode 2: write-offs land in one ugly month and feel like a one-off. Owners discount old stock in January or July clearance and treat the markdown as a separate event, not as the true cost of carrying that SKU. Across a year, total write-offs and end-of-season markdowns for a typical DTC store are 4-12% of revenue. For a €30k/month store, that is €14k-€43k a year of margin destroyed by inventory decisions made 6-12 months earlier.
| Category | Annual write-off + markdown rate | On €360k annual revenue |
|---|---|---|
| Fast-fashion apparel | 12-20% | €43k-€72k |
| Seasonal apparel / accessories | 8-14% | €29k-€50k |
| Year-round apparel | 5-8% | €18k-€29k |
| Beauty (with expiration) | 4-7% | €14k-€25k |
| Consumables / pantry | 2-4% | €7k-€14k |
| Durable / non-perishable | 1-3% | €4k-€11k |
The fix has two parts. First: track inventory age. Most Shopify stores have no idea which SKUs were ordered 9 months ago. Add a custom field or use an inventory report app to flag any SKU with less than 0.5x monthly velocity that has been on hand more than 90 days. Second: build markdown into your initial pricing. If you know historically 15% of inventory will sell at 50% off, your true average margin is lower than your sticker margin — price your full-margin items accordingly so the blended outcome is acceptable.
The 7-minute Shopify profit diagnostic
Open one tab to Shopify Admin > Analytics > Reports. Open another to your bank statement. Open a third to your ad accounts (Meta Ads Manager, Google Ads). Set the date range to the most recent complete month. Then walk this exact list:
- Total sales for the month. This is Shopify's "Gross sales" line. Write it down.
- Subtract VAT. Shopify shows "Net sales" — that is your VAT-adjusted revenue. If your store includes VAT in prices, the gap is real money you owe to the tax office, not yours.
- Subtract payment fees. Go to Finances > Payouts > Transactions, sum the fees column for the month. Include PayPal, Klarna, and any non-Shopify gateway separately.
- Subtract COGS. From your product cost data, or as a percentage of net sales based on category (apparel ~50%, beauty ~30%, homeware ~40%). If you don't know, use your blended gross margin from Shopify's margin report.
- Subtract shipping subsidy. Take total shipping paid to couriers for the month, subtract total shipping collected from customers. The difference is what you absorbed.
- Subtract returns leakage. Take your refund rate (Shopify Analytics > Refunds), multiply by orders, multiply by realistic per-return cost (€8-€20 depending on category).
- Subtract ad spend. Pull Meta + Google + TikTok + any other paid channel for the month. Include creative production costs if you outsourced them.
- Subtract platform + apps. Your Shopify bill + every active app subscription. Check Settings > Billing > Subscriptions for the full list.
- Subtract everything else. Email tool, accounting software, freelancer invoices, your own draw, packaging deliveries, returns-portal fees, anything else paid this month.
What remains is your operating profit for the month. Compare it to your bank account change for the same period (closing balance minus opening balance, adjusted for any owner draws or capital injections). If the two numbers agree within 10%, your bookkeeping is honest. If they disagree by more than 20%, one of the six hidden costs above is bigger than you thought.
If you want this diagnostic running automatically against every day instead of monthly, see the case for same-day profit and loss — the daily-close ritual that catches margin drift weeks before a monthly close reveals it.
What changes when you track true daily profit
Three things shift when you stop running on Shopify's revenue numbers and start running on real operating profit.
You make different inventory decisions. Once you can see that a €60 product carries a real €12 margin (not €30), you stop reordering the slow movers and double down on the genuine winners. Most stores have one or two product lines doing 60-70% of their actual margin while the rest of the catalogue ties up cash. You cannot see that on Shopify Analytics; you see it instantly on a daily P&L.
You make different ad decisions. When you know your true contribution margin per order, you can compute the maximum CAC that keeps a campaign profitable. Most stores discover that 30-40% of their ad spend is going to campaigns whose CAC exceeds first-order margin AND fails to break even on 12-month LTV. Killing those campaigns frees ad budget for the campaigns that actually work.
You make different pricing decisions. The biggest unlock for most DTC stores is a 5-8% price increase on the products that have been carrying real margin all along, paired with a free-shipping threshold tuned to actual AOV. Owners who never look at daily margin are scared to raise prices ("conversion will drop!") and never do. Owners who watch margin daily try it on one SKU, see the contribution margin per order tick up immediately, and roll it out.
nouz is built for this — a daily P&L for retail and e-commerce owners that subtracts the real costs Shopify Analytics doesn't. Shopify integration is on the roadmap (manual entry today; the daily-close routine takes 60-90 seconds once you're set up). See how nouz works for ecommerce stores, or read the cross-vertical version in "I make a lot of sales but no profit". For the wider operating system this diagnostic sits inside, see the Shopify profitability pillar.
FAQ
Why does my Shopify store show profit in Analytics but my bank account is empty?
Shopify's profit number subtracts COGS but does not subtract apps, third-party payment fees, shipping subsidies, returns handling, ad spend, or inventory write-downs. Your bank account reflects all of those. The gap between Shopify's "profit" and your bank reality is usually 15-40% of revenue — that's the sum of the six hidden costs in this post. Run the true profit calculator against last month to quantify your specific gap.
What is a healthy net profit margin for a Shopify store?
For DTC Shopify stores at €10k-€100k monthly revenue: operating margin of 5-12% is typical for healthy growing stores, 12-20% is strong, 20%+ is exceptional. Stores under €10k/month often run negative net margin because fixed costs (apps, software, owner time) do not yet have enough revenue to cover them. Stores above €500k/month should target 15-25%. If your operating margin is below 3%, something structural is broken — usually CAC too high, shipping too subsidized, or app stack too bloated.
Should I use Shopify Payments or a third-party gateway like Stripe?
For most European stores, Shopify Payments is the cheapest option because it avoids the platform fee Shopify adds to third-party gateways (2.0% on Basic, 1.0% on Shopify, 0.5% on Advanced). The exception is if you have a Stripe rate negotiated below 1.4% and you're on Shopify Advanced — at that point the platform fee plus your reduced rate may be lower than Shopify Payments. Run the comparison on your last 30 days of volume before switching either direction.
How much should I be spending on Meta and Google ads as a percentage of revenue?
Healthy DTC stores typically spend 15-30% of revenue on paid acquisition, with blended ROAS of 3.0-5.0x. If you're spending 35%+ of revenue on ads and ROAS is below 2.5x, you are growing into a loss. The fix is not always cutting spend — usually it's killing the worst 20% of campaigns and raising AOV through bundles or threshold tuning. Use the break-even ROAS calculator to see the minimum ROAS that keeps you profitable on your actual margin structure.
My Shopify store is not profitable — should I close it or fix it?
Run the seven-minute diagnostic above first. Most "unprofitable" stores have 2-3 fixable leaks (overpriced app stack, wrong payment setup, free shipping eating margin) that recover 5-10 percentage points of operating margin within a quarter. If after fixing those the store still does not clear positive operating margin at your current revenue level, the issue is structural — either pricing too low for your unit economics, or CAC permanently above LTV. That's a business-model problem, not a tactics problem, and is worth a separate honest conversation before adding more ad spend or more SKUs.