Google Ads Transparency Scraper - Competitor Ads
Pricing
from $1.28 / 1,000 ad delivereds
Google Ads Transparency Scraper - Competitor Ads
Scrape Google Ads Transparency Center by domain, advertiser, brand or keyword: every ad on Google Search, YouTube, Shopping, Maps and Play with format, first and last shown, days running, countries, image and preview. Filter by country, platform, format and date. No login.
Pricing
from $1.28 / 1,000 ad delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 hours ago
Last modified
Categories
Share
Scrape every ad creative an advertiser or a domain is running on Google Search, YouTube, Shopping, Maps and Play, from the public Google Ads Transparency Center: format, first and last date shown, how many days it has been running, every country it ran in, the archived image, the ad preview and the direct Transparency Center link.
For competitive intelligence teams tracking a rival's paid campaigns, agencies auditing creative strategy in a market, and lead generation lists that need to know which companies are spending on Google Ads now. AI agents can call it through the Apify MCP server.
At a glance
| Apify plan | Per 1,000 ads |
|---|---|
| Free | US$ 1.50 |
| Bronze | US$ 1.425 |
| Silver | US$ 1.35 |
| Gold and above | US$ 1.275 |
One charge per ad creative saved to the dataset, with or without country details and creative variations. Resolving a brand name into advertiser accounts is included. No monthly fee, no start fee; proxy and compute included. A creative is delivered once per run, so duplicates are not charged. One domain at the default settings (30 ads) costs US$ 0.045.
What it fixes
- Four kinds of input, detected for you. A domain, an advertiser id, a Transparency Center URL or a brand name, which is resolved to its top matching advertiser accounts.
- Filters run at Google, not afterwards. Country, platform, format and dates are sent inside the request, so a narrow filter is a cheaper run.
- Country by country detail. With
includeDetails, every country an ad ran in and the last date it was seen there, plus the number of variations, at the same price. - Captcha redirects handled. Blocked requests are retried on their own at no extra price, so you get ads, not captcha pages.
- New ads only, for alerts.
onlyNewskips creatives already delivered and the evergreen ads that started before your first run.
Input examples
The input form describes each field. Minimal input (30 ads of one domain, worldwide):
{ "searchQuery": "nike.com", "maxItems": 30 }
Video creatives of three competitors in the US:
{"queries": ["nike.com", "adidas.com", "newbalance.com"],"region": "US","format": "video","maxItems": 300}
A daily alert for a competitor's newly launched ads (save as a Task with a daily Schedule):
{ "searchQuery": "nike.com", "region": "US", "maxItems": 100, "onlyNew": true }
The first run delivers up to maxItems and starts the watch. Later runs deliver, and charge, only creatives never delivered before that started running after the first run. A day with nothing new ends green with nothing charged. The memory is the Key-Value Store google-ads-transparency-only-new in your account, one record per target and filter set.
You type in searchQuery | What the Actor does |
|---|---|
a domain, nike.com | every advertiser account whose ads point to that domain |
an advertiser id, AR16735076323512287233 | that account only |
| a Transparency Center URL | reads the advertiser id or domain from the URL |
a brand name, Nike | resolves it to its top matching accounts (maxAdvertisersPerQuery, default 3) |
Switching from another Google Ads Transparency actor? Your existing input works
| Your field | Read as |
|---|---|
domains, advertiserIds, startUrls (strings or {"url": ...}) | queries |
advertiser, domain | searchQuery |
maxResults | maxItems |
adFormat | format |
startDate, endDate | dateFrom, dateTo |
platforms (list) | platform (the first one) |
onlyNewAds | onlyNew |
The output keeps the usual names (creativeId, advertiserId, advertiserName, adFormat, firstShown, lastShown, approxDaysShown, imageUrl, previewUrl, adUrl), so most field mappings keep working.
Output example
A real row from a run on 2026-09-11 (nike.com, 300 ads, includeDetails: true, 58 seconds):
{"creativeId": "CR00221530049440907265","advertiserId": "AR03005330488370921473","advertiserName": "NIKE GLOBAL TRADING B.V. SINGAPORE BRANCH","domain": "nike.com","adFormat": "IMAGE","firstShown": "2023-11-11","lastShown": "2026-09-11","approxDaysShown": 1007,"regions": ["DE", "TH", "JP", "FR"],"regionsDetail": [{ "region": "DE", "lastShown": "2026-09-04" },{ "region": "TH", "lastShown": "2026-09-11" },{ "region": "JP", "lastShown": "2026-09-10" },{ "region": "FR", "lastShown": "2026-09-11" }],"variations": 3,"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/16608621179754630885","previewUrl": null,"adUrl": "https://adstransparency.google.com/advertiser/AR03005330488370921473/creative/CR00221530049440907265","platform": null,"searchTarget": "nike.com","coletado_em": "2026-09-11T18:47:47.174474+00:00","url_origem": "https://adstransparency.google.com/?region=anywhere&domain=nike.com"}
Output fields
Fill rates from a real run of 1,000 ads for nike.com (2026-09-11, 13 advertiser accounts: 920 text, 58 image and 22 video ads).
| Field | What it holds | Filled |
|---|---|---|
creativeId, advertiserId, advertiserName | the creative and its advertiser account | 100% |
domain | destination domain | when you search by domain |
adFormat | TEXT, IMAGE or VIDEO | 100% |
firstShown, lastShown | first and last day Google saw the ad | 100% |
approxDaysShown | Google's own count of days running | 100% |
regions | countries, as ISO codes | with includeDetails; otherwise the requested country |
regionsDetail | {region, lastShown} per country | with includeDetails |
variations | number of creative variations | with includeDetails |
imageUrl | archived image file | 72% |
previewUrl | the script Google uses to render HTML5 and video ads | 28% (69% with details) |
adUrl | the ad's page in the Transparency Center | 100% |
platform | the platform filter used, else null | when filtered |
searchTarget, url_origem, coletado_em | what you sent, the source page, collection time | 100% |
The Console shows two views: Ads overview and Ad details.
Speed
Cloud runs on 2026-09-11: 30 ads in 6 s, 1,000 ads in 35 s, 300 ads with country details in 58 s, a brand name with video only and details (20 ads) in 22 s.
Use it from code and AI agents
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("scrapewise/google-ads-transparency").call(run_input={"searchQuery": "nike.com", "region": "US", "dateRange": "last_30_days"})for ad in client.dataset(run["defaultDatasetId"]).iterate_items():print(ad["adFormat"], ad["firstShown"], ad["approxDaysShown"], ad["adUrl"])
The same works from Node.js, the HTTP API (run-sync-get-dataset-items), n8n, Make and Zapier. For AI agents: https://mcp.apify.com/?tools=scrapewise/google-ads-transparency.
Requests an agent can pass straight through:
- "Show the video ads openai.com is running in the US" ->
{"searchQuery": "openai.com", "region": "US", "format": "video", "maxItems": 50} - "Which YouTube ads did Temu run in the UK in the last 30 days?" ->
{"searchQuery": "Temu", "region": "GB", "platform": "youtube", "dateRange": "last_30_days", "maxItems": 100} - "Tell me every day which new Search ads shein.com launched in Germany" ->
{"searchQuery": "shein.com", "region": "DE", "platform": "google_search", "onlyNew": true, "maxItems": 100}
FAQ
Does it show how much a competitor spends? No. Google publishes spend and impressions only for political ads. You get the creative, format, countries and dates.
Domain or advertiser? A domain returns every account pointing to it (13 for nike.com: global, regional and agency accounts). An advertiser id returns one account.
How far back does it go? As far as the Transparency Center keeps the creative; ads running since 2021 came back in tests.
Why is regions empty? includeDetails is off, so only the country you filtered by is known.
Why is a country a number like "2175"? A few Google region codes are grouped or sub-national regions with no ISO equivalent and are returned raw.
Can I download the creatives? imageUrl is a direct image file. Video ads expose no MP4, only previewUrl.
Is it legal? It reads a public Google page without login and collects business information about advertisers, not personal data. You are responsible for how you use it.
Limitations
- No spend, impressions or clicks for commercial ads.
domainis filled only when you search by domain.- The platform filter applies only to ads shown from 2023-09-04 onwards, by Google's rule.
- No landing page URL: the click goes through Google's redirect, which is not followed.
includeDetailsadds one request per ad, so runs with details are several times slower.
Errors
- Every retry refused for a call: the run fails with a clear message instead of saving a half-empty dataset.
- Google changes the Transparency Center: the run fails naming the part that changed.
- Something missing or broken? Open an issue on the Issues tab with the input you used.
Changelog
- 2026-10-23: clearer Store description.
- 2026-10-19: examples for AI agents (Apify MCP server).
- 2026-10-04:
onlyNewfor scheduled runs;approxDaysShownis always a whole number. - 2026-09-14: discounts by plan.
- 2026-09-11: faster details; a 300-ad run with details went from over 10 minutes to 58 seconds.
Independent tool, not affiliated with Google.