AdRadar labels every competitor ad, then reads the strategy off the labels
Cross-platform competitive intelligence for teams competing in many markets at once. It collects LinkedIn, Meta and Google ads from the public transparency libraries. Creatives and landing pages get labeled for funnel stage, offer, audience and claim, then read for strategy per market, per platform and across all three. LinkedIn labeling runs today; Meta and Google are collected and the extraction pass is still gated.
Competing globally against companies that outspend you in every market
At PingPong we competed with enterprises running paid programs in dozens of countries at once. For a performance marketer, knowing what those companies are actually doing is not optional. It sets your positioning, your budget split, and the markets you can realistically win.
The information was public and still unusable. A single competitor had hundreds of live creatives across LinkedIn, Meta and Google, in market after market. Opening an ad library gives you a scroll of cards with no country cut, no funnel read, and no way to see how the three platforms divide the work between them. I read forty cards by hand once and stopped, because forty cards out of several hundred is an anecdote.
Two views were missing and both mattered: what a competitor runs in one country, and how their channels coordinate across all of them.
LinkedIn, Meta and Google each publish their own, in their own format, with no shared competitor record between them.
3 tabs, no exportOne creative at a time, in the order the library feels like showing them. No country cut, no funnel read, no way to sort by anything that matters.
~40 read by handMessage, offer, destination and market, keyed in by hand, with the categories invented differently every time somebody new does it.
an afternoonA single competitor was running several hundred live creatives. Any read off the fraction you managed to log is a guess wearing a spreadsheet.
no defensible answerAd-intel suites, a chatbot, and an afternoon of scrolling
Three options were on the table before I built anything. Each one answered a different question well and the same question badly.
Broad creative capture with format breakdowns and spend estimates, packaged for an enterprise buyer.
Priced for a team that already has a research function, uneven coverage outside the US, and it reports format rather than intent. Knowing a rival runs video on Meta is not knowing that Meta is carrying their conversion load.
RejectedThe source of truth, free, current, and legitimate to read. Every live creative a competitor is running.
Built for disclosure rather than analysis. One card at a time, no country cut, no funnel read, and nothing that survives being closed.
Kept as inputA sharp read on any single creative, instantly, with no setup and no cost worth counting.
No memory of the other three hundred. It answers what one card says, and the question was what the set does.
RejectedAll three failed in the same direction. They read creatives one at a time, and strategy only exists in the aggregate.
Borrowed from data labeling: label every unit, then let the aggregate speak
The idea came from Snorkel and programmatic data labeling. If you can label a corpus cheaply and consistently, the labels themselves become the dataset you reason over. An ad library is a corpus nobody had labeled.
So the pipeline works bottom up: a small model answers one narrow question at a time about one ad, and the summary of a competitor is assembled from those answers rather than asked for directly. Everything the tool claims at the top is traceable to labels at the bottom.
Each creative and its landing page go to DeepSeek: funnel stage, offer type, audience, claim, proof used. Cheap enough to run on the whole set rather than a sample.
Labels roll up per placement and per country, which is where a real pattern first shows: the same brand runs a different funnel in Germany than in Singapore.
With clean labels underneath, a stronger model reads one platform at a time and states the role it plays, backed by counts instead of impressions.
The top layer compares the three and reports how they divide the funnel, what repeats everywhere, and where the gaps are.
Sources are the platforms' own transparency libraries, which exist so that anyone can inspect what is running. Nothing private is touched, and no spend is estimated.
A cheap model for every ad, an expensive one for the plan
Cost is what decides whether you label the whole corpus or a sample, and a sample is what makes competitive research wrong. Labeling runs on DeepSeek at a price that lets every creative through. Only the synthesis layers, where reasoning actually pays, run on a frontier model.
Each platform carries a quality gate, because coverage differs by source and a confident report over thin data is worse than no report. A workspace shows what was collected, what was labeled, and what is still short, so the analysis stays honest about its own evidence.
Four questions, asked of all three platforms at once
Share of each platform's placements by funnel stage, offer and proof, with a marker on any 25-point divergence so the split is visible without reading numbers.
The audience each platform is written for, which is usually where the strategy is most obvious and least stated.
The recurring claims, ranked by how often they repeat. Repetition is the tell for what a competitor believes is working.
Destination and offer: product page, report, trial, signup. Where each platform is asked to close and where it is only asked to warm.
A worked example on Stripe, on the platform that is labeled today: 5% of LinkedIn placements sit at conversion and 43% at awareness. Reading that against Meta and Google is what the cross-platform view is built for, once their extraction passes are ungated. That single row is the channel strategy, and it took a scroll of the ad library to be invisible.
Every claim walks back down to the creatives it was counted from
The workspace is arranged so the strategy layer never starts from a blank prompt. Context grounds the labels, labels feed the pattern read, the pattern read feeds the response, and a quality check sits at the end to say how much of it the evidence actually carries.
Every layer stays open for inspection. If a claim in the strategy report looks wrong, you can walk back down through the pattern that produced it to the individual creatives it was counted from, and read those in their original form.
Company, category, products, buyers, markets and the competitive frame, written down before any ad is classified.
Public advertising records with creative, copy, active dates, markets, CTAs and destinations, searchable and still linked to the original artifact.
Distribution across theme, persona, pain, proof, offer, CTA, landing intent and funnel stage. This is where concentration becomes visible.
The dominant play, funnel bias, proof system, weak spot and the response options worth testing against them.
Missing offer signals, thin landing context and low-confidence classifications, surfaced before anyone trusts the strategy.
A shared taxonomy holds the layers together, so every ad becomes a comparable record instead of a paragraph of prose. Five groups carry it. Market (persona, industry, geography, pain point), message (theme, value promise, pillar, campaign topic), journey (funnel stage, offer type, CTA, landing intent), proof (quantified ROI, customer story, benchmark data, product detail) and creative (format, hook, visual system, destination). Five groups, twenty fields, filled the same way on every ad from every platform.
One report, and each function takes a different decision out of it
The tool is organized around the decision, then the evidence that decision needs. Four workflows cover most of what a campaign team asks a competitor set for.
Map the messages already occupying the category, read the offer and funnel structure behind them, then choose whether to challenge a crowded belief or enter a neglected one. Output: territory, counter-position, proof requirement, first hypothesis.
Baseline a competitor, refresh the evidence set, and review the delta. A refresh matters when audience, message, offer, proof or funnel behavior moved, which is a much narrower alert than "they posted new creative".
Pair format with campaign intent, name the category's proof conventions, then set the test boundary: what should feel familiar enough to read, and what has to be distinctive enough to matter.
Advertising shows the positions a competitor is actively paying to put in front of the market. Measure the repeated beliefs, audit the proof under each, and find the claims with heavy competition and weak substantiation.
The report is built to be read by six different functions without being rewritten for any of them, which is the reason the taxonomy is shared rather than per-team. An analyst verifies source quality, paid media reads funnel and offer patterns, demand gen picks the territory, product marketing sharpens the message hierarchy, creative turns patterns into test hypotheses, and leadership reads the category movement. Each takes a different decision out of one evidence base.
A strategy report should show where its certainty ends
Public advertising reveals campaign patterns. It says nothing about account economics or internal intent, and a tool that blurs the two is worse than no tool. So the report separates its three tiers on the page, and the quality gate refuses to publish a confident read over thin coverage.
Competitive research became a lookup instead of a project
Every competitor now has one workspace holding all three platforms, their labeled creatives, and the strategy read at each level. Answering "what is this company doing in this market" takes a minute, and the answer cites the ads it came from.
What that buys for go-to-market is a positioning decision made against evidence: which claims are already crowded, which funnel stage a rival has left thin, and which market they have not bothered to enter properly yet.
Python at the bottom, a cheap model in the middle, an expensive one only at the top
Collection
PythonThe whole pipeline. No front-end framework, because nothing here is a page.
PlaywrightDrives a real browser through the three transparency libraries.
BeautifulSoupParses the captured markup into ad records.
Meta Ad LibraryPublic source for Meta creative.
Google Ads TransparencyPublic source for search and display evidence.
Models
DeepSeek, cheap tierLabels every single creative and landing page. Cheap enough to run on the whole corpus rather than a sample.
DeepSeek, reasoning tierReads one platform at a time and writes the strategy layer over the labels.
Tesseract OCRLifts copy out of image creatives so they enter the same taxonomy as text ads.
Data and delivery
ResendReport-ready and access notifications.
StripeBilling, wired for a private beta that has not opened.
VercelHosts the workspace.
The split is a cost decision. Labeling every ad on a frontier model would have priced out the whole-corpus pass, and a sampled pass is what makes competitive research wrong.
Want this kind of tooling on your team?
Nine systems shipped, compliance, reporting, intelligence, content.



