Open almost any ad-spy tool, search a competitor, and you will see a number that cannot exist. A precise ROAS. A two-decimal CTR. A "performance score" that looks like it came straight off the advertiser's dashboard. It didn't. It came from a model that was asked to produce a confident number and obliged. That is the quiet scandal of this category, and it is the one thing AdWhispr will never do.
We ban fabricated ad metrics. Not as a feature, as a foundation. Every signal we put in front of you is traceable to a real input we can name. If we can't cite where a number came from, we don't show it. This post is about that rule — what it forbids, what it permits, and why honesty is the only moat that compounds.
The metrics that don't exist (and the tools that show them anyway)
Here is the ground truth that the whole category tiptoes around: the Meta Ad Library does not expose your competitor's performance metrics. It never has. The data the API returns is deliberately limited:
| Metric | In Meta's public Ad Library? | Where it actually lives |
|---|---|---|
| Spend | Only as a wide range | Exact figure: advertiser's account |
| Impressions | Only as a wide range | Exact figure: advertiser's account |
| CTR | No | Advertiser's Ads Manager |
| CPC / CPM | No | Advertiser's Ads Manager |
| Clicks | No | Advertiser's Ads Manager |
| Conversions / Revenue | No | Advertiser's Ads Manager |
| ROAS | No | Advertiser's Ads Manager |
CTR, CPC, CPM, clicks, conversions, revenue, ROAS — none of it crosses the wall between an advertiser's account and the public archive. So when a tool displays a competitor's exact ROAS of 3.4, or a CTR of 1.87%, ask the obvious question: from what input? There is no public input. The number was invented. It is a hallucination dressed up in a dashboard tile, and dashboards are very good at making invented things look measured.
This matters because you make real decisions on these numbers. You shift budget, kill a concept, greenlight a campaign because a competitor's "8.2 ROAS" implied a winning play. If that 8.2 was conjured, you just steered your spend with a Ouija board that happens to render in a nice font.
Our rule: cite every input or don't display it
AdWhispr runs on one editorial law, and it governs the product the way a constitution governs a court. Every signal we surface must trace to an input we can name out loud.
When the analyst tells you something inside chat or inside Claude via our MCP server, it is tagged by provenance:
- Verified from Meta — facts the Ad Library actually returns: creative content, the date an ad went live, whether it's still active, the country it ran in, the spend/impression range.
- Derived by AdWhispr — intelligence we compute from those verified facts, with the method stated. Days-running. Creative-iteration rate. Engagement-verified reach.
- Estimate (band, not point) — anything triangulated, always shown as a range with its inputs listed, never as a falsely precise single number.
If a signal can't be slotted into one of those three buckets, it doesn't ship. That is the whole discipline. It sounds modest. It is the hardest line to hold in this business, because the competitive pressure is always to print one more confident number than the other guy.
What we will and won't put on screen
It helps to be concrete. Here is the policy, stated plainly.
We will show you:
- Days-running — how long each ad has been continuously live, read from our own daily snapshots. This is our primary performance proxy and it's honest about why: brands don't keep paying to run losing creative, so an ad alive 100+ days is, by revealed preference, a proven winner. We show the distribution of run-times, not one cherry-picked number, because one long-runner can be a fluke and a whole shelf of them is a strategy.
- Hook / format / tone taxonomy — how a brand's creative is built, classified consistently across their whole library.
- Engagement-verified reach — Meta's impression range cross-checked against Apify-scraped likes, comments, and shares, so "reach" isn't just an API guess.
- Creative-iteration rate — new creatives per month, computed from first-seen dates. A real signal of how fast a competitor tests.
- Spend as a triangulated band — Meta's notoriously wide range, narrowed using engagement, days-running, and creative count, with every input cited. A band you can interrogate, not a point you have to trust.
We won't show you — ever:
- A competitor's CTR, CPC, CPM, clicks, conversions, revenue, or ROAS. These don't exist publicly. We will not invent them, estimate them into false precision, or let the chat model improvise one when you push.
- A single "performance score" that collapses real and fake inputs into one authoritative-looking digit.
- Spend or impressions as exact figures. Range in, range out.
If you ask our analyst for a competitor's ROAS, it won't guess to please you. It will tell you that number lives inside the advertiser's account, then pivot to what it can prove: this concept has run 140 days across three markets, the brand has shipped six iterations of it since November, and the engagement-verified reach puts it in their top decile. That is a real answer to the real question underneath — is this working for them? — without a single fabricated digit.
Why honesty is the durable moat
It would be easy to read all this as a limitation. It is the opposite. The constraint is the product.
Anyone can pipe the Ad Library into a model and ask for a ROAS. The output looks impressive and means nothing — and the moment a customer cross-checks one number against reality and finds it was conjured, trust collapses for every number that tool ever showed them. Fabrication is a one-way door. You can't un-ring it.
What's genuinely hard, and genuinely valuable, is the derived intelligence Meta doesn't hand you: the day-by-day history. Meta's API returns no historical run-data — so the history is the product. We snapshot every tracked brand's library daily and build the longevity curves, iteration rates, and engagement-verified reach that only exist because someone bothered to record the time series. That's a real asset that compounds with every passing day. A fake ROAS resets to worthless the instant it's questioned.
This is also why AdWhispr stays strictly read-only on competitor data. We ingest the public archive; we never touch anyone's live ad account, never see their internal metrics, never launch a campaign. (When it's time to act on what you learn — clone_ad to draft an original creative grounded in a verified winner, or generate_brief to ship a competitive brief that leads with the derived-intelligence panel — those outputs are built on cited signals, not invented ones, and every clone names its source.) We're not pretending to see inside their account. We're being rigorous about what the outside actually tells you.
The whole pitch is uncomfortable for a category that sells precision-flavored fiction: the honest number is less flashy than the fake one. A run-time distribution doesn't sizzle like "8.2 ROAS." But it's true, and over a hundred decisions, true beats flashy every time. The tools showing you invented competitor metrics are borrowing credibility they'll have to pay back. We'd rather earn it slowly and keep it.
That's the bet. Cite every input, refuse every fabrication, let the honesty be the marketing. See how it reads in practice on the blog, or point it at a competitor yourself at adwhispr.com.
Real signals, every one cited — because a number you can't trace is a number you can't trust.