Google Ads Transparency Scraper — Competitor Ads & Creatives avatar

Google Ads Transparency Scraper — Competitor Ads & Creatives

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Google Ads Transparency Scraper — Competitor Ads & Creatives

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.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

mochi

mochi

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

13

Monthly active users

19 days ago

Last modified

Share

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

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the actor, leave every field on its default, and click Start.
  3. 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.
  4. Happy with it? Swap in your own domain and raise maxResults (or set it to 0 for 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

FieldDescription
advertiserNameThe advertiser (company / organisation)
advertiserDomainThe advertiser's verified domain, e.g. shopify.com (domain-mode searches; null otherwise)
advertiserIdStable Google advertiser ID (AR...)
creativeIdUnique creative ID (CR...)
adFormattext, image, or video
variantCountRelative 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 / lastShownWhen the ad's active window starts / ends (ISO 8601 UTC)
firstShownTs / lastShownTsThe same timestamps as unix seconds — a stable numeric key for sorting / de-duping across runs
previewUrlDirect URL to the rendered creative (interactive / JS formats)
imageUrlDirect image URL for image creatives (extracted from the ad markup); null for text / video
adLibraryUrlDeep link back to the ad on Google's Transparency Center
regionRegion the results were scoped to
advertiserCountryAdvertiser's country (ISO-2), when resolved via keyword mode; null otherwise
advertiserAdCountGoogle's total ad count for that advertiser, when resolved via keyword mode; null otherwise
matchedQuery / searchModeThe 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)

  1. domain (default) — free-text / brand-domain search. Best for a brand or site, e.g. ["nike.com", "shopify.com"].
  2. keyword — give a keyword; the actor resolves the matching advertisers (and domains) and pulls their ads, e.g. ["running shoes"]. Tune breadth with maxAdvertisersPerKeyword.
  3. 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, …) or anywhere for global. Unknown values safely fall back to global (never a wrong-country result).
  • dateFrom / dateToYYYY-MM-DD; keeps ads whose active window overlaps your range.
  • adFormats — any of text, 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 scrapersThis actor
One way in — usually just a domainThree search modes: advertiser ID, domain, and keyword
Nothing in the dataset until the run endsStreams live — rows land page by page; an aborted run keeps everything found so far
Silent partial results when a run is cappedRUN_SUMMARY tells you complete vs resultCapReached on every run
Fails or stalls on advertisers with hundreds of pagesAutomatic 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 JSONOne flat row per creative, identical fields every time — CRM/BI/LLM ready
Big, expensive default runDefault 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.

RunAds returnedApprox. cost
Default first run20~$0.08
A typical brand check250~$1.00
A full advertiser library1,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 anywherewebhooks 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_SUMMARY in the key-value store lets an agent confirm completeness without reading every row.

Building a full competitive picture? These pair with this actor and share the same flat schema style:

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).
  • keyword mode 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, use domain or advertiser mode.
  • 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.