Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Competitor Ad Intelligence: an Agent Skill that scores competitor creatives from public ad libraries without spend data

Competitor Ad Intelligence

Rank competitors' ads from the Meta Ad Library and Google Ads Transparency Center without spend data: a Winner Score over longevity, variants, geographic spread, velocity and recency, plus the lineage grouping that makes longevity honest.

License: MIT Python 3.8+ Zero dependencies No network calls 35 tests

npx skills add Hiberius/competitor-ad-intelligence

Works with Claude Code, Claude Desktop, Codex, Cursor, Windsurf, OpenClaw and anything else that reads a SKILL.md.


Every spend number you have seen is estimated

Not the Meta Ad Library, not the Google Ads Transparency Center, not the paid tools. Nobody publishes what a competitor spent on a creative, so every figure in every competitor-intelligence product is a model output presented as a measurement.

So stop trying to measure spend and score what is actually observable, and what a losing ad cannot fake for long:

score = 0.35·longevity + 0.25·variants + 0.20·geo + 0.10·velocity + 0.10·recency

Nobody keeps paying for an ad that loses money, and nobody produces twelve versions of a loser. Those two facts carry 60% of the weight.

What it does

Command What you get
lineage Groups re-uploads of the same concept by advertiser and text similarity, so longevity means something
score The Winner Score, the five signal values behind it, and a stage: battle-tested, gaining traction, new test
gaps Angles working for competitors and absent from your own account

How it works inside

How competitor ad scoring works: group re-uploads into lineages first, then score five observable signals, then find the angle gaps

Group re-uploads first, or the ranking is wrong

python3 scripts/adscore.py lineage creatives.csv --out grouped.csv
9 creatives -> 7 lineages (2 re-uploads collapsed)
Longevity measured before this step would have understated the survivors.

Before grouping, the top creative in the sample corpus scores 78.1. After grouping, a different advertiser takes the top spot at 84.4, because their three "separate" ads were one concept that had been running for 99 days. An advertiser who rotates creatives on a schedule looks like someone running short tests, and is not.

python3 scripts/adscore.py score grouped.csv --top 5
SCORE  ADVERTISER           HEADLINE                                    DAYS  VAR  GEO  STAGE
 84.4  SolarFast            Pannelli solari a costo zero                  99    3    5  battle-tested
 78.1  CasaVerde            Come funziona davvero il fotovoltaico        183    1    6  battle-tested
 46.3  VecchioSole          Preventivo gratis                             88    1    1  battle-tested
 38.9  SolarFast            Ultimi giorni per l incentivo                 20    1    2  gaining traction
 31.1  EnergiaPlus          Hai gia controllato la tua bolletta?          11    1    1  new test

The output that changes a media plan

python3 scripts/adscore.py gaps competitors.csv --mine mine.csv
ANGLE            THEIRS    SHARE     OURS    SHARE     GAP
how-to                1      33%        0       0%     +33%
offer                 2      67%        2      67%      +0%
urgency               0       0%        1      33%     -33%

Working for them, absent from your account: how-to

Not "here are their ads". "Here is the thing you are not testing."

Archive, do not query

The corpus is the asset. Mark disappeared ads as ended, never delete them: deleting destroys the longevity series, which is 35% of the score. Store the creative file, not the URL, because ad image URLs expire and a library of dead links is a library of nothing.

Collection is out of scope

No scraping code ships here. Use each platform's official API where one exists and its public interface where one does not, and read the terms of service first. This skill is about what to do with a corpus once you have one.

Documentation

Related skills

All ten in one install:

/plugin marketplace add Hiberius/hiberius-skills

Work with me

I build the systems these skills came out of: performance marketing infrastructure, lead pipelines, ad account tooling, internal automation, and products on the Cloudflare edge stack. If you need something like this built properly, I take on freelance and contract work.

Christian Calabro — github.com/Hiberius

Performance marketing · media buying · TypeScript · Cloudflare Workers · Next.js · Python


Contributing

Issues and pull requests welcome. The rule for a change to the skill itself: it has to be something you learned by getting it wrong once, not something you read in the docs.

License

MIT. No network calls, no telemetry, no dependencies.

About

Agent Skill for competitor ad analysis without spend data: Winner Score over longevity, variants, geo spread, velocity and recency, lineage grouping so re-uploads do not fake short lifespans, and angle gap analysis against your own account.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages