Google Ads Transparency Center Scraper avatar

Google Ads Transparency Center Scraper

Pricing

from $0.15 / 1,000 results

Go to Apify Store
Google Ads Transparency Center Scraper

Google Ads Transparency Center Scraper

Scrape every ad an advertiser runs on Google Search, YouTube, Display, Shopping, Maps and Play from the Google Ads Transparency Center. Extract creative IDs, formats, image URLs, YouTube video IDs, first & last shown dates and regions. Search by brand, domain or advertiser ID. No login or API key.

Pricing

from $0.15 / 1,000 results

Rating

5.0

(1)

Developer

Mary Lou

Mary Lou

Maintained by Community

Actor stats

2

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

See every ad your competitors run on Google — Search, YouTube, Display, Shopping, Maps and Play — and export it all to a spreadsheet.

Google publishes every ad that every verified advertiser runs, in a public registry called the Ads Transparency Center. It is genuinely all of it: the creatives, when each one started, when it last ran, and how many days it has been live. What Google does not give you is a way to get it out — the site shows you a few ads at a time, in a grid you have to scroll forever.

This scraper does that part. Give it a brand name and it hands you every ad that advertiser is running, as JSON, CSV or Excel.

No Google account. No API key. No coding.


What you can use it for

  • 🔍 Competitor research — see exactly which ads a rival is running right now, and which ones they have kept running for years (a long-running ad is a winning ad)
  • 🎨 Creative inspiration — pull thousands of real ad images in one run and study what actually ships in your category
  • 📺 YouTube ad teardowns — get the video IDs behind competitors' YouTube ads and watch the actual creatives
  • 📅 Campaign timelines — first-shown and last-shown dates on every ad, so you can reconstruct when a campaign launched, paused or relaunched
  • 🌍 Market comparison — run the same advertiser across several countries and see what they say differently in each

How to use it — step by step

  1. Type a brand name into Brand names — for example Nike.
  2. (Optional) Add a region like US or GB to see only ads that ran there. Leave it empty for everywhere.
  3. (Optional) Set Max ads to keep the first run small and cheap. Start with 100.
  4. Click Start.
  5. Open the Output tab and export to CSV, Excel or JSON.

Tip: if a brand name is ambiguous, the run log lists every other advertiser that matched, with its ID. Copy the one you want into Advertiser IDs to pin it exactly. You can also paste a Transparency Center URL straight from your browser.


Input options

SettingWhat it does
Brand namesCompany names to look up, e.g. Nike, Booking.com
Advertiser domainsA verified domain like nike.com — more precise than a name
Advertiser IDsThe AR… id from a Transparency Center URL — the most precise input of all
Transparency Center URLsPaste a URL straight from your browser
Regions2-letter country codes. Empty means every country
PlatformLimit to Search, YouTube, Display, Shopping, Maps or Play
Ran on or after / Started on or beforeKeep only ads whose run overlaps your date window
Max adsStop after this many ads. Caps both time and cost
Fetch region breakdown and all variantsAdds every country each ad ran in — but costs one extra request per ad, so it is much slower
Resolve YouTube video IDsGets the actual YouTube video behind video ads — also one extra request per ad

Example: one competitor

{
"searchTerms": ["Nike"],
"maxAds": 500
}

Example: several competitors in one market

{
"searchTerms": ["Nike", "Adidas", "Puma"],
"regions": ["GB"],
"maxAds": 3000
}

Example: a cheap first test

{
"advertiserIds": ["AR16735076323512287233"],
"regions": ["GB"],
"maxAds": 25
}

What you get

One row per ad. A real record:

{
"creative_id": "CR07202690838638362625",
"advertiser_id": "AR18378488041124659201",
"advertiser_name": "Nike Retail BV",
"format": "image",
"first_shown": "2023-11-16",
"last_shown": "2026-08-23",
"total_days_shown": 893,
"image_url": "https://tpc.googlesyndication.com/archive/simgad/18213698926567542268",
"youtube_video_id": null,
"transparency_url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR07202690838638362625?region=anywhere"
}

The fields you will care about most:

FieldWhat it tells you
advertiser_nameThe company as registered with Google (often the legal name, not the brand)
formatimage, video, shopping or text
first_shown / last_shownWhen the ad started and when it last ran
total_days_shownHow many days it actually ran — the single best signal of a winning ad
image_urlA direct link to the ad image. Downloadable as-is
youtube_video_idOpen at youtu.be/<id>
transparency_urlOpens the exact ad on Google, so you can verify any row

Export as JSON, CSV, Excel, XML or RSS from the Output tab.


Speed and limits

AdsRoughly
100a few seconds
1,000~15 seconds
5,000~1 minute
20,000+several minutes, and a proxy is essential

Turning on Fetch region breakdown or Resolve YouTube video IDs changes this completely — those add one request per ad, so a 5,000-ad run goes from ~50 requests to ~5,000. Leave them off unless you need those fields.

Google blocks an IP that requests too much too fast. The scraper handles this: it rotates to a new proxy IP and carries on from the page it had reached, not from the beginning. If a job still cannot finish, it saves its progress and the run ends successfully with everything it did collect. Turn on Continue from last run and run it again to pick up only what was missed — that also works after a run that stopped because it hit Max ads.


Cost

From $0.15 per 1,000 ads, plus Apify platform usage. Nothing for runs that find nothing.

$0.17 per 1,000 on the Free and Bronze tiers, $0.15 on Silver and above. Every other Google Ads Transparency scraper on the Store charges between $0.77 and $1.20 per 1,000 ads.

This one keeps the two halves separate instead of rolling infrastructure into one flat per-result price with a markup baked in: you pay per ad for the scraping itself, and Apify bills the compute and proxy traffic at your plan's own rate — the same credits your subscription already includes.

That second half is unusually small here. Unlike the Meta Ad Library, these endpoints answer a bare POST and are happy with datacenter proxies, so there is no residential traffic to pay for and a thousand ads take about ten seconds:

What you scrapeScraper charge+ Platform usageRoughly
100 ads (a quick look at a brand)$0.017~$0.001~$0.02
1,000 ads$0.17~$0.01~$0.18
10,000 ads$1.70~$0.06~$1.76
100,000 ads$17.00~$0.60~$17.60

Both columns are quoted at the Free plan rate, which is the most expensive this gets — see below.

Usage figures are measured from real runs on the Free plan rate and rounded up. The single biggest line in them is not compute or proxy traffic — it is the dataset write itself, at $0.005 per 1,000 records. A measured 1,000-ad run billed $0.003 of compute, $0.005 of dataset writes and $0.0002 of everything else.

Turning on Fetch region breakdown or Resolve YouTube video IDs is the one thing that changes this picture: they add a request per ad, so a 5,000-ad run goes from ~50 requests to ~5,000. The scraper charge does not move — you still pay per ad — but the run takes far longer and the compute half grows with it.

It gets cheaper as your plan goes up

Both halves are discounted at higher tiers, so the same scrape costs less on a bigger plan:

TierScraper chargeCompute
Free / Bronze$0.17 / 1,000 ads$0.20 / CU
Silver$0.15 / 1,000 ads$0.16 / CU
Gold and above$0.15 / 1,000 ads$0.13 / CU

Platform usage is drawn from the prepaid usage credit your plan already includes, so on a paid plan a good part of it is money you've spent regardless. See Apify pricing for the full rate card.

Keeping it predictable

  • Set Max ads. The scraper stops exactly there, so it caps runtime and cost in one number. Perfect for testing, and for putting a hard ceiling on any single run.
  • Set a maximum cost per run (in the run options). The scraper reads it before it starts and stops as soon as it has delivered what your budget covers — it will never quietly keep scraping past what you're paying for.
  • Add a region. One country is a small fraction of a global advertiser's total.
  • Use Max pages per job while testing — one page is up to 100 ads.

A whole-archive scrape of a very large advertiser is genuinely large — Nike Retail BV alone reports ~100,000 ads — so start with a Max ads limit if you just want a snapshot.


Frequently asked questions

Is this legal? It scrapes a public registry that Google publishes deliberately, under EU and US transparency rules. There is no login, no paywall and no personal data involved — these are commercial advertisements.

Do I need a Google account or an API key? No. Neither.

Does Google have an official API for this? No. The Ads Transparency Center is a website with no public API, which is why this actor exists.

Why did my brand name find the wrong company? Several companies can register similar names, and Google's own name search only matches on prefix — for Nike it returns ten small advertisers called Nikena, nikey, Nikesh and so on, and never the real one. The scraper therefore also looks up the brand's own domain and takes whichever candidate is larger, which is how Nike lands on Nike Retail BV and its ~100,000 ads. Whatever it picks, the run log lists the other matches with their advertiser IDs — copy the right one into Advertiser IDs to pin it.

Why do I get fewer ads than the number Google shows? For large advertisers Google reports a rounded range, not a count — "8,000 to 9,000" rather than 8,437. For small advertisers the number is exact and the scraper matches it precisely.

Can I get the headline and description text of search ads? No. Google returns text ads as a JavaScript program that draws the ad rather than as text, so the copy cannot be extracted without running a browser. Image URLs and YouTube video IDs are available.

Why does the same ad appear under several regions? Because it ran in several. If you scrape multiple regions, each ad is still written once — duplicates are removed automatically.

What does "days shown" mean? The number of days the ad actually ran. It is usually less than the gap between first and last shown, because campaigns pause and resume.

Can I schedule this? Yes. Use Apify Schedules to run it daily or weekly and track how a competitor's creative mix changes.

Do I need a proxy? For small runs, no. For anything over a few thousand ads, yes — leave the default Apify Proxy on. Datacenter proxies are fine; you do not need residential. Measured without one: about 5,400 ads from a single IP before Google blocked it, and that block was still in place 90 minutes later. With the proxy on, the scraper just moves to a new IP and carries on from the page it had reached.

Can I run several competitors at once? Yes. Put them all in Brand names. They are scraped in parallel and Max ads applies across the whole run.


Support

Found a bug or need a field that is not there? Open an issue on the actor's page and include your run ID.