Ad Library Intelligence (Google, LinkedIn & TikTok)
Pricing
from $3.00 / 1,000 ad records
Ad Library Intelligence (Google, LinkedIn & TikTok)
Monitor competitors' ads in the Google Ads Transparency Center and LinkedIn Ad Library, and top ads in TikTok Creative Center. Normalized ad records plus change events: new ads, ended ads, creative refreshes, new regions and new landing domains.
Pricing
from $3.00 / 1,000 ad records
Rating
0.0
(0)
Developer
Al Moutasem Nabil
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Ad Library Intelligence: Google, LinkedIn and TikTok ad monitoring
Give it a list of competitors and get their currently running ads from the Google Ads Transparency Center and the LinkedIn Ad Library, plus the top ads for your market from TikTok's Creative Center, normalized into one schema. Schedule it and get only what changed: new ads, ended ads, creative refreshes, new landing domains and new regions.
Most ad-library tools cover one library and give you a pile of ads. This Actor combines Google, LinkedIn and TikTok and tells you what changed since yesterday.
Who is it for
- Agencies and performance marketers who need a weekly competitor creative review without opening three transparency sites.
- Brand and product marketing teams tracking when a competitor launches a campaign, refreshes creatives or starts advertising in a new country.
- Competitive intelligence and sales teams watching landing-domain changes (a new product microsite is usually a launch signal).
- Founders and analysts sizing up how heavily a company advertises and where.
What makes it different
- Three libraries in one run, one schema per ad (
platform,advertiser,format, copy,landingDomain,mediaUrls, dates,regions). - Change detection. A compact snapshot per watch list is kept in the
ad-intel-statekey-value store; every run emitsnew_ad,ad_ended,creative_refresh,new_landing_domain,new_regionandadvertiser_errorevents. Ended ads stay in the snapshot so each event fires once; ads whose library id changed but whose creative did not are recognised as the same ad. - Internal JSON endpoints. Google's own transparency RPCs (
SearchCreatives,GetCreativeById) and TikTok's signedtop_adsAPI are used directly; LinkedIn's server-rendered library pages are parsed, searched by advertiser name. No login anywhere, no cookies, no media downloads. - Google first/last shown dates and regions, LinkedIn ad copy, headline, call to action and format, TikTok engagement metrics (likes, comments, shares, CTR percentile, duration) with the ad's industry and objective.
- Advertiser disambiguation. A name search on Google can match ten advertisers ("Notion OU", "NOTION LLC", "Skin notion"); the resolver scores them by name and domain, and the run summary lists the candidates so you can pin
googleAdvertiserIdnext time. - Per source isolation, explicit failures. One failing advertiser or query never fails the run and, in change mode, never produces
ad_endedevents: you get a freeadvertiser_errorrow with the reason. A source with no matching ads gets a freeno_adsrow, and a quiet change-mode run gets one freeno_changesrow, so an empty result always says why. - No personal data. Phone numbers and emails inside ad copy are masked.
Input
| Field | Type | Default | Description |
|---|---|---|---|
advertisers | array | – | Google and LinkedIn advertisers: { name, domain, googleAdvertiserId, linkedinCompanyId }. Name alone works. |
platforms | array | ["google","linkedin","tiktok"] | Any of google, linkedin, tiktok. |
googleRegion | string | anywhere | ISO-2 country code to filter Google creatives. |
tiktokQueries | array | – | { keyword, region (default SA), objective, period (7/30/180) }. TikTok is query-based, not advertiser-based. |
activeOnly | boolean | true | Keep only currently running ads. |
lastNDays | integer | 90 | Drop ads last shown before this window. |
maxAdsPerAdvertiser | integer | 200 | Cap per advertiser and per TikTok query. |
emitChangesOnly | boolean | false | Change events instead of ads. Needs trackingId. |
emitBaselineAsNew | boolean | false | First run for a trackingId emits every ad as new_ad instead of a baseline notice. |
trackingId | string | – | Name of the watch list (state key). |
refreshThreshold | integer | 5 | New ads from one advertiser or query in one run that count as creative_refresh. |
maxConcurrency | integer | 5 | Google and LinkedIn advertiser sources in parallel (LinkedIn is paced to one request per second). |
proxyConfiguration | object | Apify datacenter | Proxy for Google and TikTok. LinkedIn always uses Apify residential proxies (see Pricing). |
Snapshot mode (every running ad, once). This is the Console prefill: two advertisers on Google and LinkedIn and one TikTok top-ads query, 5 ads each, about a minute:
{"advertisers": [{"name": "HubSpot","domain": "hubspot.com","googleAdvertiserId": "AR10072600183532683265"},{"name": "monday.com","domain": "monday.com","googleAdvertiserId": "AR15972262369074085889"}],"platforms": ["google", "linkedin", "tiktok"],"tiktokQueries": [{"region": "US","period": 7}],"maxAdsPerAdvertiser": 5,"proxyConfiguration": {"useApifyProxy": true}}
Raise maxAdsPerAdvertiser (20-200) and add advertisers and queries for real monitoring. TikTok region/period/objective queries are reliable; keyword queries ({ "keyword": "fitness app", "region": "US" }) work but TikTok often returns few or no top ads for them.
Change mode (schedule daily):
{"advertisers": [{ "name": "HubSpot", "domain": "hubspot.com", "googleAdvertiserId": "AR10072600183532683265" },{ "name": "Notion", "domain": "notion.so" }],"platforms": ["google", "linkedin", "tiktok"],"tiktokQueries": [{ "region": "SA", "period": 7 }],"trackingId": "competitor-ads","emitChangesOnly": true,"refreshThreshold": 5}
Output
Snapshot mode pushes one record per ad (see .actor/dataset_schema.json for every field). All three libraries use the same shape: firstShownAt / lastShownAt are filled for Google, headline, bodyText and cta for LinkedIn, and the tiktok object for TikTok. Real records from the example input above:
A Google ad:
{"platform": "google","advertiser": {"name": "Hubspot, Inc.","id": "AR10072600183532683265","domain": "hubspot.com","verified": true},"adId": "CR06763977401278922753","libraryUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR06763977401278922753?region=anywhere","format": "video","headline": null,"bodyText": null,"cta": null,"landingUrl": null,"mediaUrls": ["https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=7615749964&creativeId=773345556394&uiFeatures=12,54&adGroupId=185955011900&versionId=4&assets=%3DH4sIAAAAAAAAAAFZAKb_ClcKCQjG-bHR5wMQDAoJCOPZqIaeARAGCgkIn-KPiZkEEAgKCQimlda1pQEQAwoJCPuk8Z6ZChAdCgkIkuyYvtkDEAIKCQiY4qq82AMQAQoICN3_q64mECmOXaHHWQAAAA&sig=ACiVB_zr1hcddngYDsEsroYWAoxk2blzYA&htmlParentId=fletch-render-14122262163592998877&responseCallback=fletchCallback14122262163592998877"],"firstShownAt": "2025-09-11T10:18:27.000Z","lastShownAt": "2026-09-12T23:36:54.000Z","isActive": true,"regions": ["FR"],"scrapedAt": "2026-09-12T23:59:13.986Z","landingDomain": null}
A TikTok top ad:
{"platform": "tiktok","advertiser": {"name": "Unnamed advertiser","id": null,"domain": null,"verified": null},"adId": "7682635143233044481","libraryUrl": "https://ads.tiktok.com/business/creativecenter/topads/7682635143233044481/pc/en","format": "video","headline": "Reflection Temple Complete Guide to all Taboos and Endings #WhereWindsMeet #WWMCCPS11 #WWMGhost","bodyText": null,"cta": null,"landingUrl": null,"mediaUrls": ["https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oEIeVqAC6BaqUgVHjuQAyFEBBoDmzlDspf4vMc~tplv-noop.image?dr=18692&refresh_token=a750fdc5&x-expires=1789279601&x-signature=LzICI8kjel47HGrkG5iKiPW9E7w%3D&t=9276707c&ps=14f1eb3e&shp=9e36835a&shcp=317596d8&idc=my&VideoID=v1c025g50000daaq0rvog65hq8us0pu0","https://v16m-default.tiktokcdn.com/089ad9db17aa2b376705e89334bfa8ac/6aa63d71/video/tos/alisg/tos-alisg-pve-0037/oo12IVZBABiMAw3b8oFAfiXxAAur3Ej0KtS3YQ/?a=0&bti=NTU4QDM1NGA%3D&&bt=545&ft=cApXJCz7ThWH_WUDLGZmo0P&mime_type=video_mp4&rc=NWYzODQ8Zzw7NjxoZzs8NUBpM3N2O2s5cnV0ZDMzODgzNEA2XjFjLy9jNWIxNC9jYTVfYSNyLXJuMmRzLV5hLS1kL2Bzcw%3D%3D&vvpl=1&l=202609130759430FF1453824032EC59572&btag=e000a0000"],"firstShownAt": null,"lastShownAt": null,"isActive": true,"regions": ["SG", "GB", "US", "AU", "ID", "MY", "PH", "PT", "BR"],"tiktok": {"likes": 200,"comments": 0,"shares": 0,"ctrPercentile": 0.93,"durationSec": 418.734,"industry": "Games & Utility Software","objective": "video_view","region": "US","query": "tiktok US · 7d"},"scrapedAt": "2026-09-12T23:59:13.986Z","landingDomain": null}
Change mode pushes one item per change event (type: new_ad, ad_ended, creative_refresh, new_landing_domain, new_region, advertiser_error). Items from a TikTok test run (the stored snapshot was edited by hand so that every event type fires, which is why the ad_ended example is a placeholder ad):
creative_refresh:
{"type": "creative_refresh","platform": "tiktok","advertiser": "tiktok SA · 30d","sourceKey": "tiktok:||sa||30|","trackingId": "proof-tiktok","observedAt": "2026-09-05T21:26:46.551Z","count": 6,"threshold": 5,"headlines": ["#متخصص في دهان الابواب وتجديد بويه الابواب القديمه دهان طاولات ومكتبات تجديد بويه المطابخ دهان غرف النوم الخشب دهان الديكورات الخشبيه والحديد دهان كراسي متواجد بمكه, [phone]","مضغوط نثري موقعهم حي الرمال على طريق وادي الساحل طبعاً الدجاج واللحم مطبوخ بالبخار لمدة 6 ساعات بدون نقطة مويه 🤯👌🏻 التوصيل مجاني لحي الرمال 🚗 Ad #الرمال #مضغوط #مضغوط_ نثري #مدفون #رز","الثانية مجاناً لايفوتك","❌ لا تغيّر بابك! خلّيه يرجع جديد 👌 بلون فخم وتشطيب يشرّف 🔥 بابك باهت؟ فيه خدوش؟ أثر شمس أو صدأ؟ الحل أسهل مما تتوقع ✨ نقدّم صبغ احترافي لأبواب الحديد والخشب دهانات أصلية 🎨 ثبات لون عالي وحماية من الحرارة والرطوبة 💪 شغل احترافى 👌 تنفيذ سريع ⏱️ ونسلّم في الوقت ✔️ من باب عادي… إلى باب يغيّر شكل المكان بالكامل 😍 تبغى بابك كأنه جديد؟ تواصل معنا الآن 📲 وخلي الصبغ علينا ✨ معاينة مجانية #ص#صبغ_ابوابص#صبغ_ابواب_حديد_وخشب_طاولات_دواليبص#صبغ_خشبد#ديكورتشطيبات_داخلية_خارجية","Let every performance take you deeper into the island’s culture","باقه جاك سبارو من ريف #ريف #عطورات #عطور_ريف : : @ReefPerfumes : : : : :"]}
new_ad:
{"type": "new_ad","platform": "tiktok","advertiser": "tiktok SA · 30d","sourceKey": "tiktok:||sa||30|","trackingId": "proof-tiktok","observedAt": "2026-09-05T21:26:46.551Z","ad": {"platform": "tiktok","advertiser": {"name": "Unnamed advertiser","id": null,"domain": null,"verified": null},"adId": "7663836490589798420","libraryUrl": "https://ads.tiktok.com/business/creativecenter/topads/7663836490589798420/pc/en","format": "video","headline": "#متخصص في دهان الابواب وتجديد بويه الابواب القديمه دهان طاولات ومكتبات تجديد بويه المطابخ دهان غرف النوم الخشب دهان الديكورات الخشبيه والحديد دهان كراسي متواجد بمكه, [phone]","bodyText": null,"cta": null,"landingUrl": null,"mediaUrls": ["https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/okYwYCuB1Am4ELEiiJ4EiAIaCAnYfLowTIIPBy~tplv-noop.image?dr=18692&refresh_token=9dd838b4&x-expires=1788665231&x-signature=jmGEMTeD%2BkrDXpOxaf38DsflHCY%3D&t=9276707c&ps=14f1eb3e&shp=9e36835a&shcp=317596d8&idc=my2&VideoID=v1c044g50000d9c9gpfog65od4ss84c0","https://v16m-default.tiktokcdn.com/9edd8322f75a23c75ae637e5b75ad7ab/6a9cdd8f/video/tos/alisg/tos-alisg-pve-0037c001/o8BTui4OwEmLyiOCEuEfZnFQ4EuYAIwaY1IEAA/?a=0&bti=NTU4QDM1NGA%3D&&bt=361&ft=cApXJCz7ThWH2f~5LGZmo0P&mime_type=video_mp4&rc=NmRpNDtmNjU7NDtpZDM0aEBpMzd2N3I5cnM8PDMzODczNEBeX2FfYl8yXi8xMV9eYzBgYSNgNXBhMmRjZGBhLS1kMWBzcw%3D%3D&vvpl=1&l=202609060526513B1EE5585E84C405B6AB&btag=e000b8000"],"firstShownAt": null,"lastShownAt": null,"isActive": true,"regions": ["SA"],"tiktok": {"likes": 44,"comments": 1,"shares": 1,"ctrPercentile": 0.7,"durationSec": 20.875,"industry": "label_21100000000","objective": "conversion","region": "SA","query": "tiktok SA · 30d"},"scrapedAt": "2026-09-05T21:26:46.551Z","landingDomain": null}}
ad_ended:
{"type": "ad_ended","platform": "tiktok","advertiser": "tiktok SA · 30d","sourceKey": "tiktok:||sa||30|","trackingId": "proof-tiktok","observedAt": "2026-09-05T21:26:46.551Z","ad": {"hash": "ghost","firstSeenAt": "2026-09-05T21:25:53.824Z","landingDomain": "ghost.example","regions": ["ZZ"],"isActive": true,"headline": "Your next trip deserves a first-class upgrade 🚐 Experience the ultimate comfort in our premium Toyota Alphard with a professional chauffeur. ✨ Captain electric seats 📺 On-board TV, Wi-Fi, & chargers ☀️ Electric sunshades & sunroof 🧳 Perfect for business trips, family vacations, & airport transfers Ready to elevate your travel from Bangkok to Pattaya, Hua Hin, Khao Yai, and beyond? Contact us to reserve your ride! 📲 #toyotaalphard #luxurytravel #thailandtravel #bangkoktransport #privatedriver","libraryUrl": "https://ads.tiktok.com/business/creativecenter/topads/7667040007445889025/pc/en","adId": "GHOST-ENDED"}}
new_landing_domain:
{"type": "new_landing_domain","platform": "tiktok","advertiser": "tiktok SA · 30d","sourceKey": "tiktok:||sa||30|","trackingId": "proof-tiktok","observedAt": "2026-09-05T21:26:46.551Z","domain": "linktr.ee","count": 1,"headlines": ["مضغوط نثري موقعهم حي الرمال على طريق وادي الساحل طبعاً الدجاج واللحم مطبوخ بالبخار لمدة 6 ساعات بدون نقطة مويه 🤯👌🏻 التوصيل مجاني لحي الرمال 🚗 Ad #الرمال #مضغوط #مضغوط_ نثري #مدفون #رز"]}
Free status rows (never charged) explain empty results, for example { "type": "no_ads", "platform": "tiktok", "advertiser": "tiktok \"coffee\" · SA · 30d", "error": "TikTok Creative Center returned no top ads for this query ..." }, and a change-mode run with nothing new contains one no_changes row.
The key-value store record SUMMARY lists every advertiser × platform with ads found, active ads, requests made, duration, proxy type, resolved advertiser and disambiguation candidates, plus charged events per run.
Sample output
Real items from the example input above (one Google ad, one LinkedIn ad and one TikTok top ad), verified on the Apify platform in September 2026. Long text and lists are shortened for this page; field names and values are otherwise exactly as the Actor returns them.
[{"platform": "google","advertiser": {"name": "Hubspot, Inc.","id": "AR10072600183532683265","domain": "hubspot.com","verified": true},"adId": "CR10021774992250765313","libraryUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR10021774992250765313?region=anywhere","format": "video","headline": null,"bodyText": null,"cta": null,"landingUrl": null,"mediaUrls": ["https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=7615749964&creativeId=797655981736&uiFeatures=12,54&adGroupId=185124903319&versionId=2&assets=%3DH4sIAAAAAAAAAOPqY-Ti4Lj7f_U6NQFNLk6O-R_WL9nOLcDMxcnx7…","https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=7615749964&creativeId=797655981736&uiFeatures=12&adGroupId=185124903319&versionId=2&assets=%3DH4sIAAAAAAAAAOPqY-Ti4Lj7f_U6NQFNLk6O-R_WL9nOLcDMxcnx7z2Y…","https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=7615749964&creativeId=797655981736&uiFeatures=12&adGroupId=185124903319&versionId=2&assets=%3DH4sIAAAAAAAAAAFDALz_CkEKCAjd_6uuJhApCgkIn-KPiZkEEAgKCQio…"],"firstShownAt": "2026-02-17T21:36:59.000Z","lastShownAt": "2026-09-13T20:31:58.000Z","isActive": true,"regions": ["GB", "IE"],"scrapedAt": "2026-09-13T20:50:01.420Z","landingDomain": null},{"platform": "linkedin","advertiser": {"name": "HubSpot","id": null,"domain": "hubspot.com","verified": null},"adId": "1531560653","libraryUrl": "https://www.linkedin.com/ad-library/detail/1531560653","format": "video","headline": "Cool, calm, and compounding revenue.","bodyText": "Results this good? Definitely not the smoothie. HubSpot gives your marketing, sales, and service teams everything they need to grow — all on one platform.","cta": "Learn more","landingUrl": null,"mediaUrls": ["https://media.licdn.com/dms/image/v2/D4D10AQH9CB6BXnsMTQ/videocover-high/B4DaBscCZ.HwBI-/0/1788525687353?e=2147483647&v=beta&t=SIzMIvIP2mz31BHaM4LgLUkV9hhKtsuFb89OEQpDPJo"],"firstShownAt": null,"lastShownAt": null,"isActive": true,"regions": [],"linkedin": {"impressionsRange": null,"countryBreakdown": []},"scrapedAt": "2026-09-13T20:50:01.420Z","landingDomain": null},{"platform": "tiktok","advertiser": {"name": "Unnamed advertiser","id": null,"domain": null,"verified": null},"adId": "7681489931123671061","libraryUrl": "https://ads.tiktok.com/business/creativecenter/topads/7681489931123671061/pc/en","format": "video","headline": "New collection - STUDIO - online now","bodyText": null,"cta": null,"landingUrl": "https://swtactive.com/collections/new-releases?utm_source=tiktok&utm_id=__CAMPAIGN_ID__&utm_campaign=__CAMPAIGN_NAME__&utm_medium=paid&tt_campaignid=__CAMPAIGN_ID__","mediaUrls": ["https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0051c001-sg/ogMNDEgdIrqFuIDfQB0BEUF7QmKOVBfis0Axv8~tplv-noop.image?dr=18692&refresh_token=c7ab0a70&x-expires=1789354263&x-signature=g0hYveMb6TGHKputzmYp9b63LQw%3D&t=9276707c&ps=14f1eb3e&shp=9e36835a&shcp=317596d8&idc=my&VideoID…","https://v16m-default.tiktokcdn.com/b4ca427049b962a28851ef754ddbdd42/6aa76117/video/tos/alisg/tos-alisg-ve-0051c001-sg/o0Ag0FRtKmJZDRtINfVBifDwgQENBkjIZqbYQc/?a=0&bti=NTU4QDM1NGA%3D&&bt=2332&ft=cApXJCz7ThWHLXIDLGZmo0P&mime_type=video_mp4&rc=NmVnZzU6M2lkaGY5OGdkNEBpajV1dHA5cnk1Z…"],"firstShownAt": null,"lastShownAt": null,"isActive": true,"regions": ["AU", "NZ", "US"],"tiktok": {"likes": 49,"comments": 0,"shares": 0,"ctrPercentile": 0.4,"durationSec": 15.022,"industry": "Women's Clothing","objective": "conversion","region": "US","query": "tiktok US · 7d"},"scrapedAt": "2026-09-13T20:50:01.420Z","landingDomain": "swtactive.com"}]
Scheduling and notifications
- Fill in the change-mode input and Save as task.
- Add a Schedule to the task (daily at 07:00 is typical; TikTok periods are 7/30/180 days, so daily runs are fine).
- Under Integrations on the task add Slack, Email, Webhook, Make or Zapier on Run succeeded. In change mode the dataset holds only the change events; a run where nothing changed contains a single free
no_changesrow (filter ontypeif you only want real changes). - From your own code:
POST https://api.apify.com/v2/acts/<username>~ad-library-intelligence/run-sync-get-dataset-items?token=<token>with the change-mode JSON.
State lives in the named key-value store ad-intel-state in your account, one record per trackingId; delete it to reset a watch list.
Pricing
Pay-per-event. You pay for ads and signals, never for requests, retries, detection or failed sources.
| Event | Price | When |
|---|---|---|
| Advertiser checked | $0.005 | Per Google or LinkedIn advertiser, or TikTok query, fetched successfully. |
| Ad record | $0.003 | Snapshot mode, per Google or LinkedIn ad stored. |
| Ad record (TikTok) | $0.005 | Snapshot mode, per TikTok top ad stored (browser compute). |
| Change detected | $0.01 | Change mode, per change event stored. advertiser_error, no_ads and no_changes are free. |
The example input above costs 5 × $0.005 + 20 × $0.003 + 5 × $0.005 = $0.11. Worked example, 20 competitors on Google, daily change mode, about 15 changes a day: 20 × $0.005 + 15 × $0.01 = $0.25 per run, about $7.50 per month. A weekly full snapshot of the same 20 competitors with 1,500 running ads costs about $4.60 per run.
Platform usage is billed separately by your Apify plan: compute (a typical change run takes one to three minutes) and, for LinkedIn only, Apify residential proxy traffic. LinkedIn blocks datacenter IPs, so its requests always go through residential proxies; measured on the platform that is 35–50 KB per LinkedIn ad, about $0.30–0.40 per 1,000 LinkedIn ads at Apify's $8/GB residential rate. Leave linkedin out of platforms to avoid it.
Platform notes and limitations
- Google: dates are shown as ranges (
firstShownAt,lastShownAt) and "active" means shown within the last 7 days. Google exposes creatives as image previews or preview scripts, not as headline/body text, soheadline,bodyText,ctaandlandingUrlarenullfor Google ads;mediaUrlsandregionsare complete. Text ads are rendered as images by Google. Regions cost one extra RPC per new ad; ads already in the snapshot reuse their stored regions. - LinkedIn: searched by advertiser name (the library's "company/advertiser" search), or by
linkedinCompanyIdwhen you pass one; only ads from that exact organisation are kept, so partners and employees advertising under their own names are excluded. LinkedIn's Cloudflare lets only part of the requests through, so LinkedIn requests go through Apify residential proxies, are paced to one per second and are retried on fresh IPs: a LinkedIn source takes one to three minutes. Records carry the advertiser, headline, body copy, call to action, format and media. Start/end dates, impression ranges and per-country shares live on each ad's detail page, which LinkedIn blocks far more often, so those fields are usuallynull; LinkedIn ads count as active while they are listed. - TikTok: there is no advertiser search, so the unit is a query (keyword / objective / region / period) and change mode means "new top ads for this query". Without a login TikTok serves the top 20 ads per query; use several queries for coverage. Keyword queries run through the page's search box and are often sparse on TikTok's side; other filters call the signed API directly.
firstShownAt/lastShownAtare not exposed by TikTok. - Change detection is relative to the filtered set (
activeOnly,lastNDays,googleRegion); changing them between runs produces events. mediaUrlsare the libraries' own CDN links (Googlegoogleusercontent.com/tpc.googlesyndication.com, LinkedInmedia.licdn.com, TikTok CDN) and can expire; nothing is downloaded or rehosted.- Apify datacenter proxies (the default) work for Google and TikTok; LinkedIn always uses residential. Google rate-limits bursts per IP; the Actor paces its RPCs and backs off on 429.
Related
../review-intelligence collects public Trustpilot, App Store and Google Play reviews for a company or app, with AI themes and negative-review alerts.
Watching a specific page rather than a feed? ../page-change-monitor reports exactly what changed on any URL, with a diff and an optional AI summary.
Legal note
The Actor reads public advertising transparency data that the platforms publish for exactly this purpose. It never logs in, sends no cookies, paces its requests, links to creatives instead of copying them, and stores no personal data (contact details in ad copy are masked). Brand names appear factually to identify advertisers. Use the data in line with each platform's terms and the laws that apply to you. Google, LinkedIn and TikTok are trademarks of their owners; this Actor is not affiliated with them.
Roadmap
Not available yet:
- TikTok industry filter. TikTok's Top Ads API currently returns no ads when an industry filter is applied, so
industryqueries are rejected with a clear message. Each ad still reports its industry intiktok.industry.