Estimated Ad Spend Data: How It's Calculated and When to Trust It
Every estimated ad spend number is modeled, not billed. See how impression buckets and CPM models build the estimate, the error bands, and the safe uses.
Sections
Pull up the last competitive deck you shipped. Somewhere in it sits a line like "Competitor X is spending roughly €60K a month on Meta." That number did not come from an invoice. It came from a tool, and the tool guessed. Estimated ad spend is exactly what the name says: an estimate, built from public delivery signals and a pricing model, by a vendor who never sees the advertiser's bill. Knowing how that estimate gets built, and how wide its error bars run, separates a defensible slide from fiction with a currency symbol.
This guide walks through the full estimation pipeline, platform by platform, and ends with the part most vendors skip: our own spend numbers are estimates too, and you should treat them with the same discipline.
TL;DR: Every estimated ad spend figure is modeled, not billed. Tools multiply bucketed impressions by assumed CPMs, and both inputs carry wide ranges, so a single ad's estimate can be off by 2-5x in either direction. Use spend estimates for relative comparison and trend direction. Never present them as absolute budgets, and say so in the deck.
Where estimated ad spend numbers come from
Only two parties know what an advertiser actually spends: the advertiser and the platform that bills them. Ad spend is billing data, and billing data is private. Every spend figure you see in an ad intelligence tool, ours included, is reconstructed from the outside.
The reconstruction pipeline looks the same across vendors:
- Observe the ads. Transparency libraries and tracking infrastructure reveal which creatives an advertiser is running, where, and for how long.
- Get a delivery signal. Platforms expose impressions or reach, almost always as a bucket ("10K–15K"), never as an exact count.
- Assume a price. A CPM model guesses what the advertiser paid per thousand impressions, varying by platform, country, format, and season.
- Multiply and aggregate. Bucket midpoint times assumed CPM gives an ad-level estimate. Sum across ads, extrapolate across the date range, and out comes the monthly figure in your deck.
Each step is reasonable on its own. Each step also adds error, and the errors multiply rather than cancel. If you have ever wondered why two ad spend estimation tools quote figures for the same brand that differ by 3x, this is why: different bucket handling, different CPM assumptions, different extrapolation windows. The workflow in our Meta spend estimation guide performs the same multiplication by hand, so you can see every assumption you are stacking.
Why platforms only publish ranges
The delivery data feeding every estimate exists because regulators forced it into the open, and platforms disclosed the legal minimum in the least precise format they could justify.
Meta's Ad Library API reports spend and impressions only for ads about social issues, elections, and politics, and reports both in ranges. For commercial ads, the API gives you the creative and the run dates, and for ads shown in the EU and UK it adds reach data under the Digital Services Act. Meta also publishes an aggregated political spend report, again banded. We catalogued the gaps in Meta Ad Library API limitations.
Google's Ads Transparency Center shows the creative, the format, the regions, and the date range, and discloses spend only for verified election ads in its political transparency reporting. Commercial Google and YouTube spend is simply not published.
LinkedIn's Ad Library discloses impressions for ads served to EU members, as a range, broken down by country. TikTok's Commercial Content Library shows ads served in the EEA along with the number of unique users who saw them, also banded.
One subtlety analysts routinely miss: a band is not a midpoint with manners. Disclosure buckets are typically open at the top of the scale, so "1M+" might mean 1.1 million impressions or 40 million. A model that quietly assigns a midpoint to an open-ended bucket is making its largest assumption exactly where the biggest advertisers live, which means estimates for the heaviest spenders in your category are the least reliable ones in the report. Check which bucket an ad fell into before you trust the number that came out.
Notice the pattern. Where disclosure exists at all, it is bucketed, EU-skewed, and impression-based rather than spend-based. Platforms have two solid reasons to keep it that way: advertiser budgets are commercially sensitive, and precise per-ad delivery data would hand competitors a real-time map of every auction. Ad transparency rules were written for civic accountability, not for competitive research, which is why everything downstream of them is an estimate.
The error math: impression buckets times CPM models
Walk one ad through the pipeline with concrete numbers and the uncertainty stops being abstract.
Say a competitor's Meta ad shows EU reach in the 10K–15K band. The honest midpoint reading is "somewhere around 12,500 impressions, give or take 20%." Now price those impressions. Ecommerce CPMs on Meta commonly land anywhere between roughly €4 and €12 depending on country, audience, format, and month. Our CPM benchmarks by platform and ecommerce Meta benchmarks show how wide those spreads actually run.
Multiply the extremes:
- Floor: 10,000 impressions × €4 CPM = €40
- Ceiling: 15,000 impressions × €12 CPM = €180
Same ad, same public data, defensible answers from €40 to €180. That is a 4.5x spread on a single creative, before any extrapolation. Now scale the problem: a brand running 200 ads, each estimated from its own band, then projected from a 30-day observation window onto a quarterly figure. Some per-ad errors offset each other. The CPM assumption error does not, because it is systematic. If the model's CPM guess for that advertiser runs 40% low, every ad in the portfolio reads 40% low, and so does the total.
Here is the single most useful thing to internalize about estimated ad spend: the error is not random noise around a true value. It is a structural offset you cannot see, plus a band you can.
Run the same exercise on your own niche with the ad spend estimator and the CPM calculator. Watching the output swing as you nudge the CPM input teaches this lesson faster than any paragraph.
Error bands by platform: who sits closest to the truth
Not all ad spend estimates are equally shaky. The width of the band tracks the quality of the underlying disclosure, so it pays to grade estimated ad spend data by platform before quoting any of it.
| Platform | Public delivery signal | Estimate quality |
|---|---|---|
| Meta (Facebook/Instagram) | EU reach data, political spend ranges, run dates | Tightest of the lot. EU reach anchors the model, though non-EU delivery is inferred. |
| TikTok | EEA unique-viewer bands | Moderate. Bands are wide and cover Europe only. |
| EU impression ranges by country | Wide. Delivery data is decent, but B2B CPMs swing harder than on any other platform. | |
| Google / YouTube | Creative and dates only (commercial ads) | Widest. With no delivery signal, models lean almost entirely on assumptions. |
Two of these deserve a closer look.
LinkedIn impressions are comparatively well disclosed, yet the spend estimate stays fragile, because LinkedIn CPMs vary enormously with targeting. A campaign aimed at "all professionals, UK" and one aimed at "CFOs, fintech, 500+ employees" can differ in CPM by an order of magnitude, and the public data never tells you which one you are looking at. Our LinkedIn cost-per-impression benchmarks document the spread.
Google is the opposite case. The delivery signal barely exists for commercial ads, so any Google or YouTube spend figure you encounter is the boldest guess in the report. When a tool quotes YouTube spend to three significant digits, that precision is cosmetic.
Format and geography widen the bands further
Even within one platform, the CPM assumption has to absorb brutal variance.
Format moves the price. Video inventory, Reels placements, and carousel ads clear at different rates than static feed images, and the gaps shift month to month with supply and demand. An estimator pricing a video-heavy portfolio with one blended CPM will misprice it.
Geography moves it more. The same creative served in the US, Germany, and India can clear at CPMs that differ by 5-10x. A competitor's estimated monthly ad spend inherits whatever country mix the model assumed, and the model is guessing that mix from banded, EU-skewed reach data.
Season stacks on top. Q4 ecommerce CPMs can run double the spring baseline, so a model carrying one static annual CPM will underprice November and overprice February. Spend pacing behavior breaks flat extrapolation the same way, since advertisers concentrate budget around launches and promotions rather than spending evenly.
There is also a quieter distortion underneath all three: auction prices are set per advertiser, not per market. Two brands buying the same audience in the same week pay different CPMs depending on their creative quality, bid strategy, and account history. A benchmark CPM is an average over thousands of accounts, and the advertiser you are estimating might sit anywhere in that distribution. The estimate inherits the average. The truth does not.
None of this makes estimates useless. It defines what they are: an index with wide error bars, not an accounting figure.

Safe uses: where estimated ad spend earns its place
Used correctly, estimated ad spend is one of the highest-signal numbers in competitive research. The trick is that every safe use is relative, where systematic errors mostly cancel.
Ranking competitors within one platform. When the same model, with the same CPM assumptions, says competitor A's estimated ad spend runs 4x competitor B's on Meta, the direction is trustworthy even while both absolute figures are off. The shared bias divides out of the ratio.
Reading trend direction. A brand whose estimate doubles over eight weeks is scaling something. The level might be wrong, the slope rarely is, because the same model priced both endpoints. Pair the spend trend with runtime data from ad timeline analysis: an estimate that climbs while the same creatives keep running is the signature of a winner being fed.
Allocating research attention. Sorting a category by estimated spend tells you which advertisers to study first. For that job the number does not need to be right, the ordering does, and ordering survives even sloppy models. This is how spend estimates get used in competitive ad spend analysis and in the campaign benchmarking workflow.
Sizing share of category spend. "Brand X represents roughly a third of estimated category spend on Meta" is a defensible claim, because every brand in the denominator was estimated with identical assumptions.
A worked example of the difference. "Competitor A spends €120K/month on Meta" is a claim about an invoice nobody outside the company has seen. "Competitor A's estimated Meta spend is roughly 4x competitor B's and has grown about 60% since March" makes the same strategic point, survives scrutiny, and changes no decision the first version would have driven. The second sentence is the deliverable.
The common thread: same platform, same model, same time basis. Break any of those and you are back in fiction territory.
Unsafe uses: where estimates become fiction
Absolute budget claims. "They spend €82,400 a month" is unsupportable no matter which tool produced it. The honest version is a band, and the band is wide.
Cross-platform totals. Adding a Meta estimate to a Google estimate compounds two unrelated error structures, one of which is barely anchored to any delivery data at all. A combined "total digital spend" figure inherits the worst error of its parts and hides it behind a single confident number.
Revenue and unit-economics inference. Estimated spend times assumed ROAS equals compounded fiction. If you need to approximate a competitor's economics, build from more grounded signals, the way the Shopify competitor revenue guide does, and still present the result as a scenario range.
Budget benchmarking for your own planning. Setting your budget to "match competitor X" transfers the full error of their estimate into your plan. Plan from your own break-even math with the ad budget planner, and use competitor estimates only to sanity-check the order of magnitude.
Precision theater in decks. Quoting an estimate to the euro signals to a sharp client that you do not know how the number was made. Analysts lose credibility over the third significant digit, not the first.
How to caveat spend estimates in reports
You can quote estimated ad spend in client work and stay honest. The caveat discipline runs five rules deep.
Label every figure as modeled. One word in the cell ("est.") and one methodology footnote per deck: "Spend figures are estimates modeled from public impression ranges and benchmark CPMs. Treat as directional and comparative, not as absolute budgets."
Show bands, not points. "€40–180K per quarter" reads as more competent than "€97K", because it is. If the slide template forces a single number, use the midpoint and put the band in the footnote.
Index when you can. "Competitor A = 100, B = 43, C = 12" carries all the comparative insight with none of the false precision. Indexed presentation also survives the awkward meeting where a client knows their own real spend and it disagrees with your estimate. That meeting will happen eventually.
Keep the time basis explicit. State the observation window and the extrapolation. "Observed over 30 days, annualized" warns the reader about seasonality before they project Q4 onto next June. The same rules power a clean competitive spending report, and they translate directly into agency pitch decks where you quote a prospect's competitors back at them.
Triangulate big claims. Before any spend estimate becomes a headline slide, check it against independent signals: ad count, creative refresh velocity, reach, hiring activity, even media mix modeling priors when the client has them. Convergent evidence narrows the band. Divergent evidence is the finding.
If you want copy-paste language, this footnote has survived plenty of procurement reviews: "Competitive spend figures are modeled estimates derived from public ad transparency data (impression ranges) priced against industry benchmark CPMs. They are suitable for ranking competitors and reading trends within a platform. They are not suitable as absolute budget figures, and actual spend may differ materially." Boring, accurate, bulletproof.
Pulling spend signals programmatically
Manual range-reading does not scale past a couple of brands. For category-level tracking you want delivery and spend signals flowing into your own scripts, with the caveats applied in code.
A note on sourcing. Meta's Ad Library API is free and is the right tool when political and social-issue ads are your subject. For commercial ad intelligence across platforms, paid options like the AdLibrary API return ad-level spend estimates with the delivery signals attached. The trade-offs are covered in free vs paid ad library APIs, with a primer in what is an ad library API.
One search call returns ads with impressions, runtime, heat score, and a per-ad spend estimate:
curl "https://adlibrary.com/api/search" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"keyword": "protein powder",
"appType": "3",
"platform": "facebook",
"geo": "US",
"sortField": "-impression",
"daysBack": 30
}'
Each search costs one credit, failed searches refund the credit automatically, and rate limits run 10 requests per minute and 10,000 per day per key.
Because the safe uses are all relative, the robust pattern is computing your own spend index from the delivery fields rather than quoting raw estimates as currency:
import requests
API = "https://adlibrary.com/api/search"
HEADERS = {"Authorization": "Bearer adl_your_api_key"}
def spend_index(keyword: str) -> dict:
r = requests.post(API, headers=HEADERS, json={
"keyword": keyword,
"appType": "3",
"platform": "facebook",
"sortField": "-impression",
"daysBack": 30,
})
r.raise_for_status()
ads = r.json()["results"]
# impressions x runtime = relative spend pressure.
# Same model across brands, so the ORDERING is trustworthy
# even though no absolute euro figure would be.
by_brand = {}
for ad in ads:
score = ad["impression"] * max(ad["days_count"], 1)
name = ad["advertiser_name"]
by_brand[name] = by_brand.get(name, 0) + score
top = max(by_brand.values())
return {
brand: round(100 * value / top)
for brand, value in sorted(by_brand.items(), key=lambda x: -x[1])
}
print(spend_index("protein powder"))
# {"Brand A": 100, "Brand B": 61, "Brand C": 17, ...}
The output is an indexed ranking, exactly the deliverable format the caveat section recommends. Wire it into a nightly job and you have a spend-pressure tracker that never overstates its own precision. The Python cookbook ships ready-made scripts for monitoring and alerting, automated competitor ad monitoring covers the full pipeline, and when you outgrow a Meta-only view, the API-access route covers eleven platforms through one unified search.
API access sits on the Business plan: €329/mo, 1000+ credits per month, up to 10 keys, and free integration help. One credit per search keeps the math predictable. A nightly 10-keyword category sweep runs about 300 credits a month, comfortably inside the allowance. Details live on the API access page and pricing.
Our own numbers are estimates too
Honesty clause. The spend figures inside adlibrary are estimates, built the way this article describes: delivery signals priced through CPM assumptions. We label them as estimated everywhere they appear, and you should apply every caveat in this guide to our numbers exactly as you would to any other vendor's.
What we can do is hand you the inputs alongside the output. Every ad in the detail view carries its impressions, runtime, geo, and engagement, so you can build your own index, choose CPM priors from your own billing data, and set your own error bars. An analyst who prices competitor impressions with CPMs pulled from their own ad account will beat any vendor's generic model, ours included, because their CPM prior is real.
That is the honest pitch. Nobody can tell you what a competitor spends. We give you the signals, labeled correctly, at API speed.
Frequently Asked Questions
How is estimated ad spend calculated?
Ad intelligence tools estimate spend by multiplying observed delivery data (impressions or reach, usually published in ranges) by assumed CPMs for the platform, country, format, and time period, then aggregating across an advertiser's ads and extrapolating over a date range. No tool sees actual billing data, so every figure is a model output.
How accurate are ad spend estimates?
Expect wide bands. A single ad's estimated ad spend can vary 2-5x between defensible assumptions, because impression buckets and CPM ranges multiply. Relative comparisons between brands on the same platform are far more reliable than absolute figures, since shared model bias cancels in a ratio.
Why does Meta's Ad Library only show spend ranges?
Meta discloses spend only for social-issue, electoral, and political ads, in ranges, because the transparency rules behind the Ad Library were written for civic accountability rather than competitive research. Commercial ads show creatives, run dates, and EU reach data under the DSA, but no spend.
Can I find a competitor's exact ad budget?
No. Exact spend is billing data that only the advertiser and the platform hold. Any precise-looking figure from a tool is a model output. What you can establish is a credible range, the trend, and how the budget ranks against other competitors, which covers almost every real decision.
Which platform's ad spend estimates are most reliable?
Meta estimates tend to be the best anchored, thanks to EU reach disclosure and political spend ranges. TikTok and LinkedIn estimates run wider, since their signals are banded and EEA-only, and B2B CPMs are volatile. Commercial Google and YouTube estimates are the weakest, because no public delivery data exists for them.
Quote the band, not the number
Estimated ad spend is a powerful instrument with a printed tolerance. Inside the tolerance (ranking, trends, share of category, research prioritization) it delivers some of the best competitive signal available. Outside it (absolute budgets, cross-platform totals, revenue math) it is a guess wearing a suit.
Analysts who handle it well do three things. They learn the pipeline so they know where the error lives. They present bands and indexes instead of points. And they automate collection so the estimate stays fresh, because a stale estimate compounds model error with time error.
If that third step is your next move, the AdLibrary API on the Business plan (€329/mo, 1000+ credits, free integration help) returns delivery signals and clearly labeled spend estimates for eleven platforms through one key, with failed calls refunded. Build the index, footnote the method, and never put a naked spend number in a deck again. Compare tiers on pricing.
Related Articles

Meta Ad Library Spend Data: The 7-Step Estimation Workflow (2026)
Meta's ad library hides spend figures. Use this 7-step proxy workflow to estimate competitor budgets and benchmark your own. Start your free trial today.

Competitive Ad Spend Analysis: A Practitioner's Guide to Reading Competitor Budgets
A practitioner guide to competitive ad spend analysis — available signals, spend proxy methods, multi-platform benchmarking, and building a repeatable competitor budget intelligence workflow.

Ad Library Alternative with Spend Data 2026
Meta Ad Library hides spend data for commercial ads. See which ad library alternatives expose spend ranges across 7 networks — and how to act on that signal.

Competitive Spending Report: Build Yours in 2026
A step-by-step guide to building a competitive spending report — what data to collect, which sources to use, how often to run it, and how to turn signals into budget decisions.

What Is an Ad Library API? How Programmatic Ad Transparency Works
An ad library API turns platform ad transparency archives into queryable JSON. What it returns per ad, public vs commercial options, and your first query.

Free vs Paid Ad Library APIs: The Real Cost of Ad Intelligence Data
Meta's Ad Library API is free but Meta-only. Paid APIs add spend estimates, heat scores, and 11-platform coverage. The honest cost math, in euros.

Meta Ad Library API Limitations: 7 Walls Developers Hit in 2026
Meta's free Ad Library API stops at political ads, EU-only commercial coverage, bucketed spend, and 200 calls/hour. The 7 walls and the workarounds.