Published 2026-10-28 by Atlas Data
TikTok and Google both publish the ads advertisers run in public ad libraries: the TikTok Ad Library (ads shown in the EU/EEA, UK, Switzerland and Turkey) and the Google Ads Transparency Center (text, image and video ads, worldwide). You can browse both by hand, but if you want a list of every ad a competitor runs, refreshed every week, it is quicker to pull them as data.
This guide uses two Apify Actors:
- TikTok Ads Library Scraper & TikTok Ads API: from $0.40 per 1,000 ads (cards), $1.50 per 1,000 with full details
- Google Ads Transparency Scraper & Ad Library API: $1.50 per 1,000 ads
Neither needs a TikTok or Google account, cookies or your own proxy.
Step 1: Google ads by domain
Open the Google Ads Transparency Scraper, click Try for free, and enter your competitor's domain, advertiser name, advertiser ID (AR…) or a Transparency Center URL:
{
"searchTerms": ["competitor.com"],
"region": "US",
"dateFrom": "2026-10-01",
"maxAdsPerSearch": 100
}
Each ad comes back with the advertiser, ad ID and link, format (TEXT, IMAGE, VIDEO), first and last shown dates, the countries it ran in, the creative image, the YouTube link for video ads, and impression ranges for EU countries. Google publishes impressions only for the EU/EEA, so US ads have no impression numbers.
Tips:
dateFromkeeps only ads shown since that date. Results come newest first, so it also makes runs faster.- If a name search picks the wrong company, paste the advertiser ID or URL from the Transparency Center instead.
Step 2: TikTok ads by brand or keyword
Open the TikTok Ads Library Scraper and enter the brand name or a keyword. Pick the countries you care about. The TikTok Ad Library covers only European markets.
Fast "cards" mode (ad text, video, advertiser, first/last shown, unique reach):
{
"searchTerms": ["competitor brand"],
"countries": ["DE", "FR", "GB"],
"dateRange": "last-30-days",
"maxAdsPerSearch": 200
}
Full details mode adds the landing page, CTA, objective, "paid by", TikTok account, impressions by country, age and gender, and targeting:
{
"searchTerms": ["\"competitor brand\""],
"countries": ["GB"],
"adStatus": "active",
"sortBy": "reach-desc",
"maxAdsPerSearch": 50,
"includeDetails": true
}
Put a term in double quotes for an exact phrase. Details are slower, at about 25-35 ads per minute, because TikTok serves one detail record per page load. Use cards for volume and details for the ads you want to study.
Step 3: Make it a weekly tracker
- In Apify Console, save each input as a task (for example "Competitor X - Google ads" and "Competitor X - TikTok ads").
- Add a Schedule to the tasks, for example every Monday at 08:00.
- Every run writes a new dataset. Compare
firstShownwith the last run's date to find new ads, or connect an integration (Google Sheets, Slack, webhook, Make, Zapier, n8n) to send the results where your team works.
What to look for:
- Long-running ads: a large gap between
firstShownandlastShownusually means the creative is working. - New markets: new values in
regionCodes(Google) ortargetCountries(TikTok details). - Landing pages:
landingPageUrl(TikTok details) andtargetDomain(Google) show which offers they are pushing.
Step 4 (optional): Pull the data through the API
Both Actors can be called over HTTP. This call runs the Actor and returns the ads as JSON:
curl -X POST "https://api.apify.com/v2/acts/atlasdata~google-ads-transparency-scraper-reliable/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["competitor.com"], "maxAdsPerSearch": 20}'
Swap in atlasdata~tiktok-ad-library-scraper-reliable and the TikTok input to do the same for TikTok. AI agents can call both through the hosted Apify MCP server: https://mcp.apify.com/?tools=atlasdata/google-ads-transparency-scraper-reliable,atlasdata/tiktok-ad-library-scraper-reliable. Client configs for Claude, Cursor and VS Code are in the atlas-data-mcp repository.
What it costs
Prices come from the Actors' current pay-per-event pricing:
| Per run start | Per ad | |
|---|---|---|
| Google Ads Transparency | $0.003 | $0.0015 ($1.50 / 1,000) |
| TikTok, cards | $0.001 per GB of memory ($0.002 at the default 2 GB) | $0.0004 ($0.40 / 1,000) |
| TikTok, with details | same | $0.0004 + $0.0011 ($1.50 / 1,000) |
A weekly check of one competitor (100 Google ads and 200 TikTok cards) costs about $0.24 per week.
Cover the other ad platforms too
- Facebook Ads Library Scraper & Meta Ads API: Facebook and Instagram ads, $0.50 per 1,000 ads
- LinkedIn Ads Library Scraper & API: B2B ads with EU impressions and targeting, $1.50 per 1,000 ads with details
Further reading
- Track a competitor's ads on Google, LinkedIn and TikTok with Python (dev.to): the same data pulled into one Python script.
- How to pull Indeed job data via API: hiring signals for the same competitors.