Google Ads Transparency Scraper — Competitor Ads & Monitor
Pricing
from $1.99 / 1,000 ad creatives
Google Ads Transparency Scraper — Competitor Ads & Monitor
Scrape Google Ads Transparency Center ads by domain, brand, or advertiser ID. Get creatives, landing URLs, days running, and region, and monitor new versus ended ads. A Google Ads Transparency API alternative for Python, Node.js, and MCP.
Pricing
from $1.99 / 1,000 ad creatives
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Google Ads Transparency Scraper — Competitor Ads, Landing URLs & Monitor
Unofficial tool for the public Google Ads Transparency Center. Google Ads and related names are trademarks of their respective owners. Not affiliated with, sponsored by, or endorsed by Google LLC. For informational, research, and competitive-intelligence use only. Respect applicable terms of use and law.
Google Ads Transparency Scraper ◄── you are here
Scrape Google Ads Transparency Center creatives into structured JSON: ad format, landing URL, days running, region, first / last shown, and image or video previews. Search by domain, brand name, or advertiser ID. Schedule monitor mode so a daily job emits only new and ended ads. A practical Google Ads Transparency API alternative — call from Python, Node.js, cURL, or Apify MCP.
Ideal for agencies, D2C brands, creative research, PPC competitive intel, and brand-protection workflows that need landing pages and longevity — not a silent empty dataset.
Crawloop digital intelligence — competitor Google ads here, then creative-trend and app-store siblings.
| Google Ads Transparency (Search / YouTube / Display) | TikTok Creative Center (hashtags) | Google Play (ASO) |
|---|---|---|
| Google Ads Transparency Scraper ◄── you are here | TikTok Trending Hashtags Scraper | Google Play Scraper |
When to use this Actor
- You need a Google Ads Transparency scraper / Google Ads Library export for one or many competitors as JSON
- You want landing URLs, days running, and region on every creative — the fields agencies actually paste into swipe files
- You schedule new vs ended monitoring instead of re-downloading a 2,000-creative dump every morning
- You want a Google Ads Transparency API alternative from Python, Node.js, or an MCP / AI assistant
- You run an ad-check pass first (
advertisersmode) to see who is actually spending on Google, then pull creatives for the shortlist
When not to use this Actor
- Official Google Ads API / MCC spend, bids, or keywords — this Actor reads the public Transparency Center, not your ad accounts
- Meta / Facebook Ad Library — different library; this Actor is Google Search, YouTube, Shopping, Maps, and Play
- Guaranteed impression or spend numbers on every commercial ad — Google discloses those mainly for political ads; commercial rows still get dates, format, and assets
- Silent “zero ads” as a real answer — if Google’s own advertiser count is non-zero and the creative RPC returns empty, this Actor emits an error row instead of pretending the brand went dark
Modes
| Mode | What it does |
|---|---|
ads | Creatives for each domain / brand / AR ID (default) |
advertisers | One summary row per advertiser (ad-check / lead-gen) |
monitor | Named KV snapshot of creative IDs; emit new and ended (optional active) |
Key features
- Keyword-exact Google Ads Transparency scraper — domain, brand query, advertiser ID, or pasted Transparency URLs
- Buyer fields —
daysRunning,region,firstShown/lastShown, format, preview/image/video, pluslandingUrl/ headline when Google encodes them (text ads). Not OCR. - Monitor new and ended — not only “only new”; ended creatives come back as tombstone rows with the last known landing URL
- Loud empty — payload drift and soft-blocks are error records, not a fake zero
- Full token pagination — continues past the first 40-ad page
- Optional detail pass — variations + per-country dates when Google discloses them
- HTTP (no browser) — Chrome-impersonated RPC, retries, and polite delays
- Typed dataset rows —
ad,advertiser,error - Export-ready — download the default dataset as JSON, CSV, Excel, or JSONL
Input
| Parameter | Description |
|---|---|
mode | ads / advertisers / monitor |
domains / queries / advertiserIds | Websites, brand names, or AR… IDs |
startUrls | Transparency Center advertiser, creative, or ?domain= URLs |
region | ISO country (US, DE) or ANYWHERE |
platforms / adFormat | Search, YouTube, Shopping, Maps, Play; text / image / video |
dateFrom / dateTo | Shown-after / shown-before (YYYY-MM-DD) |
maxAdsPerTarget / maxItems | Caps |
includeDetails | Extra RPC per ad (variations, regional dates) |
outputMode | Monitor: all / changes_only / new_only / ended_only |
monitorStoreName / monitorBaselineOnly | Named KV watermarks |
webhookUrl / Telegram fields | Alerts on new and ended |
proxyConfiguration | Residential recommended for scheduled bulk runs |
Example — competitor creatives
{"mode": "ads","domains": ["nike.com"],"region": "US","maxAdsPerTarget": 100,"includeDetails": false}
Example — daily new / ended monitor
{"mode": "monitor","advertiserIds": ["AR04119126533128323073"],"region": "US","outputMode": "changes_only","monitorStoreName": "nike-us-ads-monitor","maxAdsPerTarget": 500}
Output
| Field | Description |
|---|---|
type | ad, advertiser, or error |
changeType | new / active / ended (monitor) |
creativeId / advertiserId / advertiserName | Stable Google IDs and display name |
format | text, image, video |
headline / description | Search-ad copy when the preview payload decodes |
landingUrl | Destination URL when the creative encodes one (typical for Search/text ads) |
imageUrl / videoUrl / previewUrl | Creative assets |
firstShown / lastShown / daysRunning | Longevity |
region | Requested country or ANYWHERE |
adUrl | Deep link back to the Transparency Center creative |
regionsShown / variations | Only when includeDetails is on |
Ad output example
{"type": "ad","changeType": "new","creativeId": "CR12965115384414863361","advertiserId": "AR04119126533128323073","advertiserName": "Nike, Inc.","domain": "nike.com","format": "image","landingUrl": "https://www.nike.com/launch","imageUrl": "https://tpc.googlesyndication.com/archive/simgad/33210746.png","firstShown": "2024-01-01","lastShown": "2024-08-01","daysRunning": 214,"region": "US","adUrl": "https://adstransparency.google.com/advertiser/AR04119126533128323073/creative/CR12965115384414863361?region=us"}
You can download the dataset as JSON, CSV, Excel, or JSONL from the run.
How to scrape Google Ads Transparency Center
- Open this Actor and keep mode on
ads(ormonitorfor a scheduled diff). - Paste competitor domains, brand names, or AR… advertiser IDs.
- Set region (for example
US) and an optional max ads per target. - For a daily watch, set
modetomonitor, give the run a monitor store name, and schedule it. - Run. Export the default dataset or pull it from the Apify API / MCP.
Use cases
- Agency swipe files — pull live Search / YouTube / Display creatives plus landing URLs
- D2C competitor watch — schedule monitor mode; wake up to new launches and killed tests
- Brand protection — see who is bidding around a domain and how long each creative has been up
- Lead-gen ad-check —
advertisersmode: which companies in a list actually run Google Ads - Creative research — filter image vs video vs text, sort by
daysRunningas a proxy for what survived
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/google-ads-transparency-scraper').call({mode: 'ads',domains: ['nike.com'],region: 'US',maxAdsPerTarget: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("crawloop/google-ads-transparency-scraper").call(run_input={"mode": "ads","domains": ["nike.com"],"region": "US","maxAdsPerTarget": 50,})for item in client.dataset(run.default_dataset_id).iterate_items():print(item.get("creativeId"), item.get("landingUrl"), item.get("daysRunning"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~google-ads-transparency-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d "{\"mode\":\"ads\",\"domains\":[\"nike.com\"],\"region\":\"US\",\"maxAdsPerTarget\":50}"
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID / name.
Example prompts:
- "Run Google Ads Transparency Scraper for nike.com in US and return the top 20 ads with landing URL, days running, and format as JSON"
- "Monitor Google Ads Transparency for advertiser AR04119126533128323073 and list only new and ended creatives"
- "Chain Google Ads Transparency Scraper then TikTok Trending Hashtags Scraper for the same brand's paid-search vs short-form creative trends"
Suite next step
After Google ads, run TikTok Trending Hashtags Scraper for Creative Center trends, or Google Play Scraper for the same brand's app-store presence.
FAQ
Is this a Google Ads Transparency API alternative? Yes for the public Transparency Center — creatives, dates, region, and assets — without a Google Ads API token. It is not a replacement for the official Ads API (spend, keywords, conversions).
How do I scrape Google Ads Transparency with Python or Node.js?
Call crawloop/google-ads-transparency-scraper with the Apify client (examples above) or from an MCP assistant. Results land in the default dataset.
Ads mode vs monitor mode?
ads dumps the current creative set. monitor diffs creative IDs against the previous run in a named Key-Value Store and can emit new and ended only (outputMode: changes_only). Seed the first run with monitorBaselineOnly if you do not want a full dump on day one.
Why do some scrapers return empty?
The Transparency Center RPC fails closed: a missing required field or a payload reshuffle returns {}, which looks like “this advertiser has zero ads.” This Actor paginates with the required request fields, retries 429/5xx, and emits an error row when Google’s own advertiser count is non-zero but creatives do not come back.
Do I need a Google login? No. The Transparency Center is public.
Does region always filter the result set?
The Actor sends the Transparency Center region enum (ISO numeric + 2000). Some commercial creatives still appear globally; region is always stored on the row so you can run parallel country jobs and label exports.
Do asset URLs expire?
Preview / simgad links can rot. Pull the dataset when the run finishes, or turn on includeDetails when you need every variation immediately.
Why is landingUrl empty on some image ads?
Google often omits the click-through URL on image/HTML5 creatives in the public RPC. Search/text ads usually decode a destination. This Actor does not OCR landing pages off screenshots.
Can I pass Transparency Center URLs?
Yes — advertiser pages, creative pages, and ?domain= searches are parsed automatically.