Google Ads Transparency Scraper (cached)
Pricing
Pay per event
Google Ads Transparency Scraper (cached)
Every ad an advertiser is running, from Google's Ads Transparency Center — creative id, format, preview URL, first/last shown date. Search by advertiser name or AR… id. No API key, no browser.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Leo Nguyen
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Every ad an advertiser is running, straight from Google's Ads Transparency Center — creative id,
format, preview URL, and the first/last date each ad was shown. Search advertisers by name, or go
straight to an AR… id. No API key, no browser.
What you get
Advertiser rows (from keywords):
| Field | Example |
|---|---|
advertiserName | NIKE SRL |
advertiserId | AR17365672681860497409 |
advertiserCountry | IT |
declaredAdCount | 17 — Google's own count |
advertiserUrl | link to the Transparency Center page |
Ad rows (one per creative):
| Field | Example |
|---|---|
creativeId | CR18300947740944760833 |
format | image or rendered_preview |
previewUrl | direct image URL, or Google's rendered-preview URL |
imageHtml | the <img> snippet Google returns, for image ads |
firstShownAt, lastShownAt | ISO 8601 |
creativeUrl | link to the ad in the Transparency Center |
fromCache | whether this came from cache or a live fetch |
How it behaves
Measured against the live endpoints on 2026-08-06:
- Zero ads is a real answer, not a failure. Google keeps advertisers whose ads have stopped
running and still reports a count for them — 3 of 20 advertisers tested returned no creatives for
that reason. Those come back as an explicit row with
adCount: 0anddeclaredAdCountbeside it, so you can see the difference. A scraper that returned silence here would look broken. - An advertiser that fails does not fail the run. It comes back as a row with
error, so a 20-advertiser job returns the other 19. - Pagination stops when the advertiser runs out, not when a page counter says so. Asking for 100 ads from an advertiser with 9 returns 9 and spends nothing extra.
- Google rate-limits this endpoint per IP — about 25 requests from a single address was enough to earn a 429 in testing. So this Actor paces itself, caches every result, and rotates to a fresh proxy IP instead of sleeping through a limit. Two runs asking for the same advertiser within the cache window cost one request to Google, not two.
Limits — read before buying
regionis Google's internal enum, not a country code, and a wrong value returns zero ads with no error. Leave it empty (the default) to get ads from all regions. This Actor will not guess a value for you, because guessing would silently look like "this advertiser has no ads".formatis reported from the ad content actually present.formatCodepasses Google's raw code through untouched — the full enum is not published, and inventing labels for unseen values would be a guess dressed up as data.- The Transparency Center covers ads Google chooses to disclose. It is not a complete record of an advertiser's spend, and it carries no impression or budget figures.
- Ads Transparency has no official public API and Google's Terms of Service restrict automated access. You are responsible for how you use the output.
- No personal data is collected — advertiser and creative records only.
Input
{"keywords": ["nike"],"advertisersPerKeyword": 5,"maxAdsPerAdvertiser": 100}
Already know the advertiser? Skip the lookup:
{"advertisers": ["https://adstransparency.google.com/advertiser/AR13536189912721653761"],"maxAdsPerAdvertiser": 40}
Only need the ids, not the ads (much cheaper):
{ "keywords": ["nike", "adidas"], "fetchAds": false }
Development
pip install -r requirements.txtmkdir -p storage/key_value_stores/defaultecho '{"keywords":["nike"],"useApifyProxy":false}' > storage/key_value_stores/default/INPUT.jsonpython -m src
src/ads.py is plain standard library and can be exercised without the Apify SDK — useful when
checking whether Google changed the request shape:
$python -c "from src.ads import AdsClient; c=AdsClient(); print(c.search_advertisers('nike')[:3])"