TikTok Ad Intelligence avatar

TikTok Ad Intelligence

Pricing

from $0.00001 / actor start

Go to Apify Store
TikTok Ad Intelligence

TikTok Ad Intelligence

Rank a competitor's TikTok ads by how long they have run and how widely they were duplicated, and get a summary per advertiser.

Pricing

from $0.00001 / actor start

Rating

0.0

(0)

Developer

EMT Crawler

EMT Crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Categories

Share

Give it your competitors. Get back which of their TikTok ads are actually working — and a one-row summary of what each advertiser is doing.

Built on TikTok's own Commercial Content Library, so every number traces back to something TikTok publishes. No login, no estimates dressed up as facts.

The idea

An ad that is still running after three weeks is an ad that pays for itself. An ad the advertiser duplicated into twelve separate entries is an ad they are pushing budget behind. Those two signals are public, and this actor extracts both:

SignalWhat it meansWhere it comes from
daysRunningHow long the ad has been liveTikTok's first/last shown dates
duplicateCountHow many live copies of the same creative the advertiser is runningIdentical ad text under the same advertiser
isEvergreenStill running after 14+ daysDerived from daysRunning
rankByDaysRunningThe ad's rank inside that advertiser's setDerived
advertiserShareOfAdsHow much of the scraped category the advertiser occupiesDerived

What this is not: TikTok does not publish spend. duplicateCount is a budget signal, not a budget figure, and this actor never converts it into one.

Two outputs

Default dataset — one row per ad, with every field from the ad library (creative, dates, reach, advertiser, targeting) plus the five signals above. Open the "Ads by staying power" view to see the winners first.

Key-value store record ADVERTISER_SUMMARY — one entry per advertiser and country. Open it from the run's Storage → Key-value store tab:

{
"advertiserName": "JD SPORTS FASHION PLC",
"country": "GB",
"adsFound": 200,
"videoAds": 164,
"imageAds": 36,
"firstSeen": "2026-09-12",
"lastSeen": "2026-10-11",
"medianDaysRunning": 4,
"maxDaysRunning": 557,
"evergreenAds": 23,
"scaledCreatives": 11,
"industries": [{ "value": "Apparel & Accessories", "count": 180 }],
"audienceBands": { "10K-100K": 120, "100K-1M": 65 },
"targetedAgeGroups": [{ "value": "18-24", "count": 190 }],
"targetedGenders": [{ "value": "female", "count": 150 }],
"topInterests": [{ "value": "Sports", "count": 88 }],
"topCreatives": [
{
"adTitle": "Reprimo's Echo collection has landed at JD",
"daysRunning": 29,
"duplicateCount": 7,
"videoUrl": "https://library.tiktok.com/api/v1/cdn/...",
"adUrl": "https://library.tiktok.com/ads/detail/?ad_id=...&region=GB"
}
]
}

How to use it

  1. Find your competitor's exact name. The library lists legal entities (JD SPORTS FASHION PLC), not TikTok handles. Run it once with a keyword, look at advertiserName in the results, then re-run with the exact names.
  2. Your date window filters, it does not clip. The window decides which ads are returned (those last shown inside it), but daysRunning is the ad's true flight length — a 30-day window routinely surfaces ads that started 500+ days ago and are still running. Those are the real winners.
  3. Sort by daysRunning, then duplicateCount. The ads at the top are the ones worth studying before you brief your own.
  4. Then turn on includeTargeting. Run it once without targeting to find which advertisers are worth your attention, then re-run on just those names with targeting on. It costs one extra request per ad, so paying for it on everyone is wasteful.
  5. Re-run weekly. Comparing evergreenAds and scaledCreatives week over week tells you where a competitor is shifting budget.

Input

{
"advertisers": ["JD SPORTS FASHION PLC", "ASOS.COM LIMITED"],
"countries": ["GB"],
"lastDays": 30,
"includeTargeting": false,
"maxAdsPerAdvertiser": 100,
"topCreatives": 5
}
FieldTypeDefaultNotes
advertisersarray—Required. Legal names or category keywords.
countriesarray["GB"]EEA, UK, Switzerland and Turkey only — see below.
lastDaysinteger30Which ads to include, by last shown date. Minimum 7.
dateFrom / dateTostring—Exact range as YYYY-MM-DD.
includeTargetingbooleanfalseAdds the age/gender/interest breakdown. One extra request per ad, so it roughly triples run time.
maxAdsPerAdvertiserinteger100Per advertiser, per country. Advertisers are scraped side by side, so adding competitors costs far less time than raising this.
topCreativesinteger5Winning ads embedded in each summary row.
proxyConfigurationobjectResidentialThe actor pins the proxy to the country it is scraping.

Country coverage

The library only exists for 33 countries: the EEA, the United Kingdom, Switzerland and Turkey. There is no US, Asian or Vietnamese data — not here, and not on TikTok's site.

Speed

Advertisers are scraped side by side, one session each. Measured: 3 competitors, 232 ads, 3 minutes 33 seconds. A single advertiser takes about four minutes per 100 ads, because paging through one advertiser's results has to happen in order. Turning on includeTargeting roughly triples that.

If TikTok blocks one advertiser mid-run, that advertiser stops where it got to and the rest of the report still completes — the log says exactly which one and how far it got.

Limitations

  • Targeting is best-effort, and the shared proxy pool limits it. TikTok rejects the per-ad targeting lookup from IP addresses it has seen too often. Measured over several runs on Apify's shared residential proxies, about half the ads come back with targeting; from a clean IP the same lookups succeed every time. The other ads keep every other field and carry targeting: null, and the run log tells you the exact count. To improve it, raise Retries per request (slower, costlier) or plug your own proxies into the Proxy section.
  • Reach comes in bands (10K-100K), never exact numbers.
  • TikTok caps a single search at 5,000 ads.
  • A minority of ads have no creative published; they still count in the summary and are flagged creativeAvailable: false.
  • duplicateCount matches on ad text. Two genuinely different videos sharing one caption will group together.
  • advertiserName is blank on some search results. Turning on includeTargeting fills it in from the ad's detail page; the ones TikTok never attributes are grouped as "Unknown advertiser".

Reads a public transparency database TikTok publishes under the EU Digital Services Act. No personal data, no login.