datagrit

datagrit › Data › TikTok Top Ads Monitor: New Ads by Industry

Data

TikTok Top Ads Monitor: New Ads by Industry

Daily monitor of TikTok Creative Center Top Ads: new ads per country, industry and objective with CTR, likes, landing page and video links, no login.

Run it on Apify StoreUse the APIfrom $2.10 per 1,000 results + $10 per run · no code needed
from $2.10 per 1,000 results + $10 per runpay only for ads you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.2updated 2026-10-05

TikTok Top Ads Monitor reads the public TikTok Creative Center Top Ads ranking for the countries, industries and campaign objectives you choose and returns every ad as one clean row: title, brand, industry, objective, likes, CTR, video and cover links, and, when you ask for details, the landing page, comments, shares and the countries the ad ran in. No login and no cookies are needed. Turn on Only new ads and schedule the Actor, and each run returns just the ads that entered your ranking since the last run, so a daily run is a feed of fresh winning creatives instead of the same top 20 again.

Why use this Actor?

What is different here?

One run reads the whole combination of countries, industries, objectives, languages and sort orders, merges an ad found in several lists into one row and tells you its best rank and every list it appeared in. Every row carries isNew, firstSeenAt and timesSeen, kept per set of filters, so two monitors never hide each other's ads. Ad details are included in the one ad price.

Sample output


{
  "adId": "7687879583547113492",
  "title": "Discover a slower side of Dubai, surrounded by serene lagoons and lush gardens. #AnantaraThePalm",
  "brandName": null,
  "industry": "Hotels & Accommodation",
  "industryGroup": "Travel",
  "objective": "Video Views",
  "likes": 554,
  "comments": 3,
  "shares": 0,
  "ctr": 0.95,
  "costLevel": 1,
  "durationSeconds": 14.079,
  "videoWidth": 576,
  "videoHeight": 1024,
  "coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oUrrcSzBKIBAb08f0aEB3YB1IKhiigObAwdjcV~tplv-noop.image",
  "videoUrl720p": "https://v16m-default.tiktokcdn.com/540d5e3a234bcfca68b01a654cb40cdf/video/tos/alisg/example.mp4",
  "videoUrl1080p": "https://v16m-default.tiktokcdn.com/995c8255bd3a5d41b629c31f7a5097c5/video/tos/alisg/example.mp4",
  "landingPage": "https://www.example-brand.com/pages/offer?utm_source=tiktok",
  "landingDomain": "example-brand.com",
  "adSource": "Others",
  "shownInCountries": ["US", "DE", "GB"],
  "bestRank": 1,
  "matchedSlices": ["US | 7d | for_you", "US | 7d | ctr"],
  "isNew": true,
  "firstSeenAt": "2026-10-05T08:00:00.000Z",
  "timesSeen": 1,
  "detailStatus": "ok",
  "sourceUrl": "https://ads.tiktok.com/business/creativecenter/topads/7687879583547113492/pc/en",
  "found": true,
  "scrapedAt": "2026-10-05T08:00:00.000Z"
}

Every field is described in the dataset schema of the Actor, and the Top ads view shows the main columns.

Limits you should know

Creative Center shows anonymous visitors one page of 20 ads per list, so a single list never returns more than 20 ads. To see more of the ranking, add sort orders, industries, objectives or countries: the Actor reads them all and merges the results. Keyword search is not available because the anonymous Creative Center API returns no results for it. The video and cover links are signed by TikTok and expire after a few days, so download the files if you need to keep them. The status message of every run states how many ads were read, how many had an industry and how many details were fetched, and the run fails instead of returning silent zeros when TikTok changes its response.

Is it legal to scrape TikTok Creative Center?

The Actor reads only the public Top Ads pages that anyone can open without an account, and returns advertising metrics and links, not personal profiles. You are responsible for how you use the data and for following TikTok's terms and the laws that apply to you.

Support

Found a bug or a missing field? Open an issue on the Actor page and describe the input you used. Issues are answered in English, usually within a day.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
adIdstringTikTok Creative Center material ID of the ad. Empty only on the status row.7687879583547113492
titlestringCaption of the ad as shown in Top Ads, hashtags included.Discover a slower side of Dubai #UnforgettableJourneys
brandNamestringAdvertiser or brand name when Creative Center shows one; many ads have none.Anantara
industrystringMost specific Creative Center industry of the ad, for example Hotels & Accommodation. Empty when Creative Center uses a code missing from its own industry list.Hotels & Accommodation
industryGroupstringTop-level Creative Center industry, for example Travel. This is the value the Industries input filters on.Travel
objectivestringCampaign objective of the ad, for example Conversions or Video Views.Video Views
likesintegerNumber of likes on the ad.554
commentsintegerNumber of comments. Empty when details were not read or failed.3
sharesintegerNumber of shares. Empty when details were not read or failed.0
ctrnumberClick-through rate in percent as ranked by Creative Center.0.95
costLevelintegerCreative Center cost bracket of the ad, from 1 (lowest) upward.1
durationSecondsnumberVideo length in seconds.14.08
videoWidthintegerVideo width in pixels.576
videoHeightintegerVideo height in pixels.1024
coverUrlstringSigned link to the cover image on the TikTok CDN. The link expires after a few days; download the image if you need to keep it.https://p16-common-sign.tiktokcdn.com/example.image
videoUrl720pstringSigned link to the 720p video on the TikTok CDN. Expires after a few days.https://v16m-default.tiktokcdn.com/example.mp4
videoUrl1080pstringSigned link to the 1080p video on the TikTok CDN. Expires after a few days.https://v16m-default.tiktokcdn.com/example-1080.mp4
landingPagestringLanding page URL of the ad as stored by Creative Center, tracking macros such as __CID__ left as they are. Empty when the ad has none or details were not read.https://example.com/product?utm_source=tiktok
landingDomainstringDomain of the landing page without www.example.com
adSourcestringTool the ad was made with, for example TikTok Ads Manager, TikTok Video Editor or Others. Empty when details were not read.TikTok Ads Manager
shownInCountriesarrayCountry codes the ad ran in. Empty when details were not read.["US","GB"]
bestRankintegerBest position of the ad (1 is top) across the lists it appeared in.3
matchedSlicesarrayEvery list the ad appeared in, as country | period | sort order | industry | objective | language. On the status row, all lists that were read.["US | 7d | for_you"]
isNewbooleanTrue when no earlier run with the same countries, industries, objectives, languages, sort orders and period delivered this ad. On the first run every ad is new.true
firstSeenAtstringISO 8601 time this monitor first delivered the ad; the current run time for new ads.2026-10-05T08:00:00.000Z
timesSeenintegerHow many runs of this monitor have delivered the ad, this run included.1
detailStatusstringok when the ad detail was read, failed when the detail request failed, notRequested when Include ad details was off.ok
sourceUrlstringCreative Center page of the ad. Empty only on the status row.https://ads.tiktok.com/business/creativecenter/topads/7687879583547113492/pc/en
foundbooleanFalse only for the single status row emitted when no ad matched.true
scrapedAtstringISO 8601 timestamp of extraction.2026-10-05T08:00:00.000Z

Sample record

{
  "adId": "7687879583547113492",
  "title": "Discover a slower side of Dubai #UnforgettableJourneys",
  "brandName": "Anantara",
  "industry": "Hotels & Accommodation",
  "industryGroup": "Travel",
  "objective": "Video Views",
  "likes": 554,
  "comments": 3,
  "shares": 0,
  "ctr": 0.95,
  "costLevel": 1,
  "durationSeconds": 14.08,
  "videoWidth": 576,
  "videoHeight": 1024,
  "coverUrl": "https://p16-common-sign.tiktokcdn.com/example.image",
  "videoUrl720p": "https://v16m-default.tiktokcdn.com/example.mp4",
  "videoUrl1080p": "https://v16m-default.tiktokcdn.com/example-1080.mp4",
  "landingPage": "https://example.com/product?utm_source=tiktok",
  "landingDomain": "example.com",
  "adSource": "TikTok Ads Manager",
  "shownInCountries": [
    "US",
    "GB"
  ],
  "bestRank": 3,
  "matchedSlices": [
    "US | 7d | for_you"
  ],
  "isNew": true,
  "firstSeenAt": "2026-10-05T08:00:00.000Z",
  "timesSeen": 1,
  "detailStatus": "ok",
  "sourceUrl": "https://ads.tiktok.com/business/creativecenter/topads/7687879583547113492/pc/en",
  "found": true,
  "scrapedAt": "2026-10-05T08:00:00.000Z"
}

Input

FieldNameTypeWhat it does
countriesCountriesarrayCountries whose Top Ads ranking to read. Use two-letter codes or names. Each country is read separately and the same ad found in several lists is returned once. Available: AR Argentina, AU Australia, BR Brazil, CA Canada, CO Colombia, FR France, DE Germany, ID Indonesia, IT Italy, JP Japan, MY Malaysia, MX Mexico, NL Netherlands, PK Pakistan, PH Philippines, RO Romania, SA Saudi Arabia, SG Singapore, ZA South Africa, KR South Korea, ES Spain, SE Sweden, TH Thailand, TR Turkey, AE United Arab Emirates, GB United Kingdom, US United States, VN Vietnam.
periodDaysRanking periodstringWindow the Top Ads ranking is calculated over.
sortBySort ordersarrayRanking orders to read. Each order returns a different top 20, so several orders widen coverage. Ads found in more than one are returned once with their best rank. Available: for_you (default ranking), ctr, like, impression, cvr (conversion rate).
industriesIndustriesarrayLimit to these top-level industries. Leave empty for all industries. Available: Apparel & Accessories, Appliances, Apps, Baby, Kids & Maternity, Beauty & Personal Care, Business Services, E-Commerce (Non-app), Education, Financial Services, Food & Beverage, Games, Health, Home Improvement, Household Products, Life Services, News & Entertainment, Pets, Sports & Outdoor, Tech & Electronics, Travel, Vehicle & Transportation.
objectivesCampaign objectivesarrayLimit to these campaign objectives. Leave empty for all objectives. Available: Traffic, App Installs, Conversions, Video Views, Reach, Lead Generation, Product sales.
adLanguagesAd languagesarrayLimit to ads in these languages, by code. Leave empty for all languages. Available: en English, es Spanish, ar Arabic, vi Vietnamese, th Thai, de German, id Indonesian, pt Portuguese, fr French, ms Malay, nl Dutch, ja Japanese, it Italian, ro Romanian, zh-Hant Traditional Chinese, ko Korean.
onlyNewOnly new adsbooleanReturn only ads not delivered by an earlier run with the same countries, industries, objectives, languages, sort orders and period. Turn on for a daily or weekly monitor; the first run returns everything.
includeDetailsInclude ad detailsbooleanRead each ad detail for its landing page, comments, shares and the countries it ran in. Adds one request per ad; turn off for a faster list-only run.
maxItemsMaximum adsintegerStop after this many ads in total across all lists.
proxyConfigurationProxy configurationobjectOptional proxy. Leave disabled unless TikTok blocks datacenter traffic from your location; residential proxy raises the platform cost of the run.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~tiktok-top-ads-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"countries":["US","GB"],"sortBy":["for_you","ctr"],"periodDays":"7","includeDetails":true,"maxItems":50}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/tiktok-top-ads-monitor').call({
  "countries": [
    "US",
    "GB"
  ],
  "sortBy": [
    "for_you",
    "ctr"
  ],
  "periodDays": "7",
  "includeDetails": true,
  "maxItems": 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/tiktok-top-ads-monitor").call(run_input={
  "countries": [
    "US",
    "GB"
  ],
  "sortBy": [
    "for_you",
    "ctr"
  ],
  "periodDays": "7",
  "includeDetails": True,
  "maxItems": 50
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Try TikTok Top Ads Monitor: New Ads by Industry on Apify

Guide

How to track new TikTok Top Ads by industry and country with Python — Pull TikTok Creative Center Top Ads for several countries and industries, merge the lists, and get only the ads that are new since your last run.

Related Actors

Public procurement

UK Contract Expiry Radar - Recompete Leads

UK public contracts ending soon with incumbent supplier, buyer, value and contact - recompete leads from Contracts Finder award notices.

from $3.50 / 1,000 results
Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results