Google Ads Transparency Scraper
Pricing
$1.50 / 1,000 ad scrapeds
Google Ads Transparency Scraper
Scrape every ad a brand runs on Google - just type a brand name or domain, no advertiser ID needed. Creatives, video and image previews, formats, dates and per-country breakdown. Free advertiser lookup. Pay only per ad returned.
Pricing
$1.50 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
Jamel HAMLAOUI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Scrape every ad a brand runs on Google, straight from the Google Ads Transparency Center.
Just type a brand name or a domain. No advertiser IDs to hunt down, no login.
Get ad creatives, image and video previews, formats, how long each ad has been running, and which of your target countries served it — as JSON, CSV or Excel.
Why this one
- Search by brand or domain — type
Nikeornike.comand go - Free advertiser lookup — find every advertiser behind a brand without being charged a cent
- Per-country breakdown — ask for several countries and each ad tells you which ones served it, at no extra cost
- Landing pages — see where each ad actually sends people, free
- No start fee — you pay per ad returned, and nothing at all for a run that returns nothing
- Fast — about 150 ads per second
- 249 countries supported with ordinary ISO codes (
FR,US,GB…)
Quick start
{"queries": ["nike.com"],"maxAdsPerTarget": 100}
That's it. To narrow it down:
{"queries": ["Nike", "adidas.com"],"adFormat": "VIDEO","regions": ["FR", "DE"],"shownAfter": "2026-01-01","maxAdsPerTarget": 500}
Input
| Field | What it does |
|---|---|
queries | Brand names or domains — Nike, nike.com |
advertiserIds | Optional exact advertiser IDs (AR…) or full URLs |
searchMode | ads (default) or advertisers for a free lookup |
adFormat | ALL, IMAGE, TEXT or VIDEO |
regions | Country codes, e.g. ["FR","US"]. Empty = worldwide. List several and each ad reports which ones served it |
shownAfter / shownBefore | Date window, YYYY-MM-DD |
platforms | YOUTUBE, PLAY, or a raw numeric platform code |
includeCreativeDetails | Adds landing page, display domain, size and on-creative text. Slower, not charged extra |
maxAdsPerTarget | 0 for everything. Big brands have 20,000+ ads |
Free advertiser lookup
Not sure which advertiser you want? Ask first — it costs nothing:
{ "queries": ["decathlon"], "searchMode": "advertisers" }
{ "kind": "advertiser", "advertiserName": "DECATHLON FRANCE","advertiserId": "AR12956355609636110337", "country": "FR","verified": true, "approxAdsMin": 6, "approxAdsMax": 6 }
Output
| Field | Description |
|---|---|
advertiserId | Google advertiser ID |
advertiserName | Verified legal name of the advertiser |
adId | Creative ID |
format / formatCode | IMAGE, TEXT or VIDEO |
firstShown / lastShown | Unix timestamps |
daysShown | How long the ad has been running |
previewUrl | Direct link to the creative image or preview |
adUrl | Link to the ad on Ads Transparency Center |
matchedBy | Which query or advertiser produced this row |
regions * | Which of your selected countries served this ad |
destinationUrl ** | Where the ad sends people |
adServerUrl ** | Feed vendor that built the creative (Criteo, Yteo…) |
displayDomain ** | Domain shown on the creative |
creativeSize / width / height ** | Creative dimensions |
creativeText ** | Text found on the creative |
* only when you ask for specific countries
** only with includeCreativeDetails
How often do the starred fields fill? It depends on the kind of ad the brand runs, so here are two real measurements, 120 ads each:
| Brand | Size | Display domain | Creative text | Any URL |
|---|---|---|---|---|
| decathlon.fr (feed/shopping ads) | 83% | 81% | 37% | 36% |
| nike.com (mostly plain images) | 20% | 12% | 20% | 3% |
Plain image ads carry no data bundle at all, so they return nothing extra. That is a property of the advertiser, not a fault in the scraper. We publish these numbers rather than implying every ad is fully enriched.
Landing pages are split honestly: destinationUrl is the advertiser's own link
when it is present in the creative, and adServerUrl is the feed vendor that
assembled the ad. Many shopping ads only contain the vendor's URL, and calling
that the landing page would be wrong.
{"advertiserId": "AR01614014350098432001","advertiserName": "lululemon athletica canada inc.","adId": "CR12967419969376616449","format": "IMAGE","firstShown": 1772749674,"lastShown": 1789916412,"daysShown": 200,"regions": ["FR", "US"],"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/5316596228252826860","adUrl": "https://adstransparency.google.com/advertiser/AR01614014350098432001/creative/CR12967419969376616449","matchedBy": "lululemon.com"}
What you can do with it
- Spy on competitor ads — every creative a rival is running right now
- Find their winners —
daysShownshows which creatives survive for years - Track launches — new
firstShowndates reveal fresh campaigns - Compare by country — see which markets get which creatives
- Creative research — pull thousands of real ad images
- Agency reporting — show clients what their competitors advertise
Pricing
Pay per ad returned. Runs that return nothing cost nothing, duplicates are removed before billing, advertiser lookups are free, and the per-country breakdown carries no surcharge.
Proxy
Google rate-limits a single IP after roughly 60-80 requests (~2,500 ads) and then serves a block page. Backing off does not clear it - only a different IP does - so this Actor rotates to a fresh IP mid-run when it gets blocked, and keeps everything it had already collected instead of failing the whole job. Apify Proxy is on by default. Turn it off only for small test runs.
FAQ
Is this legal? It collects only what Google publishes publicly to anyone, with no login. Ads are commercial content advertisers chose to run. No personal data.
Do I need an advertiser ID? No. Type the brand name or domain. IDs still work if you have them.
Why don't you return ad headline and body text? Google does not expose ad copy through the public data source — it only ships a rendered creative. Rather than return empty columns, we give you the creative preview so you can see the real ad. An honest limitation, not an oversight.
Why is creativeText not called "headline"?
Because Google does not label it. The text is recovered from the creative's
own render bundle, and its order there is not the order a viewer sees. Calling
it a headline would be a guess, so we hand you the text and let you judge.
How does the per-country breakdown work? Google's per-ad country endpoint requires a signed-in Google session, which a scraper cannot have. So when you list several countries we search each one and report which of them actually served each ad. Real data, public endpoint only.
Which platform codes work?
YOUTUBE and PLAY are verified against Google's own interface. The remaining
codes get clamped rather than filtered, so Search / Shopping / Maps cannot be
told apart reliably - we let you pass raw numbers rather than ship labels we
have not proven.
What if the output breaks? Google can change this source without warning. An automated contract test catches shape changes. Report an issue and it will be fixed.