Google Ads Transparency Scraper — Competitor Ads & Creatives
Pricing
from $4.00 / 1,000 results
Google Ads Transparency Scraper — Competitor Ads & Creatives
Scrape the Google Ads Transparency Center: every ad an advertiser, domain, or keyword is running across Search, Shopping, Display & YouTube. Filter by region, date & format. Streams results live (no waiting for the end). Clean JSON/CSV, company-level only.
See every ad your competitors are running on Google. Pull any advertiser's live ads from the Google Ads Transparency Center into clean, structured JSON/CSV — searchable by advertiser, domain, or keyword, filterable by region, date, and ad format. Built for competitor ad research, google ads spy, ad library scraping, ad transparency monitoring, and competitor ad intelligence across Google Search, Shopping, Display & YouTube.
Streams results live — ads land in your dataset as they're found, page by page; you never wait until the end of a run, and an interrupted run keeps everything collected so far. Reliable completion with automatic retries and residential-IP rotation, so long advertiser runs (hundreds of pages) finish cleanly.
Quickstart — your first run in 60 seconds
- Sign up for Apify — the free plan is enough to try this actor.
- Open the actor, leave every field on its default, and click Start.
- The default run pulls 20 ads for
nike.com— it finishes in well under a minute and costs about $0.08, so you can see the exact output shape before committing to a big pull. - Happy with it? Swap in your own domain and raise
maxResults(or set it to0for everything).
No login, no cookies, no Google account, no proxies to configure — the actor handles all of it.
Who it's for
- Marketers / agencies — spy on competitor ad creatives and messaging before a launch.
- Growth / performance teams — monitor a rival's active ads and creative-refresh cadence over time.
- Analysts / researchers — build a structured ad-intelligence dataset for BI or an LLM pipeline.
What you get per ad
| Field | Description |
|---|---|
advertiserName | The advertiser (company / organisation) |
advertiserDomain | The advertiser's verified domain, e.g. shopify.com (domain-mode searches; null otherwise) |
advertiserId | Stable Google advertiser ID (AR...) |
creativeId | Unique creative ID (CR...) |
adFormat | text, image, or video |
variantCount | Relative breadth signal — how many served variants/placements Google reports for this creative. Use it to rank which creatives an advertiser is running hardest. (A breadth proxy, not impressions or spend — the public Center exposes neither.) |
firstShown / lastShown | When the ad's active window starts / ends (ISO 8601 UTC) |
firstShownTs / lastShownTs | The same timestamps as unix seconds — a stable numeric key for sorting / de-duping across runs |
previewUrl | Direct URL to the rendered creative (interactive / JS formats) |
imageUrl | Direct image URL for image creatives (extracted from the ad markup); null for text / video |
adLibraryUrl | Deep link back to the ad on Google's Transparency Center |
region | Region the results were scoped to |
advertiserCountry | Advertiser's country (ISO-2), when resolved via keyword mode; null otherwise |
advertiserAdCount | Google's total ad count for that advertiser, when resolved via keyword mode; null otherwise |
matchedQuery / searchMode | The query and mode that produced the row |
All data is company / advertiser-level only — no personal data (PDPA / GDPR-friendly by design).
Each run also writes a RUN_SUMMARY to the key-value store — adsReturned, resultCapReached
(true = more ads exist; raise maxResults), complete (a clean, exhaustive run), plus the filters
used — so you always know whether a result set is complete or capped, never a silent partial.
Three ways to search (set searchMode)
domain(default) — free-text / brand-domain search. Best for a brand or site, e.g.["nike.com", "shopify.com"].keyword— give a keyword; the actor resolves the matching advertisers (and domains) and pulls their ads, e.g.["running shoes"]. Tune breadth withmaxAdvertisersPerKeyword.advertiser— give exact advertiser IDs (AR...) to get every ad for that advertiser, e.g.["AR16735076323512287233"].
Filters
region— country name or code (US,United Kingdom,DE, …) oranywherefor global. Unknown values safely fall back to global (never a wrong-country result).dateFrom/dateTo—YYYY-MM-DD; keeps ads whose active window overlaps your range.adFormats— any oftext,image,video.maxResults— cap total creatives (0 = unlimited).
Example 1 — a competitor's image & video ads in the US
Input:
{"searchMode": "domain","queries": ["nike.com"],"region": "US","dateFrom": "2025-01-01","adFormats": ["image", "video"],"maxResults": 1000}
Output (one record):
{"advertiserName": "Nike, Inc.","advertiserDomain": "nike.com","advertiserId": "AR16735076323512287233","creativeId": "CR03002423070389436417","adFormat": "image","variantCount": 466,"firstShown": "2021-10-26T07:00:00.000Z","lastShown": "2026-05-24T23:54:27.000Z","firstShownTs": 1635231600,"lastShownTs": 1779663267,"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...","imageUrl": "https://s0.2mdn.net/9309096/…_300x250_EN.jpg","adLibraryUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR03002423070389436417","region": "US","advertiserCountry": null,"advertiserAdCount": null,"matchedQuery": "nike.com","searchMode": "domain"}
Example 2 — every advertiser bidding on a keyword
Input:
{"searchMode": "keyword","queries": ["running shoes"],"maxAdvertisersPerKeyword": 5,"region": "anywhere","maxResults": 500}
Returns the top advertisers Google associates with "running shoes", then every ad each one is
running — one flat row per creative, ready to pivot by advertiserName and adFormat.
Example 3 — an advertiser's full ad history by ID
Input:
{"searchMode": "advertiser","queries": ["AR16735076323512287233"],"region": "anywhere","maxResults": 0}
Pulls every creative Google currently surfaces for that advertiser (maxResults: 0 = no cap) —
the exhaustive option when you already know the advertiser and want their complete live library.
Why this Google Ads Transparency scraper
| Most ad-transparency scrapers | This actor |
|---|---|
| One way in — usually just a domain | Three search modes: advertiser ID, domain, and keyword |
| Nothing in the dataset until the run ends | Streams live — rows land page by page; an aborted run keeps everything found so far |
| Silent partial results when a run is capped | RUN_SUMMARY tells you complete vs resultCapReached on every run |
| Fails or stalls on advertisers with hundreds of pages | Automatic retries with backoff + residential IP rotation — see the run success rate on this actor's stats, we keep it at the top of this category |
| Nested, inconsistent JSON | One flat row per creative, identical fields every time — CRM/BI/LLM ready |
| Big, expensive default run | Default run is 20 ads (~$0.08) — try it before you scale it |
Pricing
Pay per result — $0.004 per ad creative returned, plus a $0.00005 actor-start event. No subscription, no monthly minimum; you pay only for the ads you actually pull.
| Run | Ads returned | Approx. cost |
|---|---|---|
| Default first run | 20 | ~$0.08 |
| A typical brand check | 250 | ~$1.00 |
| A full advertiser library | 1,000 | ~$4.00 |
Set maxResults to cap spend on any run; RUN_SUMMARY.resultCapReached tells you whether more ads exist.
Automate & integrate
- Schedule it — run daily/weekly from the Apify scheduler to track a competitor's creative refresh cadence.
- Call it from code — the Apify API plus the JS and Python clients run this actor and read the dataset directly.
- Push results anywhere — webhooks and integrations send new ads to Zapier, Make, Slack, Google Sheets, or your own endpoint.
- Only want the changes? Use the companion Competitor Ad Monitor, which returns just what is new or changed since the last run.
Use with AI agents (MCP)
This actor is available to any MCP-compatible AI agent (Claude, ChatGPT, Cursor, LangChain) through the
hosted Apify MCP server — no wrapper or extra setup needed. Connect once, then
ask the agent to run mochiboo/google-ads-transparency-scraper.
It is built to be agent-friendly:
- Small, cheap default run (20 ads) so an agent can probe before committing budget.
- Short, literal input field descriptions — an agent can fill the schema with no extra documentation.
- Flat output — one level deep, no decode logic required.
RUN_SUMMARYin the key-value store lets an agent confirm completeness without reading every row.
Related ad-intelligence actors
Building a full competitive picture? These pair with this actor and share the same flat schema style:
- Competitor Ad Intel — All Platforms — one input, Google and Bing ads back in a single normalized dataset.
- Bing Ads Library Scraper — the same idea for the Microsoft/Bing Ads Library.
- YouTube Ads Scraper — video ads only, each resolved to a real YouTube video ID, watch URL, thumbnail and duration.
- Competitor Ad Monitor — schedule it and get only the ads that changed since last run.
FAQ
Do I need a Google account or login? No. The Google Ads Transparency Center is public data — the actor needs no account, cookies, or session.
Can I see how much a competitor spends on Google Ads?
No, and neither can any other tool that uses this source — Google's public Transparency Center does not
publish spend or impressions. variantCount is a breadth proxy (how many variants/placements Google
reports for a creative), useful for ranking which creatives an advertiser is pushing hardest.
How far back does the ad history go? Google generally surfaces ads shown within roughly the last year for most regions. Political and election ads are retained longer.
What is the difference between domain, keyword, and advertiser mode?
domain searches free text or a brand domain (best default). keyword resolves a search term to the
advertisers bidding on it, then pulls their ads. advertiser takes an exact AR... ID and returns that
advertiser's complete library. See Three ways to search above.
How do I get only new ads instead of the full list every time? Use Competitor Ad Monitor — it stores a fingerprint per run and returns only new, changed, or removed creatives.
Can I export to CSV or Excel? Yes — every Apify dataset exports to JSON, CSV, Excel, XML, or RSS, from the UI or the API.
Does this collect personal data? No. Output is advertiser/company-level only, by design — no personal data (PDPA / GDPR-friendly).
Notes & limits
- Only ads currently surfaced by Google's public Ads Transparency Center are returned (Google shows ads active within roughly the last year for most regions; political/election ads have longer retention).
keywordmode depends on Google's own advertiser/domain suggestions for that keyword; very generic terms may resolve to fewer advertisers — for exhaustive coverage of a known brand, usedomainoradvertisermode.- Reads only public, advertiser-level transparency data; use responsibly and in line with Google's terms.
Support & feedback
Hit a bug, a missing field, or a site change that broke a parse? Open an issue on the actor's Issues tab and it gets looked at — this actor is actively maintained.
If it saved you time, an honest review on the Apify Store genuinely helps other people find it.