Google Ads Transparency Center Scraper
Pricing
from $0.15 / 1,000 results
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
Maintained by CommunityActor 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
- Type a brand name into Brand names — for example
Nike. - (Optional) Add a region like
USorGBto see only ads that ran there. Leave it empty for everywhere. - (Optional) Set Max ads to keep the first run small and cheap. Start with 100.
- Click Start.
- 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
| Setting | What it does |
|---|---|
| Brand names | Company names to look up, e.g. Nike, Booking.com |
| Advertiser domains | A verified domain like nike.com — more precise than a name |
| Advertiser IDs | The AR… id from a Transparency Center URL — the most precise input of all |
| Transparency Center URLs | Paste a URL straight from your browser |
| Regions | 2-letter country codes. Empty means every country |
| Platform | Limit to Search, YouTube, Display, Shopping, Maps or Play |
| Ran on or after / Started on or before | Keep only ads whose run overlaps your date window |
| Max ads | Stop after this many ads. Caps both time and cost |
| Fetch region breakdown and all variants | Adds every country each ad ran in — but costs one extra request per ad, so it is much slower |
| Resolve YouTube video IDs | Gets 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:
| Field | What it tells you |
|---|---|
| advertiser_name | The company as registered with Google (often the legal name, not the brand) |
| format | image, video, shopping or text |
| first_shown / last_shown | When the ad started and when it last ran |
| total_days_shown | How many days it actually ran — the single best signal of a winning ad |
| image_url | A direct link to the ad image. Downloadable as-is |
| youtube_video_id | Open at youtu.be/<id> |
| transparency_url | Opens 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
| Ads | Roughly |
|---|---|
| 100 | a 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 scrape | Scraper charge | + Platform usage | Roughly |
|---|---|---|---|
| 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:
| Tier | Scraper charge | Compute |
|---|---|---|
| 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 jobwhile 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.