Google Ads Transparency Scraper
Pricing
from $1.99 / 1,000 ads
Google Ads Transparency Scraper
Google Ads Transparency Center scraper, no API key. See every ad a brand or domain runs on Google: text, image and video creatives, first and last shown dates, variations, impressions and regions. Only-new mode to track competitors. $1.99 per 1,000 ads.
Pricing
from $1.99 / 1,000 ads
Rating
0.0
(0)
Developer
Quiet Harvest
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
See every ad a brand or domain runs on Google — text, image and video — straight from Google's Ads Transparency Center. No API key, no login. Search by brand name, domain, advertiser ID or Transparency Center URL, filter by country, format and date, and get first and last shown dates, every creative variation, impressions and a per-country breakdown.
$1.99 per 1,000 ads. Details add $1.00 per 1,000.
Why this one
It keeps going when Google pushes back. Google shows a captcha to an IP after a few dozen requests. Each page and each retry here goes out on a fresh residential IP, so a large domain does not stop halfway.
It shows where an ad ran, not just that it ran. With details on, each ad gets a regions list: every country it ran in, with an impressions range and the first and last day it was shown there — sorted by reach.
It can watch competitors for you. Turn on Only new ads and put the Actor on a Schedule: each run returns only creatives that were not in the previous runs.
Quick start
{"queries": ["nike.com"],"region": "US","adFormat": "ALL","maxAdsPerSearch": 200}
Other ways in:
{ "queries": ["Nike"], "maxAdvertisersPerQuery": 3 }{ "advertiserIds": ["AR18378488041124659201"] }{ "startUrls": ["https://adstransparency.google.com/?region=US&domain=nike.com"] }
A brand name is matched to advertiser accounts (a big brand often has several — per country or per agency); the best matches come first. Anything that looks like a domain is searched as a domain.
Output
| Field | Notes |
|---|---|
advertiser_id | Starts with AR |
advertiser_name | |
creative_id | Starts with CR |
format | TEXT, IMAGE or VIDEO |
first_shown / last_shown | ISO 8601, UTC |
domain | The domain the ad points to |
image_url | Snapshot of the ad (Google also stores text ads as images) |
preview_url | Google's own preview renderer for the ad |
ad_url | The ad's page in the Transparency Center |
With Include details on:
| Field | Notes |
|---|---|
variation_count, variations | Every version of the creative (A/B variants) |
impressions_min, impressions_max | Google's impressions range for the ad (published for ads shown in the EU) |
region_count, regions | Per country: region, impressions_min, impressions_max, first_shown, last_shown — largest first |
Sample row
{"advertiser_id": "AR18378488041124659201","advertiser_name": "Nike Retail BV","creative_id": "CR04918732594763268097","format": "TEXT","first_shown": "2025-10-24T10:57:39Z","last_shown": "2026-09-24T06:29:44Z","domain": "nike.com","image_url": "https://tpc.googlesyndication.com/archive/simgad/4025281590245195688","ad_url": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR04918732594763268097?region=anywhere","impressions_min": 300000,"impressions_max": 350000,"region_count": 17,"regions": [{ "region": "PL", "impressions_min": 300000, "impressions_max": 350000, "first_shown": "2025-10-24", "last_shown": "2026-09-23" }]}
Use it from code
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("reportable_broth/google-ads-transparency-scraper").call(run_input={"queries": ["competitor.com"],"region": "US","onlyNewAds": True,})for ad in client.dataset(run.default_dataset_id).iterate_items():print(ad["format"], ad["last_shown"], ad["ad_url"])
Works the same from JavaScript, n8n, Make, Zapier, or an AI agent through Apify's MCP server. Export as JSON, CSV or Excel from the dataset tab.
FAQ
Do I need a Google Ads account or API key? No. The Transparency Center is public.
Why does a brand name return several advertisers? Large brands run ads through several accounts — per country, per agency. Raise Max advertiser accounts per brand name to cover more of them, or search the domain instead to get all of them at once.
How does the date filter work? An ad is kept if it was running at any point in the range: last shown on or after the start date, and first shown on or before the end date.
Are impressions exact? No — Google publishes ranges, and so do we.
Why are impressions empty for some ads? Google only publishes impressions for ads shown in the European Union (a Digital Services Act requirement). An ad that ran only in the US has regions and dates but no impressions — that is Google's data, not a failed request. In a 120-ad sample for nike.com in the US, 10 had impressions.
Our other Actors
- YouTube Transcript Scraper — transcripts by URL, playlist, channel or keyword; SRT/VTT; 55-language translation.
- YouTube Monitor — new videos only, by keyword or channel.
- Threads Scraper — Threads posts by keyword, #hashtag or profile. No login.
Disclaimer
This Actor collects publicly available information from Google's Ads Transparency Center. You are responsible for how you use it, including compliance with Google's terms and applicable law.