Ad research
How to find winning ads and tell them from tests
By Jackson Gathondu. Published 1 November 2026. Updated .
Most Ads in an ad library are tests. An Advertiser launches several versions, keeps the ones that pay back and switches off the rest. The ad library shows all of them side by side, with no sales figures, so a winner and a failed test look the same at first glance.
You can still tell them apart from what the Advertiser does next. This guide covers the signals that are public (days running, variants added, variant count, placements and running state), how ShortsIntel combines them into a winner Score, and what a single observation of an Ad can and cannot tell you.
The signals a winning Ad leaves
Neither ad library shows spend or sales for commercial Ads. These are the signals you can read, and how much each one is worth on its own.
| Signal | What it suggests | What it does not prove |
|---|---|---|
| Days running | The Advertiser keeps paying to show the Ad. Ads that last months are usually paying back. | Some long runs are Ads nobody switched off, or Ads on a tiny budget. |
| Variants added | The Advertiser is cloning the Ad into new versions with the same media, which is how Ads get scaled. | It needs at least two Snapshots taken on different days. One look shows the count, not the change. |
| Variant count | How many Ads share this Ad's media right now. A high count means the creative is in wide use. | A stopped test can show a high count too. In the sample below, a version that stopped after 49 days also shows 10. |
| Placements | Where the Ad runs: Facebook, Instagram, Messenger, Threads, WhatsApp and the Audience Network. | Most Ads run on several placements by default, so placement alone does not separate winners. |
| Active or stopped | A stopped Ad's days running is fixed, from start to stop. A running Ad keeps counting. | An Ad can stop because a sale ended, not because it failed. |
How the winner Score reads these signals
ShortsIntel puts a winner Score from 0 to 100 on every Meta Ad. 70 percent of it is days running and 30 percent is variants added. Each one is ranked against the same Advertiser's other Ads, so 60 days counts for more at a brand that rotates creative every week than at a brand that never stops anything.
Each Score carries a confidence level and a reason. It is low when we have seen the Ad only once (single_snapshot), because there is no variant history yet and the Score is days running alone. It is also low when the Advertiser has fewer than 5 dated Ads on file (few_advertiser_ads), because there is little to rank against. Sort a search by winner Score to decide what to read first, then check the confidence before you trust the order.
The full formula is in the Ads docs.
How to find winning Ads with your Assistant
Connect Claude, ChatGPT or another Assistant to ShortsIntel, then ask in plain language. The Assistant uses search_ads to search the Meta Ad Library, get_ad to read one Ad or Advertiser, and track to follow an Advertiser over time.
Search a category or a competitor, including stopped Ads
Search by keyword or by Advertiser. Ask for all Ads, not only active ones: the Ads that ran for months and then stopped are often the clearest winners, and the short-lived ones show you what the Advertiser tested and dropped.
Search the Meta Ad Library for protein powder Ads in the US, active and stopped, sorted by winner Score. List the Advertiser, start date, days running, variant count and winner Score for each.Group the Ads by Advertiser
Compare each Ad with the same Advertiser's other versions. Ask the Assistant to group the list by Advertiser and, within each one, compare how long each version ran. Versions that share a start date and stopped early are the tests. The ones still running weeks later are the keepers.
Group these Ads by Advertiser. For each Advertiser, show which versions stopped early and which kept running, with days running for each.Check variants added and confidence
Ask which Ads gained variants between Snapshots and which Scores are high confidence. A high-confidence Score with variants added is the strongest public signal. A Score of 100 at low confidence often means the Ad is simply the longest runner of an Advertiser we have seen only a few Ads from.
Which of these Ads have variants added above zero, and which winner Scores are high confidence? Explain the reason on each low-confidence Score.Narrow by placement and format
If you make Reels, ask for Ads placed on Instagram with video media. Placement works best as a filter for the format you produce. On its own it says little about whether an Ad works.
Keep only video Ads that run on Instagram, and sort them by days running.Analyse the shortlist
Ask for Ad analysis on the five to ten Ads that survived the checks. It reads the video or image itself: the hook, the visuals, the on-screen text and the offer. Then ask what the winners have in common that the stopped tests do not.
Analyse the top five Ads and compare them with the versions that stopped early. What do the long runners do differently in the first three seconds?Track the Advertiser to build history
Set an Advertiser Tracker on the brands you care about. Each daily cycle takes a new Snapshot of their Ads, so days running, variants added and the confidence of each Score improve over time, and a Change Report tells you when a new Ad appears or an old one stops.
Track this Advertiser and tell me each day which Ads started, which stopped and which gained variants: (paste a Meta Page or Ad Library link)
A winner and its tests, from one real search
This is one search of the Meta Ad Library for "protein powder" in the US, all Ads, sorted by winner Score, 50 Ads for 50 Credits. One Advertiser in it ran six versions of the same video Ad, all starting on 22 July 2026. Three are shown below. Two versions ran 97 days and gained 4 variants between Snapshots, and score 90 at high confidence. Two stopped after 49 days and score 10. The fields are trimmed to what matters here and the Ad body text is left out.
The second sample is the free Snapshot history of a different Ad, a mattress Ad that has run 386 days. It has one Snapshot, taken the day we first saw it, so its variant count of 2 is a single reading and its Score of 100 rests on days running alone.
Meta Ad Library, via REST API
POST /v1/ads/search: library meta, query "protein powder", country US, status all, order_by winner, limit 50
{
"run": { "kind": "ads_search", "status": "completed", "charge_credits": 50 },
"result": {
"library": "meta",
"items": [
...
{
"id": "1542145170709553",
"advertiser": { "id": "36543730620", "name": "SAMBAZON" },
"creative": { "title": null, "cta": "Learn more", "format": "VIDEO" },
"media_type": "video",
"placements": ["INSTAGRAM"],
"first_shown": "2026-07-22T07:00:00.000Z",
"last_shown": "2026-10-27T07:00:00.000Z",
"is_active": false,
"days_running": 97,
"variant_count": 10,
"winner_score": {
"score": 90,
"inputs": { "snapshots": 3, "days_running": 97, "advertiser_ads": 6, "variants_added": 4 },
"reason": null,
"confidence": "high"
}
},
...
{
"id": "1566476351495220",
"advertiser": { "id": "36543730620", "name": "SAMBAZON" },
"creative": { "title": null, "cta": "Learn more", "format": "VIDEO" },
"first_shown": "2026-07-22T07:00:00.000Z",
"last_shown": "2026-10-23T07:00:00.000Z",
"is_active": false,
"days_running": 93,
"variant_count": null,
"winner_score": {
"score": 44,
"inputs": { "snapshots": 2, "days_running": 93, "advertiser_ads": 6, "variants_added": 0 },
"reason": null,
"confidence": "high"
}
},
...
{
"id": "1571866057722171",
"advertiser": { "id": "36543730620", "name": "SAMBAZON" },
"creative": { "title": null, "cta": "Learn more", "format": "VIDEO" },
"first_shown": "2026-07-22T07:00:00.000Z",
"last_shown": "2026-09-09T07:00:00.000Z",
"is_active": false,
"days_running": 49,
"variant_count": 10,
"winner_score": {
"score": 10,
"inputs": { "snapshots": 1, "days_running": 49, "advertiser_ads": 6, "variants_added": 0 },
"reason": "single_snapshot",
"confidence": "low"
}
},
...
],
"next_cursor": "eyJjIjoi..."
}
}
(50 Ads in all; these are 3 of the Advertiser's 6. Media URLs, Ad body and other fields trimmed)Meta Ad Library, via REST API
GET /v1/ads/meta/1325111775828757/snapshots
{
"items": [
{
"at": "2026-11-01T17:56:14.914Z",
"metrics": {
"reach": null,
"spend": null,
"running": true,
"currency": null,
"countries": null,
"placements": ["FACEBOOK", "INSTAGRAM"],
"impressions": null,
"variant_count": 2
}
}
],
"next_cursor": null
}
(The same Ad in its search: days_running 386, winner_score 100, snapshots 1, advertiser_ads 3, variants_added 0, confidence low, reason single_snapshot)What 550 Ads looked like on one day
On 1 November 2026 we ran 11 category searches of the Meta Ad Library (US, active and stopped, 50 Ads each) and read the 550 Ads they returned. The median Ad had run 72 days. 230 had run 90 days or more, 112 had run 180 days or more, and 24 had run less than a week.
533 of the 550 had a single Snapshot, so only 17 carried any variant history, and 3 showed variants added. 4 Scores were high confidence. 159 Ads scored 100, all of them at low confidence from a single Snapshot. 87 of those were the only Ad we had from their Advertiser and had run 90 days or more, which is the top of the scale when there is nothing to rank against. Most of the rest were the longest runner among two or three Ads from the same Advertiser.
For any single search, this means days running is available on every Ad from the first look, and variants added appears only after an Ad has been seen more than once. If you need the variant signal on a competitor, track the Advertiser and read the Ads again after a few cycles.
Data limits
Data limits for finding winning Ads
- The winner Score, days running and variant count are computed for Meta Ads only. TikTok Ads carry their first and last shown dates, which you can compare by hand, but no winner Score.
- The TikTok Ad Library covers Ads shown in the EU/EEA, the UK, Switzerland and Turkey only. An Ad that ran only in the US is not in it.
- Neither library shows sales, and Meta shows no spend or impressions for commercial Ads. Every signal here is indirect.
- An Ad seen once has one Snapshot. Its variant count is a single reading, and its Score is low confidence until it has been seen again on a later day.
- Snapshot history is free over the REST API. The MCP tools return each Ad's current state and its winner Score inputs, including how many Snapshots stand behind it.
- Ad analysis covers the first 50 Ads of a search.
- Video Scores (outlier and velocity) are a different measure. They compare a Video with its Creator's usual reach, come back on every Platform through get_creator, and do not apply to Ads. Only score_video, which scores one Video on demand, is TikTok only.
What it costs
A Meta search costs 1 credit per Ad delivered, so 50 Ads cost 50 Credits. Ad analysis adds 20 credits per Ad. Reading an Ad's Snapshots is free. A daily Advertiser Tracker cycle costs 30 credits. Ask your Assistant for an estimate first and it quotes the price without charging.
Credits are prepaid at 1,000 credits per US dollar, with no subscription. New accounts get 1,000 credits free, valid for 90 days. A Run that fails costs nothing, and a partial one is charged only for what finished. Every price is on the pricing page.
Connect your Assistant
The server address is the same for every Assistant. You sign in to ShortsIntel and choose which organization pays.
Claude.ai
Web and desktop. No API key: Claude signs in to ShortsIntel for you.
- Open Claude's add connector page with ShortsIntel filled in, and choose Add. Or go to Settings, Connectors, Add custom connector, and paste the endpoint below.
https://www.shortsintel.com/api/mcp - Sign in to ShortsIntel, approve the connection and choose the organization whose Balance pays for Runs.
- In a chat, turn the ShortsIntel connector on and ask your question.
ChatGPT
Web and desktop, in Developer mode. No API key: ChatGPT signs in over OAuth.
- Open ChatGPT's connector settings and switch Developer mode on.
- Create a connector named ShortsIntel, paste the endpoint and choose OAuth.
https://www.shortsintel.com/api/mcp - Sign in to ShortsIntel and choose your organization.
- In a new chat, choose the + next to the message box, then Developer mode, and turn ShortsIntel on.
Claude Code
One command, then sign in from Claude Code.
- Add the server in your terminal.
claude mcp add --transport http --scope user shortsintel https://www.shortsintel.com/api/mcp - Run /mcp inside Claude Code, choose shortsintel and sign in.
Codex
One command; Codex signs in on first use.
- Add the server in your terminal.
codex mcp add shortsintel --url https://www.shortsintel.com/api/mcp - If no browser window opens to sign in, start it yourself.
codex mcp login shortsintel
Cursor and VS Code
One-click install links; each asks you to confirm.
- In Cursor, open the Cursor install link.
- In VS Code, open the VS Code install link.
- Sign in to ShortsIntel when the editor asks.
Prompts to try
Paste any of these once your Assistant is connected. Swap in your own category or competitor.
- Find Meta Ads for meal kits in the US that have run more than 90 days, and tell me which Advertisers have more than one.
- For this brand, list every Ad with its start date and days running, and mark the ones that look like tests: (paste the brand name or Page link)
- Sort these Ads by winner Score and drop any with low confidence. What is left?
- Which of these Ads share a start date? For each group, which version is still running?
- Analyse the three longest-running video Ads and compare their hooks with the ones that stopped within a month.
Related reading
Questions
- What is a winning ad?
- An Ad that pays back well enough that the Advertiser keeps running it and makes more versions of it. From the outside you cannot see sales, so you read the behaviour: how long the Ad has run compared with the same Advertiser's other Ads, and whether new variants keep being added.
- How long does an ad need to run to be a winner?
- There is no fixed number. Some brands rotate creative every week and others leave Ads running for a year. Compare an Ad with its siblings from the same Advertiser, ideally versions launched on the same day. The winner Score does this ranking for you on Meta Ads.
- Why do so many Ads have a winner Score of 100?
- The Score ranks an Ad against the Advertiser's other Ads we have on file. When there are only one or two, the longest runner comes out on top by default, and an Ad with no siblings on file reaches 100 at 90 days. Those Scores are marked low confidence, with the reason single_snapshot or few_advertiser_ads. With one Snapshot, or under 5 dated Ads from the Advertiser, use the Score to order your reading and check the Ads yourself.
- Can I find winning TikTok ads?
- Partly. The TikTok Ad Library covers Ads shown in the EU/EEA, the UK, Switzerland and Turkey only, and it gives first and last shown dates but no variant count, so ShortsIntel puts no winner Score on TikTok Ads. You can still ask your Assistant to sort them by how long they ran.
- Can one snapshot of an Ad show that it is being scaled?
- No. One Snapshot shows the variant count at that moment. Scaling shows up as variants added, which needs at least two Snapshots on different days. Tracking the Advertiser takes a new Snapshot every day.
- How much does it cost?
- A Meta search costs 1 credit per Ad delivered, Ad analysis 20 credits per Ad, and reading Snapshots is free. New accounts get 1,000 credits free, valid for 90 days. A Run that fails costs nothing, and a partial one is charged only for what finished.
Try it in your Assistant
Connect ShortsIntel to the Assistant you already use and ask the question this guide answers, or try the calls in the Playground first.