Client Reporting When Meta Is a Black Box: Frameworks From Foxwell Agencies


Why It Matters

  • Stop chasing the "true" ROAS number. Meta, third-party tools, and Shopify will never fully agree, so the move is to build a translation table (e.g., a 2.5 in-platform ROAS tends to land around a 3 aMER) and use it to make the numbers useful, not accurate.

  • Before any dashboard gets built, write a one-page definitions doc with the client covering what counts as revenue, spend, and a new customer, and which tool is the source of truth for what. This single hour prevents most future "arithmetic arguments" disguised as performance disagreements.

  • Pick one third-party tool and stay on it. Switching resets your baseline and destroys the translation table you've built. Trust the tool more on high-spend campaigns and treat its read on small ones as a rough hint.

  • Splitting new vs. returning customer revenue is the highest-leverage reporting change most advertisers can make. Blended MER can look healthy while new-customer revenue quietly erodes, until it doesn't.

  • Two levers move new-customer numbers: widening exclusion windows to 90+ days, and firing a new-customer event for reporting only (not optimization), since Meta has no native "new customer" concept.

  • Rebuild ad columns in funnel order (CTR → add-to-cart → checkout → purchase) to turn a vague "performance is down" into a specific, diagnosable break point.

  • The dashboard matters less than the ritual: define what's reviewed daily, weekly, monthly, and quarterly, and always put a point of view on the numbers, "here's my read, here's the test that would confirm it," rather than reporting a number with no take attached.

Who This Is For

This is a direct playbook for Foxwell Founders members running client reporting, especially agency owners tired of relitigating attribution with every client call, and brand founders trying to build a single source of truth across Meta, Shopify, and third-party tools. The tactical detail here, funnel-order columns, exclusion windows, the definitions doc, is exactly the kind of thing members trade in Slack when someone posts their platform-versus-tool gap and a dozen operators at the same spend level weigh in.


The most common question I get from agency owners right now is some version of, what do I actually tell my client about reporting, because Meta says one thing, Triple Whale says another, Shopify says a third, and the client has a GA4 screenshot that says something else entirely.

In attribution, 2 plus 2 equals 4ish. Stop looking for the model that's right, use all of them to find the trend, then run tests against the trend. Everything below is how the agencies and brands in our membership are doing that day to day: how to decode what you already have, how to use your third-party tools, how to get a real read on net-new customers, what custom metrics are worth building, and what to send the client.

Write the definitions down first

There are about 17 versions of what "revenue" means. Order revenue, total sales, net sales, post discount, post returns, Shopify only, Shopify plus Amazon. Same with spend, same with what counts as a new customer.

So the first deliverable in any engagement, before you build a single dashboard, is one page that says what each number means, sent to the client, agreed to in writing.

That should include things like which revenue figure we're using. Whether spend includes agency fees, Amazon, influencer payments. What makes somebody a new customer. Which attribution window we read Meta on. Which tool is the source of truth for which question.

It takes an hour and it's the highest-leverage hour in the whole relationship, because from then on when performance is up or down you're having a conversation about performance instead of an argument about arithmetic.

Settle report versus dashboard on that same page while you're at it. A report is a snapshot of a period and how it trended. A dashboard is a live view. Tell the client which one they're getting, when, and what each is for, so nobody panics on a Tuesday about something the monthly report already explains.

Build a translation table instead of chasing the true number

This is the shift that helps most, and the best operators I know have all made it.

You are not trying to learn Meta's real ROAS. You're trying to learn what Meta's number means for your business, so that when you see it, you know what it implies.

Go back over a long enough historical window (12 months if you have it) and map your in platform Meta ROAS against your aMER. Then you know that a 2.5 in platform tends to land you around a 3 aMER. Write that down and put it on the reporting page. Now the number Meta gives you is useful again as an input you know how to translate.

If you've never run any kind of lift test, Haus published a benchmark that on a 7-day click basis Meta is under reporting by around 15 percent. That's a reasonable placeholder to build your first translation on until you have your own read and can replace it with something from your own account.

Then change the question you're answering for the client. Not "what is our true ROAS," which has no answer, but "is contribution going up when we do more of this." That one you can answer, and it's what they want to know.


Six years of Slack debate from 500+ paid-media operators, plus expert insights and podcast transcripts, queryable from inside Claude, Cursor, or Codex. No seat in the community required.


Use the third-party tools for what they're genuinely good at

Pick one and stay on it. That's the single biggest thing. A consistent directional number you understand deeply beats a more accurate number you abandon every time a renewal comes up. Switching tools resets your entire baseline, which means you lose the translation table you just built.

Then use them for the jobs that aren't attribution, because that's where they're strongest: creative analysis, LTV analysis, intraday reporting, and looking at several attribution windows side by side. None of that is doable in platform and all of it is real work.

Trust them more as spend goes up. One member walked through this with his own account: a campaign that had spent about $1,300 in a week showed a 1.82 in Meta and a 1.52 in the tool, while a campaign that spent $5,000 that same week had a much tighter gap. More spend means more data to model against and more agreement between sources. So weight the tool heavily on your big campaigns and treat its read on your small ones as a rough hint.

Anchor everything to a number nobody is modeling. Shop wide MER and aMER are simple arithmetic on real dollars, so make one of them the tiebreaker whenever the platform and the tool disagree. If MER is holding, the disagreement matters less than it feels like it does.

Run a post-purchase survey alongside all of it. It's cheap, it's free directional signal, and with Kno you can upload images of your actual ads and let people pick which one they saw, which is about as close to a real answer as you'll get. Run one survey, not two, so you don't split your sample.

Split new from returning, then run your day off it

If you change one thing about your reporting this quarter, make it this one.

Report new customer revenue, new customer orders, new customer AOV, aMER, and nCAC, then break out the returning side the same way. Once both are visible you can actually tell what's happening. Blended MER holding while new-customer revenue slides means the retention side is carrying you, which works right up until it doesn't.

The simplest working version of this I've seen comes from a founder member who runs her own brand. She comes in in the morning, makes her tea, asks Shopify Sidekick what her new customer revenue was yesterday, and drops it into a Google Sheet next to nCAC and new customer ROAS. That's the whole system. She knows her blended ROAS might read 2.2 on a day when her new customer ROAS is 1.75, and she knows she makes about $1.22 on a new customer because she looks at it every single day. Simple and elegant.

Give yourself a target while you're at it. A good benchmark is 80 to 90 percent of paid spend going to new customers, with email and retention handling the rest. Pull your new-customer rate today and see where you land.

Two things make the number move.

Widen your exclusions. Thirty days is not enough on evergreen top of funnel. Go to 90 days minimum (a year is better). The algorithm will happily keep going back to people who already know you because that's the cheap win, especially if you're launching new products and doing the hard work for it. Your CPA will look worse for a week or two when you widen, but you’re making that trade on purpose.

Fire a new customer event for reporting, not for optimization. You can pass one through Elevar, Blot Out, or Shopify's own web pixel API, and it'll bring your in platform numbers much closer to what the back end shows, which makes client conversations dramatically easier. Just don't expect Meta to go find you new customers with it. There's no new customer concept inside their system; you're only passing a subset of your purchase event. Use exclusions to do the acquiring, and use the event to make the reporting honest.


Reporting frameworks like this land in your inbox first. Subscribe so you don't miss the next one.


The custom metrics worth building

Rebuild your columns in funnel order and save it as a preset you apply to every account.

CTR, landing page views, add to carts, cost per add to cart, checkouts initiated, cost per checkout, checkout rate, checkout to purchase rate, purchases, purchase value, spend, cost per purchase, ROAS, CPM, CPMR.

Now you read left to right and the account tells you where it broke. Strong CTR with an expensive cost per add to cart is a landing page problem. Plenty of add to carts with a weak checkout to purchase rate is an offer or checkout problem. This takes 10 minutes to set up, and it turns "performance is down" into a specific diagnosis.

Cost per add to cart is the one I'd add if you're only adding one. For a lot of brands it tracks cost per purchase more closely than cost per initiate checkout does, and when your purchase volume is too thin to read, it's often the earliest honest signal you have.

On accounts with real spend, watch spend velocity. How fast Meta starts pushing budget into a new ad in the first 72 hours tells you what the algorithm believes well before your conversion data means anything, and it beats thumbstop and hold rate once there's money moving.

One tip that saves an afternoon: custom conversions don't appear in your Ads Manager columns until you've built a campaign optimizing for that event. Create it, publish it, pause it immediately, and the column shows up. Makes no sense, works every time.

The reporting stack most advertisers actually need

Build the dashboard in layers, most important at the top.

Start with contribution margin and estimated net profit, using an estimate of OpEx since nobody reconciles that in real time. Then add the business layer: revenue, spend, MER, with yesterday, today, and last seven days. Then the customer layer, new and returning split out. Then a quick platform read by channel. Then products and cash flow, which is a weekly look rather than a daily one.

Keep pacing in a spreadsheet. Dashboard tools show you period over period but not performance against a goal, so pick three to 10 metrics, put them in a sheet day by day next to the target, and you'll know on the 12th whether you're making the month instead of finding out on the first of the next month.

For what you actually send, keep the first page to one screen. Use a row per channel with spend, purchases, CPA, revenue, and ROAS. Add one summary row with total spend across everything, Shopify orders, blended CPA, net sales, and whichever blended number is your north star. Then underneath, in plain words, spell out what worked, what needs work, and what's next. CPC and CPM and CTR live on a second page for the people who want them.

Then build the ritual, which matters more than the dashboard does. We look at this together, at this time. This is when I look at it on my own. This is when we talk about it. Making that a standing habit was the single most effective thing we ever did on the reporting side, because before that it was me pinging people going did you see this, did you see this, and it never became a real conversation. Set the cadence at daily, weekly, monthly, quarterly, and be clear about what gets reviewed at each one.

Put a point of view on it

Numbers with no take attached are just a bill you're asking somebody to feel good about.

So say what you think is happening. Put the number in, say what you believe it means, say what you're doing next week because of it. When you're not sure, say that too, because "here's my read and here's the test that would confirm it" lands far better than confident nonsense about attribution ever will.

That's most of what makes reporting work, and it's also most of what the Founders membership is for. Somebody posts their platform versus tool gap and a dozen people running the same spend level tell them what they see. Somebody shares a client facing template and four people improve it. We've got members at $1,000 a month and members at seven figures a month, and the reporting conversations across that range are some of the best ones we have.


Trusted by agency owners, brand founders, and marketers everywhere, our advertising membership is where the top 1% of digital marketers go when they need help. Meta ads, creative strategy, Google ads, CRO, email and SMS, we've got experts on it all. Come hang out with us.


Andrew Foxwell | Co-Founder of Foxwell Digital

Co-Founder of Foxwell Digital, a social media advisory firm focused on honesty and transparency across paid social. Through its membership offerings, online courses, account management, and consulting services, Foxwell Digital helps brands and agencies make better decisions and scale sustainably.

https://foxwellfounders.com/
Next
Next

How Foxwell Members Audit Ads in Real Time (and Top 10 Audit Questions You Can Ask Yourself)