Win Agency Pitches with Competitive Ad Research: The New-Business Playbook
Map a prospect's ad landscape against four competitors in one afternoon: resolve brands, curate live ads, scan winners, and turn gaps into winning slides.

Sections
Most agencies walk into a pitch armed with a credentials deck and a gut read on the category. The prospect has sat through forty versions of that meeting. Agency pitch competitive research flips the dynamic: before anyone shakes hands, you map every ad the prospect and their four closest competitors are running, score what is actually working, and circle the gaps on a slide. Done by hand, that map costs an analyst a week per pitch. Done through an ad library API, it costs one afternoon and a handful of credits.
TL;DR: Before every new-business meeting, pull the prospect plus four competitors through an ad intelligence API. Resolve each brand to its advertiser IDs (free), curate their live ads across platforms (one credit per brand), scan for proven winners, and enrich the standouts into teardown slides. Frame your findings as whitespace, fatigue, and format gaps. The whole pull takes an afternoon, and the prospect remembers the agency that showed up already knowing their market better than they did.
Why Competitive Ad Data Wins Pitches
New-business meetings are lost in the first ten minutes, and they are usually lost to sameness. Every agency claims a process. Every agency shows logos. The prospect cannot evaluate any of it, so they fall back on chemistry and price.
Evidence breaks that tie, and agency pitch competitive research is the cheapest evidence available. A slide that says "your closest competitor launched 23 new video ads in the last quarter while your account shipped four statics" is not an opinion the prospect can argue with. It is a fact about their own market that their own team probably has not compiled. You have demonstrated the work product before charging a cent for it, which is exactly what agency pitch preparation is supposed to do and almost never does.
There is a second-order effect too. Competitive research in the pitch sets up competitive research in the retainer. The agency that wins with a market map gets to sell the monthly version of that map as a reporting line item from day one. More on pricing that in a moment.
The catch has always been cost. A proper five-brand audit across Meta, TikTok, YouTube, and LinkedIn used to mean an analyst-week of scrolling, screenshotting, and pasting into a deck that was stale before the meeting. That math killed the habit at most agencies. An API changes the math, which is the whole argument of this playbook.
The Agency Pitch Competitive Research Spec
Treat every pitch pull as the same standardized job. The spec that works in practice:
Brands: the prospect plus four competitors. Two competitors the prospect named in the brief or RFP, and two they did not name. The unnamed pair is where discovery-call surprises come from. Pick one category leader who outspends everyone and one fast-moving adjacent brand the prospect has probably never tracked.
Window: the last 90 days. Long enough to separate sustained campaigns from one-week tests, short enough that everything on the slide is current.
Per brand, collect five things:
- Live ad count — total active creatives, the crudest but most quotable share-of-voice proxy
- Format mix — image, video, carousel, collection, as percentages
- Launch velocity — new creatives first seen in the last 30 days
- Long-runners — ads live 60+ days, the strongest signal a creative is converting
- Top angles — the two or three creative angles carrying their longest-running ads
The deliverable is one comparison matrix, three insights framed as opportunities, and three to five teardown slides on specific winning ads. That is a tight enough scope to finish in an afternoon and a rich enough one to carry twenty minutes of a pitch. For the deeper analytical framework behind each metric, the six-phase competitor ad analysis method is the long-form companion to this spec.
Could you gather this manually? Partially. The Meta Ad Library, Google Ads Transparency Center, LinkedIn Ad Library, and TikTok Commercial Content Library are all free and all browsable, and for a single spot check they are fine. The full manual lookup workflow works for one brand. At five brands across four platforms it collapses into two days of tab management, and none of those surfaces will rank ads by performance for you. Meta's free Ad Library API is programmatic but restricted to political and social-issue ads in most of the world, with all ad types available only for the EU and UK — the limitations are structural, not fixable with clever queries.
So the workflow below runs on the AdLibrary API instead, a paid, Business-tier REST API that returns commercial ads across eleven platforms with performance signals attached. Meta's API is free and built for transparency. This one is built for exactly the job you are doing.
Step 1: Resolve Every Brand to Its Advertiser IDs
Brand names are ambiguous. "Glossier" is a string, not an advertiser. The first call turns each of your five names into concrete platform IDs, and it costs nothing:
curl -G "https://adlibrary.com/api/advertisers/search" \
-H "Authorization: Bearer adl_your_api_key" \
--data-urlencode "q=glossier" \
--data-urlencode "country=US"
The response fans out across Meta, Google, and LinkedIn in parallel and returns a best_match when at least two platforms agree they are looking at the same advertiser, plus per-platform candidate lists. From it you collect the Meta page ID, the Google advertiser ID (the AR... string), and the numeric LinkedIn company ID.
Two practical notes. First, big brands are rarely one account. A sportswear giant might advertise from a main page, a football page, and a running-app page. Grab every page that plausibly belongs to the brand, because a pitch slide that misses half the prospect's ad output is worse than no slide. Second, run this for all five brands before spending a single credit. The resolution endpoint is free, so disambiguation costs you nothing but a minute per brand.
Authentication, for the whole workflow, is one Bearer token. Keys start with adl_, are created in the dashboard on the Business plan, and are shown once at creation. You can hold up to 10 keys, which matters later when you want one key per client.
Step 2: Save and Curate — Every Live Ad in One Pull
With IDs in hand, save each brand as a tracked advertiser, then curate it. Saving is free and permanent, which is the quiet superpower here: the five advertisers you save for the pitch become the monitoring roster for the retainer if you win.
# Save the brand with every platform ID you resolved
curl -X POST "https://adlibrary.com/api/advertisers" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Glossier",
"domain": "glossier.com",
"meta_page_ids": ["182392175131637"],
"google_advertiser_ids": ["AR01761699136692027393"],
"linkedin_company_ids": ["2865006"]
}'
# Pull every recent ad across platforms in one request
curl -X POST "https://adlibrary.com/api/advertisers/<advertiser-uuid>/curate" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{}'
Curate fans out to every platform you saved IDs for and returns per-platform ad arrays, deduplicated by ad_key, with pagination cursors for going deeper. It costs one credit per advertiser per 30-minute session, and paging within that session is free. Five brands, five credits, and you now hold the complete live-ad inventory for the entire competitive set — the same data that would have been five hundred screenshots. If you want this pull running on a schedule rather than per pitch, the cross-platform tracking pipeline builds exactly that on the same two endpoints, and multi-platform coverage is the reason one request replaces eleven tabs.
Every ad in the response carries the fields your matrix needs: ads_type for format, first_seen for launch velocity, days_count for runtime, geo for market spread, plus engagement counts, a heat score from 0 to 1000, and an estimated spend figure. Treat impressions as banded reach signals rather than precise counts, and always present spend as an estimate — it is modeled, not reported by the advertiser. Estimated is plenty for a pitch. You are demonstrating relative scale, not auditing invoices.
Step 3: Scan for Winners and Let the Scores Write Your Slides
An inventory tells you what competitors are running. It does not tell you what is working. The winners scan does, and it is the single highest-value call in the pitch workflow.
First, the free probe — confirm the Meta page before committing credits:
curl -G "https://adlibrary.com/api/winners/search-pages" \
-H "Authorization: Bearer adl_your_api_key" \
--data-urlencode "q=glossier" \
--data-urlencode "country=US"
That returns candidate pages with ad counts, categories, and follower numbers, so you never scan the wrong brand. Then run the scan against the confirmed numeric page ID:
curl -X POST "https://adlibrary.com/api/winners/advertiser/182392175131637" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{"country": "US", "top_enrich": 100, "max_pages": 20}'
The scan scores the advertiser's whole portfolio, dedupes near-identical variants into concepts, and returns each concept with a tier (high_confidence_winner, winner, or loser), a composite score, and, best of all for pitch purposes, plain-language reasons like "Runtime 89 days, top 10% of this advertiser" and a dna_diff describing exactly what the winning variant does differently from the losing variants pointed at the same landing page. Those sentences paste into a slide almost verbatim. You are not interpreting raw data in front of a client. You are quoting evidence. Run it on the prospect and the two competitors the prospect named, and you have the spine of the deck.

Step 4: Enrich the Standouts into Teardown Slides
You now know which three to five ads in the category are proven winners. The enrichment endpoint turns each one into a finished teardown — the analysis a senior strategist would spend an afternoon on, returned as structured data in under a minute:
curl -X POST "https://adlibrary.com/api/enrichment" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"ad": {
"ad_key": "meta_842210493812",
"platform": "facebook",
"video_url": "https://..."
}
}'
Each analysis includes a timestamped transcript and the strategic read (product, funnel stage, audience, core message), followed by a persuasion teardown covering the hook, the offer architecture, the proof stack, and the psychological levers in play, with every claim quoted from the ad itself. It also writes a 1:1 replication brief tuned to the detected format, which becomes your "here is what we would build instead" slide. One credit per analysis, refunded if it fails. Discipline matters here: enrich only the ads that cleared the winners scan, not the whole inventory. The AI enrichment feature is the engine behind this call, and the competitor-ad-to-creative-brief workflow shows the same move extended into full production briefs.
A practical sequencing tip for pitch week: run steps 1 and 2 on Monday, let the winners scans finish Tuesday morning, and spend your remaining time on the part the API cannot do — deciding what the findings mean for this specific prospect.
Turning Pulls into Insight: Whitespace, Fatigue, and Format Gaps
Raw data impresses nobody. Prospects buy interpretation, and three framings do most of the work in agency pitch competitive research because each one ends in an action the prospect can picture you taking.
Whitespace. Build a simple matrix of creative angle versus brand. Down the side, the six or eight angles you found across all curated ads (price, social proof, ingredient story, transformation, urgency, founder narrative). Across the top, the five brands. Empty cells in the prospect's column that are filled in competitors' columns are catch-up plays. Cells empty for everyone are whitespace — the angle nobody in the category has claimed. One genuinely empty cell is worth more in a pitch than fifty screenshots, because it comes with an obvious first campaign attached.
Fatigue. Sort each brand's ads by days_count descending. A competitor whose top creatives have been running 200+ days with no fresh launches behind them is coasting on creative fatigue risk, and "their hero ad is nine months old and they have shipped nothing behind it" is an attack-window insight prospects act on. The reverse also matters: if the prospect's own portfolio is all long-runners with near-zero launch velocity, that is the polite, data-backed way to say their current agency has stopped trying.
Format gaps. Compare format mixes. If three competitors are 70% video and the prospect is 80% static images, the ad format gap is the cheapest credible recommendation in the deck. Here is the analysis layer as a compact script you can rerun for every pitch:
import time
import requests
from collections import Counter
KEY = "adl_your_api_key"
HEADERS = {"Authorization": f"Bearer {KEY}"}
FORMATS = {1: "image", 2: "video", 3: "carousel", 4: "collection"}
def pull_brand(keyword, page_id):
r = requests.post(
"https://adlibrary.com/api/search",
headers=HEADERS,
json={
"keyword": keyword,
"appType": "3",
"metaPageId": page_id,
"platform": ["facebook"],
"daysBack": 90,
"sortField": "-days",
"pageSize": 100,
},
)
r.raise_for_status()
return r.json()["results"]
def profile(ads):
now = time.time()
mix = Counter(FORMATS.get(a.get("ads_type"), "other") for a in ads)
return {
"live_ads": len(ads),
"format_mix": dict(mix),
"launched_last_30d": sum(
1 for a in ads if now - a.get("first_seen", 0) < 30 * 86400
),
"running_60d_plus": sum(
1 for a in ads if a.get("days_count", 0) >= 60
),
}
brands = {
"Prospect": ("glossier", "182392175131637"),
"Competitor A": ("rare beauty", "104889261236573"),
}
for name, (kw, pid) in brands.items():
print(name, profile(pull_brand(kw, pid)))
Each pull_brand call costs one credit and respects the documented limits of 10 requests per minute and 10,000 per day per key, so a five-brand loop never comes close to throttling. If a 429 ever does appear, honor the Retry-After header and continue. The Python cookbook for the ad library API has a dozen more patterns like this, including pagination and caching by ad_key.
The Deck Structure That Converts Research into a Win
Order matters more than volume. Six slides, in this sequence, outperform a thirty-slide data dump:
- The market snapshot. The five-brand matrix: live ads, format mix, launch velocity, long-runners. One table, zero commentary. Let them stare at their own row.
- The mirror. The prospect's own portfolio, scored. Their winners, their losers, their fatigue. This is the slide that proves you did the work on them, not on a template.
- The winner teardowns. Two or three enriched competitor ads with the evidence quoted: runtime, variant counts, what the winner did that its siblings did not.
- The whitespace map. The angle-by-brand matrix with the empty cells circled.
- The plan. Your first 90 days, each recommendation traceable to a slide that preceded it. Anchor projected outcomes with a ROAS calculation rather than adjectives, and size the category's media commitment with an ad spend estimate so the budget conversation starts from data.
- The method. One closing slide explaining that this research is a system you run monthly, not a one-time stunt. This is the retainer setup.
Keep the estimated spend figures honest (say "estimated" out loud) and present impression numbers as ranges. Prospects trust precision about uncertainty far more than false precision.
Build the Template Once, Pitch with It Forever
The first pull takes an afternoon. The fifth takes ninety minutes, because everything except the brand names is reusable. A repeatable agency pitch competitive research template has four components:
- A resolution checklist — five brands in, platform IDs out, every ID sanity-checked against ad counts from the free probes
- The pull script — the Python above, parameterized by brand list and country
- A scoring notebook — winners output and enrichment briefs dropped into a fixed structure
- The deck skeleton — six slides with placeholders, styled once per agency brand
Agencies that run automated client competitor reports already have most of this built, because the pitch pull is just the recurring report pointed at a prospect instead of a client. If your operations side is further along, the same advertiser roster can feed agency-wide automation, where saved advertisers refresh on a schedule and new-business research becomes a byproduct of infrastructure you already run. Either way, keep one API key per client or prospect environment (you can hold ten) so a rotated key never disrupts the rest of the roster.
One caution from agencies that scaled this: do not let the template flatten your thinking. The script gathers the same five metrics every time, but the insight slide must be rebuilt per prospect. A whitespace cell only matters if the prospect's product can credibly fill it. The afternoon you save on collection is supposed to be reinvested in interpretation, not pocketed.
Pricing Agency Pitch Competitive Research into Retainers
The pitch is the demo. The retainer is the product. Three pricing moves follow naturally once the capability exists:
Move one: fold monitoring into every retainer. The five advertisers you saved for the pitch keep working after you win. A monthly curate-plus-winners pass becomes a "competitive intelligence" section in the client report, and the competitive spending report format gives it a recognizable shape. Agencies typically price this section at €500-1,500/month per client depending on category complexity, against a marginal cost of a few credits and an hour of analyst review.
Move two: sell the audit standalone. The same afternoon of work, packaged as a one-off competitive audit, is a €2,000-4,000 product for prospects not ready for a full retainer. It is also the best foot-in-the-door offer in agency new business, because the deliverable is the pitch.
Move three: make it a quarterly upsell. Deep-dive quarters with full enrichment passes across the whole competitive set, timed to the client's planning cycle.
The infrastructure cost is one Business plan at €329/month with 1000+ credits and full API access, which covers pitch pulls and monitoring for an entire roster — a five-brand pitch pull consumes a small fraction of the monthly allowance, and ongoing competitor ad research for retained clients absorbs the rest productively. Priced against even two monitoring retainers, the plan pays for itself several times over in the first month. If you want to verify the data quality before committing, the free versus paid ad library API comparison walks through exactly what each tier of tooling can and cannot see.
Frequently Asked Questions
How many credits does a five-brand pitch pull actually use?
Brand resolution is free. Curating five brands costs five credits (one per advertiser session). Enriching four or five standout ads costs one credit each. Add winners scans for the prospect and the two named competitors and a typical pitch pull stays comfortably within a small fraction of the Business plan's 1000+ monthly credits, leaving the rest for client monitoring.
Can I do agency pitch competitive research with Meta's free Ad Library API?
Only in narrow cases. Meta's free API covers political and social-issue ads in most regions, with all ad types available only for the EU and UK, and it returns no performance signals for commercial ads. You can browse the Meta Ad Library manually for any brand, but programmatic pitch research on commercial advertisers in most markets needs a paid ad intelligence API.
How fresh is the data when I present it?
Pulls are live at request time, so research done Tuesday is current for a Thursday pitch. Runtime fields like days_count update continuously, which is why the workflow recommends pulling within 48 hours of the meeting rather than a week ahead.
What if the prospect operates in a niche with very few active advertisers?
A thin category is itself a finding. Five brands running thirty total ads means low competitive pressure and cheap attention, and the whitespace map becomes the entire story. Use keyword search with the search response's total count to size the wider category before concluding the niche is genuinely quiet.
Do I need a developer to set this up?
No. The four calls in this workflow are copy-paste curl commands plus one short Python script, and any technical marketer can run them. Business plans also include free integration help, so the first pipeline can be built with the AdLibrary team rather than alone.
Walk In with the Map
Every agency tells prospects they are data-driven. Almost none of them prove it before the contract is signed. Agency pitch competitive research is the proof: a live map of the prospect's market, scored winners with quoted evidence, whitespace circled, fatigue flagged, and a 90-day plan where every recommendation points back at a number. The manual version of that map cost an analyst-week, so nobody built it. The API version costs an afternoon, five saved advertisers, and a few dozen credits.
The agencies winning new business with this playbook did one thing differently: they built the template before they needed it. Set up API access on the Business plan (€329/month, 1000+ credits, free integration support), save your first five advertisers, and run the pull against a prospect you are courting right now. The deck you walk in with next month will not look like the other forty.
Related Articles

Automate Client Competitor Ad Reports: The Section That Builds Itself
Automate the competitor ad section of client reports: watchlists, scheduled curate-and-diff, AI enrichment, and Slides or PDF output at ~10 credits/client.

Facebook Advertising Automation for Agencies: The Operational System That Actually Scales
How agencies build Facebook advertising automation that actually scales: AI campaign building, bulk launching, winners libraries, budget reallocation, and attribution — with the mechanics behind each layer.

From Competitor Ad to Creative Brief in 20 Minutes (API + LLM)
Turn a competitor ad into a finished creative brief in 20 minutes: find the winner via the AdLibrary API, enrich it, and let an LLM draft the brief.

Cross-Platform Ad Tracking: Competitor Ads in One Pipeline
Track competitor ads across Meta, Google, and LinkedIn in one pipeline: resolve IDs, curate with one call, dedup by ad key, report from a unified timeline.

Agency Client Reporting: Build a System That Proves Value and Retains Clients
How to build an agency client reporting system that proves measurable value, prevents churn, and scales without burning analyst hours — covering data, narrative, and automation.

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.