Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
Google Ads Transparency Scraper icon

Google Ads Transparency Scraper

Scrape Google Ads Transparency Center by domain, advertiser name or advertiser ID. Ad creatives, formats, first/last shown dates, countries and previews.

55 runs on Apify $0.0006 per Google ad result ($0.6 / 1,000)
Run this in the cloudRun on Apify →

Ad Intelligence & Competitor Research

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust advertiserDomains, advertiserNames, advertiserIds (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0006 per Google ad result = $0.6 per 1,000

You are charged forWhenPrice
Google ad resultOne real row returned from Google Ads Transparency Center — an ad creative, or an advertiser when you use "List advertisers only". Sample rows, empty results and errors are never charged.$0.0006
Actor StartCharged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.001

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-08, and they are what you are actually charged.

Inputs

FieldWhat it doesType
advertiserDomainsLanding-page domains to look up, for example nike.com. This is the easiest way in: you get every Google ad whose landing page sits on that domain, across all advertiser accounts.array
advertiserNamesAdvertiser names as they appear in Google's verification records, for example "Nike, Inc.". Each name is resolved to its advertiser ID and then scraped. Turn on "List advertisers only" to get the matching advertisers instead of their ads.array
advertiserIdsGoogle advertiser IDs such as AR16735076323512287233. You can read one off any adstransparency.google.com URL.array
startUrlsPaste advertiser or creative permalinks, e.g. https://adstransparency.google.com/advertiser/AR16735076323512287233?region=USarray
regionTwo-letter country code to restrict the ads to (US, GB, DE, BR, IN ...), or "anywhere" for every country. Regional filtering changes both the result set and the ad counts Google reports.string
adFormatKeep only one creative format.string
maxItemsStop after this many rows in total, across every target. Only real rows count.integer
listAdvertisersOnlyWith "Advertiser names" filled in, return the matching advertisers (ID, name, verified country, ad-count band) instead of their creatives. Useful when you need to find an advertiser ID first.boolean
includeRegionStatsFetch each creative's full country breakdown: impression band, first/last shown date and surface split (Search, YouTube, Display, Maps, Shopping, Play) per country. Adds one request per ad.boolean
includeAdvertiserDetailsLook up the advertiser's verified legal name and country once per advertiser.boolean
egressModeAdvanced. "auto" rotates Apify datacenter addresses first and falls back to the static pool and then to a direct connection.string

What you get

A structured dataset — each result includes fields like:

advertiserNameadvertiserIdcreativeIdadFormatfirstShownAtlastShownAtregionsShownCountlandingDomainpreviewImageUrlcreativeUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Ad Intelligence & Competitor Research

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Meta Ad Library Scraper iconAd Intelligence & Competitor Research

Meta Ad Library Scraper

Scrape Facebook and Instagram Ad Library ads by keyword, advertiser Page ID or URL. No login, no Meta API token. Ad copy, creatives, dates, platforms, spend.

Ready to run — no setup

TikTok Trending Hashtags iconAd Intelligence & Competitor Research

TikTok Trending Hashtags

Get official TikTok Creative Center hashtag rankings by country and period: rank, posts, views, popularity curves, industries and top creators.

Ready to run — no setup

SaaS Competitor Monitor: Pricing, Changelog & Positioning iconMonitors & Alerts

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track competitor SaaS pricing, changelogs, and positioning changes on a schedule. Get structured deltas and Slack alerts for only what changed.

4 use cases

G2 Reviews Scraper iconReviews & Reputation Data

G2 Reviews Scraper

Scrape G2 software reviews at $1.70 per 1,000: rating, title, full text, reviewer, date and URL. Any product slug. No G2 account or API key needed.

Ready to run — no setup

Google Trends Scraper iconAd Intelligence & Competitor Research

Google Trends Scraper

Google Trends data with no API key: keyword interest over time, interest by region or city, top and rising related queries, and Trending Now by country.

Ready to run — no setup

Yandex Search Engine Scraper (SERP API) iconAd Intelligence & Competitor Research

Yandex Search Engine Scraper (SERP API)

Scrape Yandex search results by keyword or URL. Rank, title, URL, domain, snippet, ads and SERP features, with region targeting. No API key.

Ready to run — no setup

See all Ad Intelligence & Competitor Research →

Google Ads Transparency Scraper (Ad Spy API)

Pulls ads out of Google's Ads Transparency Center — the public archive Google is required to publish of every ad running through its network.

Give it a domain, an advertiser name, or an advertiser ID. You get back the creatives that advertiser is running: the format, when the ad was first and last seen, how many countries it ran in, the landing domain, and a link you can open to view the ad itself.

$0.60 per 1,000 ads ($0.0006 each), plus $0.001 each time a run starts. Flat rate on every Apify plan — no volume tiers, no plan gates, and the same number on your first run as on your millionth. Most Google Ads Transparency scrapers cost more than this on a free plan.

What it is good for

  • Seeing what a competitor is spending money on right now, and for how long each ad has been live.
  • Working out which creatives are *working* — an ad that has been running for two years is an ad that

pays for itself.

  • Finding an advertiser's other brand entities. nike.com returns ads from Nike, Inc.,

Nike Retail BV and 株式会社ナイキジャパン, because they all point at the same domain.

  • Country-level reach: which markets an ad actually ran in, and roughly how many impressions it got.

Input

Fill in at least one of the first four.

FieldWhat it does
advertiserDomainsLanding-page domains, e.g. ["nike.com"]. Easiest way in — catches every advertiser account pointing at that domain.
advertiserNamesNames as Google verified them, e.g. ["Nike, Inc."]. Resolved to an advertiser ID, then scraped.
advertiserIdsIDs like AR16735076323512287233, straight off an Ads Transparency URL.
startUrlsPaste https://adstransparency.google.com/advertiser/AR.../creative/CR... links.
regionTwo-letter country code (US, GB, DE, BR…) or anywhere. Default anywhere.
adFormatany, IMAGE, TEXT or VIDEO.
maxItemsRow cap across all targets. Default 100.
listAdvertisersOnlyWith advertiserNames, return the matching advertisers instead of their ads. Use it to find an ID.
includeRegionStatsPer-country impression bands, first/last shown dates and surface split. One extra request per ad.
includeAdvertiserDetailsAdds the advertiser's verified legal name and country.

Run it with empty input and you get one clearly-labelled sample row, free of charge, so you can see the shape of the output before you spend anything.

Output

One row per ad creative:

{

  "resultType": "creative",

  "advertiserId": "AR16735076323512287233",

  "advertiserName": "Nike, Inc.",

  "creativeId": "CR05684861671248494593",

  "adFormat": "TEXT",

  "firstShownAt": "2026-06-05T07:00:00.000Z",

  "lastShownAt": "2026-08-08T04:04:49.145Z",

  "regionsShownCount": 64,

  "landingDomain": "nike.com",

  "previewImageUrl": null,

  "previewIframeUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...",

  "creativeUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR05684861671248494593?region=anywhere",

  "advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=anywhere",

  "region": "anywhere",

  "position": 1,

  "scrapedAt": "2026-08-08T04:40:36.900Z"

}

Image ads carry previewImageUrl (a direct tpc.googlesyndication.com archive URL). Text and video ads carry previewIframeUrl instead, which is the renderer Google's own site embeds.

With includeRegionStats on, each row also gets:

"regionStats": [

  { "regionCode": "CZ", "regionName": "Czechia", "regionCriterionId": 2203,

    "impressionsLower": null, "impressionsUpper": 1000,

    "firstShownDate": "2023-03-09", "lastShownDate": "2026-08-04",

    "surfaces": [{ "surface": "DISPLAY", "impressionsLower": null, "impressionsUpper": 1000 }] }

]

With listAdvertisersOnly, rows look like this instead:

{ "resultType": "advertiser", "advertiserId": "AR16735076323512287233",

  "advertiserName": "Nike, Inc.", "advertiserCountry": "US",

  "adCountLower": 9000, "adCountUpper": 10000 }

Speed, measured

Real runs on the platform, August 2026:

RunRowsWall clock
nike.com, 5 ads54 s
Nike, Inc. in the UK178 s
Nike, Inc. in the US25025 s
Nike, Inc. in the US1,00061 s
100 ads with full per-country stats10082 s

What this does not do

  • No spend or budget figures. Google does not publish them. Impressions come as wide bands

(≤1000, 2000–3000), not exact counts, and only for ads that carry them — plenty do not.

  • No political-ad targeting criteria. Election ads in the EU and US expose extra targeting data in

the UI; this actor returns the same creative fields for them as for any other ad.

  • No ad text extraction for video and rich-media ads. You get the renderer URL, not a transcript.

Text ads that ship as plain HTML do give you previewText.

  • regionsShownCount counts Google's geo criteria, not countries. It includes cities and regions,

which is why the number can be 1,735 for an ad that ran in ~30 countries. Use includeRegionStats if you need the real country list.

  • It cannot find an advertiser that has never advertised on Google. An empty result is a real

answer, and it is not charged.

Cost

  • $0.001 per run start.
  • $0.0006 per row returned — $0.60 per 1,000 ads.
  • Sample rows, empty results, bad input and rate-limit failures are not charged. You pay for rows

that actually came back.

Scraping 1,000 of an advertiser's ads costs $0.60, flat, on every Apify plan. The established alternatives are tiered, so what you pay depends on your plan. Checked against the Apify Store on 10 August 2026:

ActorMonthly usersFree planCheapest tier
solidcode/ads-transparency-scraper447$1.50 / 1k$0.80 / 1k
silva95gustavo/google-ads-scraper300$1.90 / 1k$0.90 / 1k
scrapesage/google-ads-transparency-scraper292$2.00 / 1k$2.00 / 1k
lexis-solutions/google-ads-scraper234$1.90 / 1k$0.99 / 1k

FAQ

What is the Google Ads Transparency Center? A public archive Google publishes of the ads running through Google Ads, YouTube, Display, Search, Shopping and Maps. Every verified advertiser has a page listing their live and recent creatives. This actor reads that archive through the same JSON endpoint the site itself calls.

Do I need a Google account or an API key? No. Nothing to sign in to, no key to paste, no cookies. The data is public.

Can I scrape all of a competitor's Google ads? Yes, up to maxItems. Large advertisers have a lot: Nike, Inc. shows 8,000–9,000 ads in the US alone. Set maxItems to what you actually need — you are billed per row.

How do I find an advertiser ID? Put the company name in advertiserNames and switch on listAdvertisersOnly. You get every matching advertiser with its ID, verified country and rough ad count, so you can pick the right entity before you spend anything on creatives.

Why do I get several advertisers back for one domain? Big companies run separate Google Ads accounts per market or per legal entity, and Google verifies each one separately. Searching by domain catches all of them. Searching by advertiser ID pins you to one.

Can I filter by country? Yes — set region to a two-letter country code. It changes the result set, not just the labels: Nike, Inc. returns 8,000+ ads for US and 17 for GB.

What do "first shown" and "last shown" mean? The first and last time Google observed the creative serving. lastShownAt within the last day or two means the ad is live right now. An ad first shown in 2021 and last shown today has been running for five years, which usually means it converts.

Does it get rate limited? Google throttles this endpoint per IP address — a single address gets roughly 25 requests before it starts answering HTTP 429. The actor rotates across Apify's datacenter pool, then a static ISP pool, then a direct connection, so normal runs never see it. If every route is throttled you get an uncharged diagnostic row telling you to retry, not a silent empty dataset.

Can I use my own proxies? Yes. Put them in proxyConfiguration.proxyUrls and they take priority over everything else.

Is scraping this legal? The Ads Transparency Center is published deliberately, for public inspection, under advertising transparency rules. This actor reads only that public data — no logins, no personal data, no paywall. How you use the output is on you.

Notes on how it works

The Ads Transparency Center is a Flutter app. If you fetch the page HTML you get a couple of megabytes of Dart bootstrap and zero ad data, which looks like a dead end and is not: every screen is driven by JSON POSTs to adstransparency.google.com/anji/_/rpc/…. This actor calls those endpoints directly. No browser, no headless Chrome, which is why a 1,000-row run finishes in about a minute.