Google Ads Transparency Scraper - Ad Creatives & Advertisers
Pricing
from $1.76 / 1,000 advertiser ads
Google Ads Transparency Scraper - Ad Creatives & Advertisers
Scrape the Google Ads Transparency Center: every ad creative a brand runs, with format, flight dates, days shown and per-country reach. 213 countries.
Google Ads Transparency Scraper — Competitor Ads & Creatives 📢
🎉 Every ad a brand is running on Google, across 213 countries, with no login and no API key
Built for PPC teams and agencies who need competitor ad creatives as rows they can filter and export
🔎 What is the Google Ads Transparency Scraper — and when should you use it?
The Google Ads Transparency Scraper turns Google's public Ads Transparency Center into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: Google ad creatives for any advertiser: image, text and video ads with the rendered preview, the first and last date each one ran, how many days it was shown, and a link that opens the ad in Google's own viewer. Filter by country across 213 markets and by ad format, both applied before anything is charged. One optional flag adds every creative variation, the full per-country reach list with flight dates, Google's published impression range and the ad category. A separate advertiser search turns a brand name into the advertiser ID behind it and reports how many ads each match is running, and an advertiser profile returns the verified legal name and the country Google verified it in.
Use something else when: you need ads from a network Google does not publish. This actor reads Google's Ads Transparency Center only. Meta's Ad Library, Microsoft and Bing ads, TikTok's ad library and LinkedIn are separate disclosure systems with separate data, and no Google tool can reach them.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/google-ads-transparency-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want to see what ads a competitor is running on Google using the Apify Actor `sian.agency/google-ads-transparency-scraper`.Use it when I need: Google ad creatives for any advertiser: image, text and video ads with the rendered preview, the first and last date each one ran, how many days it was shown, and a link that opens the ad in Google's own viewer. Filter by country across 213 markets and by ad format, both applied before anything is charged. One optional flag adds every creative variation, the full per-country reach list with flight dates, Google's published impression range and the ad category. A separate advertiser search turns a brand name into the advertiser ID behind it and reports how many ads each match is running, and an advertiser profile returns the verified legal name and the country Google verified it in.Don't use it when: This actor reads Google's Ads Transparency Center only. Meta's Ad Library, Microsoft and Bing ads, TikTok's ad library and LinkedIn are separate disclosure systems with separate data, and no Google tool can reach them.How to call it: pick one `operation` — `advertiserAds` returns the creatives and is what most runs want, `advertiserSearch` turns a brand name into the advertiser ID and its ad-count range, `advertiserProfile` returns the verified identity for one advertiser ID. Put brand names or `AR` advertiser IDs in `queries`, set `region` to a two-letter country code or `ANYWHERE`, narrow with `adFormat` (`ANY`, `TEXT`, `IMAGE`, `VIDEO`) and `lastShownSince` to keep only ads still running, cap the run with `maxResults`, and set `includeCreativeDetail` to add per-country reach and creative variations.Start with this input:{"operation": "advertiserAds","queries": ["Nike"],"region": "US","adFormat": "ANY","maxResults": 100}Ask me which brands to look at and which country I care about, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Show me every video ad Nike is running in Germany right now, and how long each one has been live.
- Compare the ad creatives of my three biggest competitors and tell me which formats they lean on.
- Find every verified advertiser using my brand name and tell me which country each one is registered in.
- Pull Booking.com's ads in Spain and flag the creatives that launched in the last month.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/google-ads-transparency-scraper.md.
📋 Overview
Google publishes every ad it serves, but only one ad at a time, through a viewer you cannot export. This actor reads that same public record and hands you the whole advertiser in one dataset.
Why teams use it:
- ✅ Creatives you can actually use: image URLs, video and text ad previews, and a direct link that opens each ad in Google's own viewer
- ⚡ Fast: 100 ads per request, so a thousand-ad advertiser is ten requests, not two hundred page loads
- 🎯 213 countries: the same brand runs different ads in different markets, and you can pull any of them
- 💰 Pay per ad that lands: failed lookups are never charged, and format or date filters run before billing, so a narrowed search costs less
- 💎 Per-country reach: one optional flag adds every creative variation, the full country list with first and last shown dates, impression ranges and the ad category
- ✨ No login anywhere: no Google account, no API key, no cookie, no OAuth
✨ Features
- 📢 Every ad creative an advertiser has on record, paginated to whatever depth you ask for
- 🔎 Brand-name resolution: type "Nike", not an opaque advertiser ID
- 🏢 Verified identity: legal name, display name and the country Google verified the advertiser in
- 🌍 Country filter across 213 countries, or Anywhere for the global picture
- 🎞️ Format filter: text, image or video, applied before you are charged
- 📅 Recency filter: keep only ads still running as of a date you choose
- ⏱️ Days shown on every ad, so you can tell an evergreen creative from a two-week test
- 🔬 Per-country reach with impression ranges and ad category, on request
- 🧩 Creative variations: the other sizes and cuts of the same ad
- 📊 Ad-count ranges per advertiser, so you can size a competitor before you pull them
🎬 Quick Start
Pick an operation, name a brand, press Start. The default run needs no configuration at all. It pulls Nike's ads so you can see the shape of the data, and everything after that is one field.
curl -X POST https://api.apify.com/v2/acts/sian.agency~google-ads-transparency-scraper/runs?token=YOUR_TOKEN \-H 'Content-Type: application/json' \-d '{"operation": "advertiserAds", "queries": ["Nike"], "region": "US"}'
🚀 Getting Started (3 Simple Steps)
Step 1: Name the brands
Type one or more brand names into Who do you want ads for?. Advertiser IDs starting with AR work too, if you already have them.
Step 2: Pick a country
Leave it on Anywhere for the global view, or choose one of 213 countries to see what that brand runs in that market.
Step 3: Press Start
Results stream into the dataset as they arrive. Export to JSON, CSV or Excel whenever you like.
That's it! In about a minute, you'll have:
- Every ad creative on record for those brands
- The dates each one ran and how many days it was shown
- A link that opens each ad in Google's own viewer
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | advertiserAds, advertiserSearch or advertiserProfile |
queries | array | No | Brand names or advertiser IDs starting with AR |
region | string | No | Two-letter country code, or ANYWHERE |
adFormat | string | No | ANY, TEXT, IMAGE or VIDEO |
lastShownSince | string | No | Keep only ads last shown on or after this date |
includeCreativeDetail | boolean | No | Add per-country reach, variations and category |
maxResults | integer | No | Ads per brand, 1 to 5000 |
Example: every ad Nike runs in the US
{"operation": "advertiserAds","queries": ["Nike"],"region": "US","maxResults": 200}
Example: video ads still running, with full country reach
{"operation": "advertiserAds","queries": ["Booking.com", "Expedia"],"region": "DE","adFormat": "VIDEO","lastShownSince": "2026-08-01","includeCreativeDetail": true,"maxResults": 50}
Example: find the advertiser ID behind a brand name
{"operation": "advertiserSearch","queries": ["Nike"]}
📤 Output
Every row is one ad, one advertiser match, or one advertiser profile, depending on the operation.
| Field | Type | Description |
|---|---|---|
imageUrl | string | The ad image, when the creative is an image ad |
advertiserName | string | The advertiser running the ad |
adFormat | string | TEXT, IMAGE or VIDEO |
adCategory | string | Google's category for the ad, e.g. Clothing & Accessories |
creativeId | string | Stable ID for this creative |
adUrl | string | Opens this exact ad in the Ads Transparency Center |
previewUrl | string | Rendered preview for text and video ads |
firstShown | string | First date this creative ran |
lastShown | string | Most recent date it ran |
daysShown | integer | Days the creative was shown |
impressionsLowerBound | integer | Bottom of Google's published impression range |
impressionsUpperBound | integer | Top of that range |
regionCount | integer | How many countries this creative ran in |
regions | array | Per-country reach with first and last shown dates |
variationCount | integer | How many variations of this creative exist |
advertiserId | string | The advertiser ID, reusable in later runs |
adCountLowerBound | integer | Fewest ads this advertiser is known to run |
adCountUpperBound | integer | Most ads this advertiser is known to run |
legalName | string | Verified legal entity behind the advertiser |
advertiserCountry | string | Country Google verified the advertiser in |
Example row:
{"query": "Nike","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","creativeId": "CR07944289166462812161","adFormat": "IMAGE","imageUrl": "https://tpc.googlesyndication.com/archive/simgad/17551224094686740705","firstShown": "2023-11-16","lastShown": "2026-09-04","daysShown": 856,"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR07944289166462812161?region=anywhere","advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=anywhere","status": "success"}
💼 Use Cases & Examples
1. Competitor Ad Monitoring
A PPC manager watching three rivals wants to know the moment a new creative goes live.
Input: the three brand names, on a daily schedule Output: every creative with first shown, last shown and days shown Use: diff two runs and you have the week's launches and the quiet retirements, without opening a browser.
2. Creative Research Before a Launch
A performance marketer writing new ad copy wants to see what already works in the category.
Input: the four best-funded advertisers in the vertical, format set to VIDEO
Output: rendered previews and the run dates for each video ad
Use: the creatives that have been live for 800 days are the ones paying for themselves. Start there.
3. Market Entry and Country Comparison
A brand expanding into Germany wants to know what the incumbents run there, not in the US.
Input: the same advertiser, once per country Output: completely different creative sets per market, plus per-country reach Use: Nike runs roughly 10,000 ads globally and around 95 in Germany. That gap tells you how contested the market really is.
4. Agency Pitch Research
An agency preparing a pitch wants the prospect's whole ad footprint on one slide.
Input: the prospect and its three closest rivals, advertiserSearch first for the ad counts
Output: ad-count ranges per brand, then every creative for the ones that matter
Use: walk in already knowing which formats they lean on and how stale their creative is.
5. Ad Compliance and Brand Protection
A brand-protection lead is hunting advertisers bidding on their trademark.
Input: the brand name, advertiserSearch
Output: every verified advertiser matching that name, with its registered country
Use: the lookalikes and grey-market resellers surface immediately, each with a verified legal name you can act on.
6. Ad Intelligence for AI Agents
An analyst wants an agent to answer ad questions on demand.
Input: the MCP prompt above Output: structured rows the agent can summarise, chart or join to other data Use: "what is Expedia running in Spain this month" becomes a question you ask, not a project.
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/google-ads-transparency-scraper').call({operation: 'advertiserAds',queries: ['Nike'],region: 'US',maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/google-ads-transparency-scraper').call(run_input={'operation': 'advertiserAds','queries': ['Nike'],'region': 'US','maxResults': 100,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~google-ads-transparency-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation": "advertiserAds", "queries": ["Nike"], "region": "US"}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a weekly schedule, or a webhook from your own tooling
- HTTP Request: call the actor API with your brand list
- Process: compare
creativeIdvalues against last week's run - Action: post the new creatives to Slack, or append them to a sheet
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 ads per run, with every field and every operation unlocked
- No credit card required
- Enough to see exactly what a competitor is running
PAID Tier (Production Ready)
- Unlimited ads per run, up to 5,000 per brand
- Pay per result: only successful rows are charged
- Format and date filters run before billing, so a narrow search costs less than a wide one
💰 $2.00 per 1,000 ads on paid plans, the middle of the market, on an actor that reads 100 ads per request instead of 40.
What a run costs, in full. Every billable event is listed here so nothing on your invoice is a surprise. Prices are the paid-plan (Bronze) rate; the Free tier is 4x these, and Gold and above are lower.
| You are charged for | Event | Paid plans |
|---|---|---|
| Each ad creative returned | ad-creative-result | $0.002 ($2.00 per 1,000) |
| Each advertiser found by name | advertiser-result | $0.0025 |
| Each advertiser profile | advertiser-profile-result | $0.003 |
Each per-ad detail lookup, only with includeCreativeDetail | creative-detail-result | $0.003 |
| Starting a run | apify-actor-start | $0.005 |
Rows that fail are never charged - an input we could not read costs you the run-start fee and nothing else.
❓ Frequently Asked Questions
Q: Do I need a Google account or an API key? A: No. The Ads Transparency Center is public, and this actor reads it without any login, key or cookie.
Q: Can I look up a company by its website?
A: No, and this is worth understanding before you pick a tool. Google's search matches advertiser names, not domains. Passing nike.com returns an unrelated company with a similar name, so this actor rejects a bare domain instead of quietly profiling the wrong business. Pass the brand name, or run advertiserSearch first and take the advertiser ID.
Q: A brand name matches several advertisers. Which one do I get?
A: The one running the most ads, which is almost always the company you meant. Searching "Nike" surfaces a Kenyan advertiser with a single ad before Nike, Inc. with 10,000, so first-match would be wrong. Run advertiserSearch if you want to choose yourself.
Q: Why does an advertiser return no ads? A: Usually the country filter. Try Anywhere first. Google also indexes verified advertisers only, so a company that never completed verification has no page at all.
Q: Are the impression numbers exact? A: No. Google publishes ad counts and impressions as ranges, so a creative reads as 1,000 to 2,000 impressions rather than a single figure. Every tool reading this source is bound by the same limit.
Q: How many ads can I pull for one brand?
A: Up to 5,000 per brand per run. Large advertisers run thousands, so maxResults is the main lever on run cost.
Q: What output formats are available? A: JSON, CSV and Excel, exported straight from the Apify dataset.
Q: How far back does the data go? A: As far as Google keeps it. Creatives first shown in 2021 and 2022 still appear in the results.
🐛 Troubleshooting
A brand returns no ads
- Set the country to Anywhere, since the brand may not advertise in the one you chose
- Run
advertiserSearchon the same name to confirm the advertiser exists and is verified
I got the wrong company
- Run
advertiserSearch, pick the rightadvertiserIdfrom the results, then pass that ID instead of the name
A run returns fewer ads than maxResults
- The advertiser has fewer ads than you asked for in that country, or your format and date filters removed the rest. Filtered ads are never charged.
The run is slower than expected
- Requests are deliberately paced so Google does not throttle the run. A large
maxResultstakes longer rather than failing.
A video ad has no image
- Video and text ads carry
previewUrlrather thanimageUrl. OpenadUrlto see the ad as Google renders it.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
This actor reads Google's Ads Transparency Center, a disclosure system Google publishes deliberately so that anyone can see who is advertising and what they are running.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Google and Google Ads are trademarks of Google LLC. This actor is not affiliated with, endorsed by, or sponsored by Google.
🤝 Support
Join our active support community
- For issues or questions, use the Issues tab on this Actor's page in Apify Console
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools