Ad Data for Product Teams: Competitor Positioning Analysis at Scale
Competitor positioning analysis from ad data: a five-step pipeline to extract claims, map message territories, and track rivals' pivots at scale.

Sections
Most competitor positioning analysis starts in the wrong place: the competitor's homepage. Website copy is consensus writing. Every stakeholder got a sentence, every claim survived legal review, and none of it costs the company anything when it misses. Ads are different. Every impression has an invoice attached, and underperforming messages get killed within weeks. That makes paid ads the most honest positioning document a competitor will ever publish — and most product teams never read it.
TL;DR: Competitor positioning analysis built on ad data beats website teardowns because ads are messaging under budget pressure: what a company pays to repeat is what it actually believes converts. The pipeline has five steps — pull every competitor's ads into one dataset, enrich creatives into structured claims, cluster claims into message territories, build a positioning map weighted by spend signals, and track pivots over time. A product team can run the whole loop programmatically for a handful of credits per competitor per week.
This guide walks through that pipeline end to end, with working API calls, a worked example from a real category structure, and the artifacts you should hand to your launch and sales teams at the other end.
Ads are positioning under budget pressure
A positioning statement on a website is an opinion. A positioning statement in an ad that has run for 90 days is a measurement.
The logic is simple. Advertisers kill what doesn't convert. A creative angle that survives three months of daily spend has been tested against real cold traffic thousands of times, and it won. When a competitor runs "set up in 15 minutes" as their lead hook across forty ad variants while their homepage leads with "the all-in-one work platform," the ads are telling you which value proposition actually moves their market. The homepage is telling you what their brand deck says.
Website teardowns also miss segmentation. A homepage is one message for everyone. An ad account is dozens of messages, each matched to an audience, a funnel stage, and a format. Reading the ads shows you not only what a competitor claims but who they claim it to — which segments they're investing in and which they've quietly abandoned.
And ads move first. Repositioning shows up in paid campaigns weeks or months before the website rebuild ships, because paid is where teams test the new story cheaply. If you want leading indicators instead of lagging ones, the ad account is the place to watch. The Meta Ad Library made this kind of observation possible for anyone. Doing it systematically is what this article is about.
What competitor positioning analysis looks like with ad data
Competitor positioning analysis, done properly, is a structured extraction job. You're converting unstructured creatives (videos, carousels, static images, headlines) into a structured dataset of claims, benefits, proof points, and audiences, then aggregating that dataset into a small number of decision-ready artifacts:
- A positioning map. Each competitor plotted on the two axes that actually divide your category, backed by message evidence rather than vibes.
- A message share table. For each message territory ("speed," "AI," "price," "enterprise trust"), the share of each competitor's active ad portfolio committed to it — weighted by runtime and estimated spend, not raw ad count.
- A pivot timeline. When each competitor entered or exited a territory, visible from first-seen and last-seen dates.
- Brief inputs. The claims you must counter, the whitespace nobody owns, and the proof points your next launch needs.
This is competitive intelligence in the strict sense: evidence, weighted by investment, refreshed on a schedule. It replaces the quarterly "competitor audit" doc that's stale before the review meeting ends. If you've been doing this manually, the competitor ad analysis manual covers the by-hand method. Everything below is how to run it at scale.
Step 1: Pull every competitor's ads into one dataset
The raw material lives in platform transparency surfaces: the Meta Ad Library, the Google Ads Transparency Center, the LinkedIn Ad Library, and TikTok's Commercial Content Library. All free, all browsable, and all built for transparency rather than research. They don't share a schema, most expose little or no performance signal, and none of them will hand a product team a unified dataset.
Meta does offer a free Ad Library API, and if political and social-issue ads on Meta are all you need, use it and save the money. For commercial ads it's far more constrained — the practical walls are documented in Meta Ad Library API limitations.
The paid power-user route is the AdLibrary API: one adl_ key, eleven platforms (Facebook, Instagram, TikTok, YouTube, Google, LinkedIn, Twitter, Pinterest, Yahoo, Unity Ads, AdMob) behind one search endpoint, with performance signals attached to every ad. A search costs one credit and a failed search refunds itself:
curl "https://adlibrary.com/api/search" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"keyword": "competitor brand name",
"appType": "3",
"platform": ["facebook"],
"daysBack": 90,
"sortField": "-days"
}'
Sorting by -days puts the longest-running ads first — the creatives a competitor has kept paying for, which is exactly the positioning evidence you want. The response includes a total count, so one call also tells you how heavily a competitor is advertising before you page deeper. Each ad comes back with copy fields (title, body, button_text), days_count (runtime), a heat score, impressions, geo, and the landing page URL.
One scoping note before you pull anything. Your competitor set should include the two or three adjacent players your buyers actually evaluate, not only the names on your board deck. Ad spend reveals who is bidding for your exact customer, and the first search round often surfaces an aggressive spender your roadmap conversations have never mentioned. Start wide with six to eight brands, then cut the list to the five whose ads keep showing up against your keywords.
For ongoing tracking, resolve each competitor once with the free GET /api/advertisers/search lookup, save the brand, and pull all of its accounts across Meta, Google, and LinkedIn in one curate call per session. The full architecture for storing this (schema, dedupe on ad_key, refresh queries) is in build a competitor ad database, and the multi-platform wiring is covered in cross-platform competitor ad tracking.
Step 2: Enrich creatives into structured claims
Ad copy fields get you maybe a third of the positioning signal. The rest lives inside the creative: the spoken claims in a video, the text overlays, the demo moments, the social proof flashed at second six. For competitor positioning analysis you need that content as text.
The enrichment endpoint does the teardown per ad. It returns a timestamped transcript of everything said and shown, a strategic read (product, funnel stage, awareness stage, target audience, core message), and a persuasion analysis covering the hook, the offer structure, and the proof stack, with every point quoted from the ad creative itself:
curl "https://adlibrary.com/api/enrichment" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "ad": { "ad_key": "meta_123456789", "platform": "facebook", "video_url": "https://..." } }'
One credit per analysis, refunded on failure. The discipline that keeps cost sane: don't enrich everything. Enrich the ads that clear a runtime or heat threshold, the proven messages, and let the duds stay unread. A competitor with 300 active ads usually has 30 to 50 worth structured extraction. AI ad analysis at scale covers the batching pattern, and the AI ad enrichment feature page shows what a full teardown contains.
What you're extracting per ad, into your own table: the primary claim, the benefit category, the proof offered (numbers, logos, testimonials, demo), the audience addressed, and the funnel stage. Five fields. Everything downstream is built from them.
Step 3: Cluster claims into message territories
Two hundred enriched ads will yield several hundred claims, most of them paraphrases of each other. "Launch in minutes," "set up before your coffee's done," and "no onboarding required" are one message. The clustering step collapses paraphrases into message territories — the eight to twelve distinct things anyone in your category ever says.
Run the extracted claims through an LLM with a fixed territory taxonomy (or let it propose one, then freeze it so weeks are comparable). For a project management category the territories might land as: speed to set up, AI does the work for you, visibility for leadership, replaces your tool sprawl, price/value, enterprise trust, integrations. The workflow patterns in Claude for analyzing ad data apply directly — feed structured ad JSON in, get territory labels out.
Then weight. Raw ad count lies: ten variants of one concept is one bet, not ten. Weight each territory by the runtime of its ads and the estimated spend behind them (always an estimate, so treat it as a ranking signal rather than an accounting figure). A territory carrying three long-running, high-heat concepts outweighs one carrying fifteen week-old tests. If you want to sanity-check what a competitor's visible reach implies in budget terms, run the visible reach through a CPM calculator or the ad spend estimator. Rough math is fine. Direction is what matters.
The output of this step is one table: competitor × territory × weighted share. That table is the positioning map in numeric form.

Step 4: Build the positioning map
Pick the two axes that actually divide your category. Not "quality vs price" — that's the default nobody learns from. Choose axes the territory data suggests: self-serve vs sales-led on one, single-tool depth vs platform breadth on the other, for instance. Place each competitor according to where their weighted message share sits, not where their website says they sit. The gap between the two placements is itself a finding.
Three patterns show up on almost every ad-derived map:
- The crowd. Four competitors all paying to say the same thing. That territory is expensive to enter and getting more expensive — everyone is bidding on the same promise.
- The whitespace. A territory with real customer pull (you know it from your own customer research and win/loss notes) that nobody is funding. Cheap reach, unclaimed association.
- The lone bet. One competitor spending heavily on a message no one else touches. Either they know something you don't, or they're about to teach the market a lesson on your behalf. Both are worth a memo.
Annotate the map with evidence: the two or three longest-running ads behind each placement, quoted. A positioning map a VP can interrogate ("show me the ads that put them there") survives review meetings. One built from adjective-feel does not.
Step 5: Track message pivots over time
The map is a snapshot. The compounding value is the diff.
Every ad carries first_seen and last_seen timestamps and a runtime counter, which means territory shares can be computed per week and compared. A scheduled pull (nightly or weekly per competitor) turns positioning analysis from a quarterly project into a monitoring system:
import requests
API = "https://adlibrary.com/api/search"
HEADERS = {"Authorization": "Bearer adl_your_api_key"}
for brand in ["competitor-a", "competitor-b", "competitor-c"]:
r = requests.post(API, headers=HEADERS, json={
"keyword": brand,
"appType": "3",
"daysBack": 7,
"sortField": "-first_seen",
})
data = r.json()
new_ads = [a for a in data["results"] if a["ad_key"] not in seen_keys]
store(brand, new_ads) # dedupe on ad_key, enrich the keepers later
Dedupe on ad_key, enrich only the new concepts that survive their first two weeks, and re-run the territory rollup. The patterns to alert on:
- Territory entry. A competitor's first ads in a message territory they've never funded. This is the earliest public signal of a repositioning or an upcoming launch — usually weeks ahead of the press release, as covered in detecting competitor campaign launches.
- Territory exit. Last-seen dates going stale across a whole cluster. They tested it, it lost, they pulled budget. That's a free negative result for your own roadmap and messaging debates.
- Proof upgrades. Same claim, new evidence: a customer count that jumped, a new logo wall, a compliance badge. Proof changes are quieter than claim changes and often more strategically interesting.
- Audience shifts. The same message suddenly addressed to a new persona or geo. Pair this with timeline analysis to see whether it's a test or a committed move.
The scripts to run this on a schedule (cron, GitHub Actions, or a small service) are collected in the Python ad library API cookbook. Respect the documented limits (10 requests per minute, 10,000 per day per key, honor Retry-After on a 429) and a weekly five-competitor sweep never comes close to throttling.
Feed it into launch briefs and battlecards
Intel that doesn't change a decision is a hobby. The pipeline output should land in three documents product teams already ship:
Launch positioning briefs. Before you write the launch narrative, the territory table tells you which claims are contested, which are owned, and which are open. If two competitors already pay to own "AI does the work," your launch either out-proves them or goes around them. The map gives you the evidence to argue either way. For market entry work, the same table built on the target market's advertisers is the fastest read on incumbent messaging you can buy.
Persona and ICP work. Enriched ads tell you who each competitor is talking to — the personas in their UGC casting, the pain points in their hooks, the job titles in their LinkedIn targeting. Cross-reference that against your own ICP definitions. The workflow in Claude for persona development takes raw qualitative inputs like these and compresses them into sharp persona docs.
Creative and messaging briefs. Every contested territory needs a counter-angle, and every whitespace territory needs a test. The fastest path from "competitor ad we must answer" to a testable creative brief is the API-plus-LLM loop in from competitor ad to creative brief in 20 minutes.
One habit separates teams that use this well from teams that file it: write the implication, not only the observation. "Comp B moved 20 points of weighted share into tool-sprawl messaging this quarter" is an observation. "Comp B is repositioning as the consolidation play, so our integrations story will get attacked in every deal by March" is a brief. The second sentence is what earns the pipeline its budget.
Sales battlecards get the same feed: the three claims each competitor currently pays to make, with screenshots and runtimes, refreshed monthly. Reps stop arguing against a competitor's two-year-old pitch and start countering the one running this week.
Worked example: mapping a project management category
Here's the shape of a real run, anonymized. A product marketer at a PM tool (call it TaskRail) mapped five competitors before a Q3 launch.
Extraction. Five brand searches across Meta, LinkedIn, and YouTube surfaced roughly 1,100 active ads. Deduping near-identical variants collapsed that to about 320 distinct concepts. Sorting by runtime and heat, she enriched the top 140 proven messages for 140 credits, plus a handful of search credits for the pulls themselves. Total spend: well under a fifth of a Business plan's monthly allowance.
Clustering. The claims collapsed into seven territories. Weighted by runtime and estimated spend, the table looked like this:
| Territory | Comp A | Comp B | Comp C | Comp D | Comp E |
|---|---|---|---|---|---|
| AI does the work | 41% | 8% | 3% | 35% | 5% |
| Replaces tool sprawl | 22% | 51% | 10% | 12% | 8% |
| Speed to set up | 9% | 14% | 55% | 6% | 11% |
| Visibility for execs | 5% | 12% | 4% | 30% | 2% |
| Price/value | 3% | 4% | 18% | 2% | 60% |
Findings. "AI does the work" was the crowd — two competitors funding it hard, with Comp A's flagship video at 140+ days of runtime. "Visibility for execs" was nearly whitespace: one mid-weight bet from Comp D, nothing else, despite exec reporting being the second most-cited buying trigger in TaskRail's own win/loss interviews. And Comp E's ads had quietly stopped mentioning their old "enterprise-grade" line three weeks earlier (territory exit, confirmed by stale last-seen dates), right before they shipped a self-serve free tier.
Decision. The launch brief repositioned TaskRail's AI features as evidence inside the exec-visibility story ("the status report writes itself") instead of joining the contested AI territory head-on. Creative tests against that angle cleared the team's benchmark, and the positioning held in sales calls because the battlecard predicted exactly which AI claims Comp A's reps would lead with.
None of this required heroics. It required the ads, structured, weighted, and read on a schedule.
Make competitor positioning analysis a recurring system
The first run of this pipeline is a project — a week of setup, a few hundred credits, a map nobody at your company has seen before. The value compounds when it becomes infrastructure: a scheduled pull, an enrichment queue, a territory rollup that diffs itself against last week and posts the changes where your team plans.
Budget it honestly. A five-competitor watchlist with weekly pulls and selective enrichment runs a few hundred credits a month. That sits comfortably inside the Business plan at €329/mo with 1,000+ monthly credits — the tier that includes API access, and the only one that does. Business also comes with free integration help, which in practice means you can hand the pipeline sketch above to the AdLibrary team and get the wiring questions answered instead of guessing. Compare tiers on the pricing page. If you only need a one-off map, run the project manually first and automate when the diff starts paying.
Keep the taxonomy stable and version it. Territory definitions drift when each analyst renames clusters, and a renamed cluster destroys your time series. Freeze the labels, review them quarterly, and log every change next to the data.
The build-vs-watch decision is the same one as always: a product team that checks competitor ads "when someone remembers" learns about pivots from sales losses. A team with the pipeline learns about them from first_seen dates.
Frequently Asked Questions
What is competitor positioning analysis?
Competitor positioning analysis is the structured study of how rivals present their product: the claims they make, the benefits they emphasize, the audiences they target, and the proof they offer. The goal is a map of where each player sits in the market and where open territory remains. Ad-based analysis grounds the map in paid messaging, which is continuously performance-tested, rather than static website copy.
Why use ad data instead of website copy for positioning analysis?
Website copy is written once by committee and costs nothing when it's wrong. Ads are messaging under budget pressure: weak messages get cut within weeks, so a long-running ad is a claim that has repeatedly won against real audiences. Ads also reveal segmentation (different messages per audience) and move earlier than websites when a competitor repositions.
How often should product teams run competitor positioning analysis?
Run a full mapping exercise quarterly or before any major launch, and a lightweight automated diff weekly. The weekly pull catches territory entries and exits, the leading indicators of competitor launches and repositioning, while the quarterly pass re-validates the territory taxonomy and refreshes briefs and battlecards.
What tools do you need to analyze competitor positioning from ads?
At minimum, the free platform libraries: Meta Ad Library, Google Ads Transparency Center, LinkedIn Ad Library, and TikTok's Commercial Content Library. To do it at scale you need programmatic access (an ad library API that returns ads as structured JSON with runtime and spend signals), plus an LLM for claim extraction and clustering, and a spreadsheet or database for the territory rollup.
Is Meta's free Ad Library API enough for positioning analysis?
For political and social-issue ads on Meta, yes — and it's free. For commercial ads it's restrictive: full ad-type coverage applies only to the EU and UK, performance signals are limited to political ads, and it covers Meta platforms only. Commercial, multi-platform positioning work typically needs a paid ad library API that covers TikTok, YouTube, Google, and LinkedIn alongside Meta.
The truth is in the spend
Positioning debates inside product teams run long because everyone argues from the same thin evidence: the competitor's homepage, a G2 page, and whatever the loudest person remembers from a demo. Competitor positioning analysis built on ad data ends those debates with receipts. Every placement on the map traces back to ads a competitor paid to run, weighted by how long they kept paying.
The pipeline is five steps and none of them are exotic. Pull the ads. Extract the claims. Cluster the territories. Map the weights. Diff the weeks. Start with one competitor and the API access feature docs, and you'll have a defensible map before your next planning cycle — and a feed of pivots forever after.
Related Articles

Claude for Persona Development: From Raw Reviews to Sharp ICPs
Use Claude to turn customer reviews, sales objections, and support tickets into sharp ICP persona cards. Four-dimension framework: pain, desire, beliefs, triggers.

AI Ad Analysis at Scale: Enriching Competitor Ad Creatives via API
AI ad analysis via API: turn 200 competitor ads into queryable rows of hooks, claims, and creative structure. Batch enrichment, cost math, caching.

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.

Detect Competitor Campaign Launches Within Days, Not Months
By the time a competitor's launch shows in your metrics, it has run for weeks. Use first-seen dates, daily diffs, and spike alerts to catch it in days.

Build a Competitor Ad Database: Schema, Pipeline, and Queries
Build a competitor ad database with a four-table schema, an API ingestion pipeline with dedup, and eight SQL queries for velocity, formats, and hooks.

The Competitor Ad Analysis Manual: A Systematic Method for Extracting Creative Intelligence
A practitioner's manual for competitor ad analysis: observation ledger, Meta Ad Library extraction, creative categorization, hook decoding, and brief writing — all in one repeatable process.

Claude Code + adlibrary API: End-to-End Competitor Intelligence Workflows
Run five Claude Code workflows against the adlibrary API for automated competitor monitoring: Slack alerts, bulk teardowns, hook extraction across 500 ads, monthly landscape reports, and new entrant detection.