Your ROAS and your bank account disagree for two reasons. First, platform ROAS, your revenue divided by your ad spend, is never perfect. It is often close, and when it is off it is usually the tracking setup or the attribution window. Second, even a correct ROAS measures revenue, not profit, and profit is what is left after every cost, like COGS and shipping. So do not try to make the dashboard perfect. Do these three things instead: verify your pixel tracking is clean; calculate your profit at the business level instead of trusting the ROAS metric; and know your blended breakeven CPA (cost per acquisition).
ROAS Is Just a Metric, Not Your Profit
ROAS is a number the ad platform calculates for you when you run Meta, Google, or TikTok, straight from its own pixel and conversion tracking. It is often the signal marketers optimize toward, but it is only as accurate as the tracking behind it. Profit is what you take home after all costs, while ROAS only shows the relationship between revenue generated and ad spend. Use ROAS to guide direction, not as your end-all source of truth.
Your Tracking Setup Decides Whether the Number Is Even Close
How your tracking is set up decides how accurate your data is. If your current pixel has a lot of data, clean it up and keep it, since that history helps your campaign performance. If it is a mess, create a fresh pixel set up properly, and add a measurement tool from day one only if you plan to spend $20,000 a month or more on that ad platform.
If you use a third-party tracking tool, follow that tool's own setup docs and skip ahead. If you are setting it up yourself, here is the path:
- Install the platform's official Shopify channel app. Use the official app or API integration for each platform you run: Meta, Google, TikTok, Pinterest.
- Turn on maximum data sharing. Let it share everything it can, like email and address. The more data the platform has, the more accurately it matches and tracks your sales.
- Confirm deduplication is on. Without it, the browser pixel and the server event both fire for one purchase, so a single sale is recorded twice.
- Test the full funnel end to end. Place a test order with a 100% discount code for a $0 purchase, or charge your own card and refund it in Shopify. Watch page view, add to cart, initiate checkout, and purchase each fire in Events Manager under Test Events with your site URL entered. The purchase value should come through as the real order value.
- Optimize the campaign for the purchase event. Starting out, choose max conversions, meaning purchases, over value optimization, because the campaign needs conversion volume to learn.
- Check Event Match Quality after it runs a while. Events Manager scores each event. If a score is low, follow the prompts to fix it, and clear related items like allowed domains.
The end-to-end test
- Page view fires
- Add to cart fires
- Initiate checkout fires
- Purchase fires, with value = the actual order value
To get walked through this without missing a step, paste this into your AI tool:
I run an ecommerce brand on Shopify and run ads on Meta, and maybe Google, TikTok, or Pinterest. I am setting up conversion tracking myself, without a third-party tool. Walk me through it one step at a time, and wait for my answer before the next step: 1. Installing the platform's official Shopify sales channel app or API integration. 2. Turning on maximum data sharing (email, address, and so on). 3. Confirming deduplication is on. 4. Running an end-to-end test with a $0 test order and watching page view, add to cart, initiate checkout, and purchase fire in Events Manager, Test Events, with the purchase value correct. 5. Optimizing the campaign for the purchase event with max conversions. 6. Checking Event Match Quality and fixing anything low, including allowed domains. For each step, tell me exactly where to look and what a healthy result looks like.
The Platform Tracks Two Numbers, the Volume and the Value, and Both Matter
The platform tracks two separate numbers, and both need to be clean. The volume is how many sales happened. The value is what those sales were worth.
The volume feeds the algorithm's bidding and learning. A corrupted volume, like double-counted purchases, teaches the algorithm from bad data, so it bids and targets worse and wastes your spend.
The value feeds your ROAS. A corrupted value, like a purchase logged at double or half its real amount, bends the ratio even when the volume is right.
Clean data does two jobs at once. The platform needs it to optimize efficiently and actually make you money, and you need it to make good decisions.
ROAS = purchase revenue / ad spend
Each number can break on its own.
Open the Attribution Window, Then Judge Profit at the P&L
The attribution window sets how far back the platform can claim a sale. Meta's default is 7-day click and 1-day view. Open the window wider, not to hand the platform more credit, but because a wider window tracks more conversions, and more conversions give the campaign more data to optimize on.
This does not mean giving up on accuracy. You still want accurate volume and values inside the platform. What you avoid is judging the whole business through one platform's lens. Buying is multi-touch now. A customer might see a Google ad, then a Facebook ad, run a search, ask an AI, and then buy. Every touch played a part, so a longer window is fair, and some cross-platform double-attribution is fine, because you judge business health at the MER level (your total revenue divided by total ad spend) and your contribution margin (what a sale leaves after COGS, shipping, and fees), not inside one dashboard.
How you structure campaigns depends on spend:
If you are under about $20k a month per channel
Run one CBO campaign with no audience restrictions, prospecting and retargeting together. Do not split it up yet. Data accumulates at the ad-set level, so fragmenting campaigns early fragments what the algorithm can learn. Let one campaign gather data until you cross the threshold.
If you are over about $20k a month per channel
Separating new customers from existing ones becomes optional but recommended. Use account-level audience signals, customer-list audiences, and exclusions, keeping existing customers out of prospecting and new customers out of retargeting. To make prospecting optimize on new customers only, run a new-customer-only conversion event through a third-party tool such as UpStackified, Hyros, or Triple Whale. I have used UpStackified and it worked well.
A Third-Party Tool Gives You a Number the Platform Does Not Control
Third-party measurement tools give you a number the platform does not calculate for itself. Triple Whale runs on its own first-party pixel and suits DTC brands that want fast numbers. Northbeam uses marketing mix modeling and suits brands on many channels or off Shopify. UpStackified, Hyros, Rockerbox, and Measured sit in the same space. They earn their place once your spend is high enough that a wrong number costs real money.
Agencies Report the Platform Number Because That Is What They Are Measured On
An agency is paid to manage a channel, so it operates inside that channel. Looking at the whole business is usually not part of the deal. That is why agency reports lean on platform ROAS: it is the number they own, and when it looks good they report that things are trending great. If tracking is off but ROAS looks strong, there is little reason for them to dig in, because the strong number makes them look good.
Remember what ROAS is: a channel metric, not a measure of business profit. Set clear KPIs up front and clean up your tracking from the beginning, so the number everyone reads is real. Then ask for the net figure, not just the platform figure.
A Reported 4x Can Lose Money Once Every Cost Is In
| Shopify revenue | $40,000 |
| Ad spend (this is the 4x the dashboard shows) | $10,000 |
| COGS, shipping, and fees (60%) | −$24,000 |
| Measurement and app tools | −$1,000 |
| Agency retainer | −$6,000 |
| Net profit | −$1,000 |
This is the math a platform dashboard never shows, because the retainer and your tool bills do not live inside the ad account. The 4x is real, but it is only ad revenue against ad spend. Subtract product costs, your tools, and the retainer, and the month is a small loss. A 4x can be a losing 4x.
We show founders this holistic net, because we look at the business as a whole, not just the ad account. You win either way: work with us, or just learn to demand this math from whoever runs your ads.
Know Your Blended Breakeven Before You Trust Any Number
| Blended AOV (average order value) | $50 |
| COGS, shipping, and fees (60%) | −$30 |
| Contribution margin (40%) | $20 |
| Breakeven ROAS = AOV / contribution margin = $50 / $20 | 2.5x |
| Breakeven CPA = contribution margin (the most you can pay per purchase) | $20 |
Your breakeven ROAS is your AOV (average order value) divided by your contribution margin per order. Here that is 2.5x, so ads need to return $2.50 for every $1 just to cover the product cost of what they sell. The same numbers give you the target you actually steer by, your blended breakeven CPA: your contribution margin per order, $20 here, which is the most you can pay for a purchase and still break even. Run this blended, at the business level, from AOV and order math, not per SKU. For most brands the variant count makes per-SKU math a time sink, and you calculate it outside the ad platform anyway. The 2.5x only covers ads; tools and the retainer sit on top, which is how a 4x still ends the month negative. A good 2x can be a losing 2x.
The Order to Run These, and How Often
Run these in order, and revisit them regularly.
- Clean up tracking first. Nothing downstream is worth reading until the data is right, so start here and re-reconcile platform revenue against Shopify every month.
- Calculate your blended breakeven CPA target. Your breakeven CPA is your contribution margin per order, the most you can pay for a purchase and still break even. Hitting that CPA consistently is the goal the whole ad account aims at.
- Recalculate breakeven whenever a cost moves. A new supplier price, a shipping change, or a retainer change all shift your breakeven, so a target built on last quarter's costs quietly goes wrong.