If you run Magento and paid ads, you already know the feeling.
Admin → Reports (or whatever BI sits on top of Magento) looks fine. Orders are up. Revenue is up. Maybe even AOV is up. Then you open the bank account — or the card settlement — and the month feels tight.
That is not bad luck. It is a measurement gap. Magento is excellent at commerce operations. It was never designed to be your net profit P&L after product cost, media, carriers and payment processors.
What Magento is actually telling you
Magento (and most Magento-centric dashboards) answer questions like:
- How many orders landed today?
- What was grand total / invoiced revenue?
- Which products sold?
- What is in the pipeline?
Those are top-of-funnel money questions. They are necessary. They are not sufficient.
They do not answer:
- After COGS, what is left?
- After the shipping you pay (not only what you charged the customer) — see free shipping is not free
- After Stripe / PayPal / Klarna fees
- After refunds and credit memos (and *when* those refunds hit cash vs cohort)
- After Google / Meta / TikTok spend for the same day
Until those lines exist in one store-timezone view, “green Magento” and “red bank” will keep disagreeing.
A week that looks healthy in Magento
Imagine a Magento store timezone week:
| Line | Magento-ish view | Cash-relevant view |
|---|---|---|
| Order revenue | €48,000 | €48,000 |
| Refunds / credit memos | often ignored in “sales” widgets | −€3,200 |
| COGS | not in Magento reports by default | −€22,500 |
| Shipping you pay | charged shipping ≠ your cost | −€4,100 |
| Payment fees | missing | −€1,350 |
| Ad spend | lives in Google / Meta | −€9,800 |
Magento sales story: “€48k week — strong.” Net after real costs: €48k − €3.2k − €22.5k − €4.1k − €1.35k − €9.8k = €7,050
Seven thousand is still a fine week — until you realise the team was celebrating €48k and scaling ads as if contribution were ~€48k minus “some COGS.” Scale the same blind spot into a soft week and you scale losses.
Related: ROAS looks fine, cash does not and POAS vs ROAS.
Why “we export Magento and paste ads into Sheets” fails
Most Magento operators eventually build a spreadsheet:
- Magento order export
- Ads CSV from Google (and maybe Meta)
- A COGS tab that is three months stale
- A “margin” column that feels scientific
Problems show up fast:
- Timezone drift — Magento store time vs UTC ad accounts vs “whoever opened the sheet”
- Refund timing — cash view vs cohort view disagree; Sheets usually pick neither deliberately (cash vs cohort)
- Parent / bundle cost = 0 — catalog looks fine, margin is fiction (bundle COGS)
- Fees missing — PSP cut never modelled
- Campaign losers stay funded — because the sheet is weekly, and ads are daily
Sheets are a prototype of a P&L. They are not an operating system for daily decisions.
The daily habit that actually moves cash
You do not need twenty KPIs. You need one honest loop:
- Yesterday’s net profit in store timezone (after refunds, COGS, ads, shipping, fees, expenses)
- Which SKUs or campaigns dragged net — not which ones “had ROAS”
- One action — fix COGS, pause a loser, change shipping offer, or raise price
If Magento is green and net is red, the action is almost never “buy more traffic.” It is “stop lying to yourself about contribution.”
Magento-specific gotchas that inflate “green”
Watch for these before you trust any Magento-derived margin:
- Cost on the wrong entity — configurable / bundle parents with empty cost; simples hold the truth
- Charged shipping as “cost” — customer paid €0 for “free shipping”; you still paid the carrier
- Ignoring credit memos — Magento sales widgets often underweight returns until finance screams
- Multi-store currency — EU + UK + CA in one export without a base-currency P&L
- Ad platforms optimizing to revenue — Smart Bidding inherits your lie unless you feed profit-based conversions
None of these are Magento bugs. They are defaults for an OMS, not a finance tool.
What “good” looks like (without a 40-tab workbook)
A Magento-native net profit stack is boring on purpose:
- Pull orders + credit memos from Magento (Integration token — no module that can rewrite catalog or checkout)
- Attach unit COGS (Magento cost attribute and/or overrides)
- Pull Google Ads spend (OAuth) and enter other channel spend if needed
- Apply shipping cost rules and payment fee rules
- Roll everything into a daily P&L in the store timezone
Then Magento stays your commerce system. The P&L becomes the place you decide whether yesterday made money.
Soft test you can run this week
Pick any “good” Magento day from last month. Rebuild it with:
`` net ≈ revenue − refunds − COGS − ad spend − shipping you pay − payment fees − other expenses ``
If the number is close to what you believed, keep auditing the assumptions weekly. If the difference is material, treat it as a measurement review: check credit memos, COGS coverage, shipping cost rules, payment fees and the ad-spend date range before increasing spend.
The expensive choice is continuing to scale on incomplete cost data.
Next steps
- Re-run one “good” Magento day with the net formula above
- Fix the usual Magento cost lies: COGS, shipping, fees
- Put Magento + ads on one calendar — one P&L
- Read the formula in /docs/how-it-works and the daily habit in how to read Overview
---
Running Magento with paid ads and still stitching Magento + ads + COGS by hand? See a sample dashboard on the /demo, skim /docs/magento, or start a 14-day Growth trial — Integration token only, no Magento module.