TikTok Ads Bulk Scraper — Creative Center Top Ads avatar

TikTok Ads Bulk Scraper — Creative Center Top Ads

Pricing

Pay per event

Go to Apify Store
TikTok Ads Bulk Scraper — Creative Center Top Ads

TikTok Ads Bulk Scraper — Creative Center Top Ads

Bulk TikTok ad exports charge you per row returned — including the duplicates you get when you sweep several countries, and the overlap is real (38% between US and GB). This one de-duplicates before it bills, so you pay for distinct creatives, not repeated rows.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Radu Furtuna

Radu Furtuna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bulk-export the top-performing ads from TikTok Creative Center — video URLs, brand names, CTR, cost, likes, industry and objective — across as many country and time-window slices as you want, de-duplicated into one clean dataset.

How it works

  1. No third-party account needed. TikTok Creative Center renders client-side and refuses requests made outside a real browser session, so a real anti-detect browser is required — this Actor uses a built-in stealth browser by default. You can still point it at your own remote browser (cdpUrl) if you prefer; the backend is never switched automatically and is reported in the run's coverage. This Actor only reads what the public board loads for an ordinary visitor.
  2. You pick countries and periods. Every country × period pair is one slice of the board.
  3. Each slice is swept to its full depth — up to 100 ads (5 pages × 20), which is the source's own hard ceiling per slice.
  4. Ads are de-duplicated across slices before they reach the dataset, and you are charged once per distinct ad. Slices overlap in reality (measured: US/30d and GB/30d share 38 of ~100), so this matters.

Input

{
"countryCodes": ["US", "GB", "DE"],
"periods": [7, 30],
"orderBy": "ctr",
"maxPagesPerSlice": 5,
"maxAds": 1000
}
FieldMeaning
cdpUrlOptional. Leave empty to use the built-in stealth browser. If set, stored as a secret and never logged.
countryCodesTwo-letter codes, up to 28 (the source's own list). Default ["US"].
periods7, 30, 180. Each period is a separate slice. Default [30].
orderByctr (default) and impression are deterministic; for_you is personalised and rotates.
maxPagesPerSlice15. Default 5 (the full 100 ads per slice).
maxAdsHard stop, counted after de-duplication — the number of distinct ads you actually receive.
webhookUrlOptional HTTPS endpoint receiving a JSON run summary.

Output

One dataset row per distinct ad:

adId, title, brand, ctr, cost, likes, industryKey, objectiveKey, videoId, durationSec, coverUrl, adUrl (the ad's card in TikTok Creative Center — a link that actually opens; the board exposes an internal video id, not a public post id, so no tiktok.com/@/video/... link is offered), countryCode, period, orderBy, runId, scrapedAt.

countryCode / period / orderBy record which slice the ad was first seen in, so the export stays traceable. The key-value store also holds coverage with per-slice detail: pages seen, source total_count, and whether the window was truncated or the pagination incomplete.

Billing

  • run-started — once per run, charged only after the board has actually returned a valid, recognised response. A blocked or dead run charges nothing at all, not even the start event.
  • ad-scraped — once per distinct ad, charged only after the row is written to the dataset.

You are never charged twice for the same creative within a run, and never for a run that returned nothing.

How this compares

run-started $0.002 · ad-scraped $0.0009 ($0.90 per 1,000 distinct ads).

The list price is mid-range for the category. What changes the actual bill is de-duplication: slices of the board overlap heavily, and this actor charges per distinct creative, not per row returned. Measured overlap between the US and GB 30-day slices was 38%.

So for a realistic multi-country sweep — say 3 countries × 30 days, 300 rows fetched, ~190 of them distinct after overlap is removed:

what you pay forbill for that sweep
Bulk scraper at $3.00 / 1,000every row, duplicates included$0.90
Bulk scraper at $1.50 / 1,000every row, duplicates included$0.45
TikTok Ads Bulk Scraper at $0.90 / 1,000distinct ads only$0.17
Bulk scraper at $0.49 / 1,000every row, duplicates included$0.15
Cheapest bulk dumper at $0.01 / 1,000every row, duplicates included$0.003

Being straight about it: on sticker price this actor is not the cheapest on the Store, and one dumper is cheaper than anything short of free. On the bill for a real multi-country sweep it lands next to the cheapest mainstream option — while giving you a clean, de-duplicated dataset instead of repeated rows you have to sort out yourself. The wider you sweep, the more that gap works in your favour.

Limits, honestly

  • 100 ads per slice is the source's hard ceiling (5 pages × 20). Volume comes from sweeping more slices, not from asking for a bigger page.
  • Slices overlap. 28 countries × 3 periods is 84 slices and a theoretical 8,400 rows, but the distinct total is lower — measured overlap between US/30d and GB/30d was 38%.
  • No industry / objective / language filter. Creative Center exposes those controls, but the board ignores them when they are passed in the page URL — verified directly: requesting a specific industry returned the same industry mix as an unfiltered request. Rather than ship a filter that silently does nothing, this actor does not offer one. Every ad's own industryKey and objectiveKey are in the output, so you can filter after export.
  • for_you rotates. If you choose it, two runs will not return the same set. ctr and impression are deterministic — prefer them for repeatable exports.
  • TikTok does not publish an ad's real first-appearance date, and this actor does not claim one.

Author: OmniCoder (https://t.me/OmniCoder)