Google Ads Transparency Scraper
Pricing
from $0.80 / 1,000 results
Google Ads Transparency Scraper
Extract every ad an advertiser runs on Google Search, YouTube, Display and Shopping from the Ads Transparency Center. Search by brand name, domain, or advertiser ID and get creatives, first and last shown dates, ad formats, variation counts, and per-country reach. Export to JSON, CSV or Excel.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
See every ad your competitors run on Google, in one structured dataset. Pull text, image, and video creatives, run dates, formats, and per-country reach from the Google Ads Transparency Center. Just type a brand name. Results in seconds, not hours.
How it works

โจ Why teams choose this over other Google Ads scrapers
Spending afternoons clicking through the Ads Transparency Center one advertiser at a time? Running ad scrapers that crash on Google's endless scroll? Getting back half-empty rows with no dates or reach?
- ๐ Start from a brand name, not a cryptic URL. Other scrapers make you hunt down the advertiser URL by hand first. Here you type
Nike,nike.com, or an advertiser ID and the scraper resolves it for you. - ๐ Filter by any of 30+ countries. See exactly which ads a brand runs in the US, UK, Germany, Brazil, or India. Leave it on "Anywhere" to capture their entire global footprint.
- ๐จ Split by format. Pull only video ads for creative research, only text ads for copy analysis, or everything at once.
- ๐๏ธ Know when every ad ran. Each ad ships with a first-seen and last-seen date, so you can spot new launches and retired campaigns at a glance.
- ๐ Per-country reach on every ad. Turn on details to get the list of countries each creative was shown in, with the latest date per country.
- ๐งฑ Built to finish the run. A lightweight, direct approach means it holds up on large advertisers with thousands of ads where browser-based scrapers stall.
- ๐ Scrape many brands in one run. Feed a list of competitors and get a single clean dataset back.
๐ฏ What you can do with Google Ads Transparency data
| Team | What they build |
|---|---|
| Performance marketing | A live board of every competitor creative, refreshed weekly, to benchmark angles and offers |
| Creative strategy | A swipe file of a rival's top image and video ads, sorted by how long each has stayed live |
| Brand & PR | Monitoring for a brand's own ads across countries to catch unauthorized resellers running paid traffic on its name |
| Market research | A map of which advertisers dominate a category by number of active ads per country |
| Agencies | Pre-pitch audits showing a prospect exactly what their competitors are advertising right now |
| Ecommerce | Tracking a competitor's promotional calendar by watching when new ads appear and old ones disappear |
๐ฅ Input parameters
| Parameter | Type | Description |
|---|---|---|
queries | array | One entry per advertiser. Brand name, domain, advertiser ID, or Transparency Center URL. Required. |
region | string | Country to filter ads by (ISO code) or anywhere. Default anywhere. |
adFormat | string | all, text, image, or video. Default all. |
maxItems | integer | Maximum total ads to return across all entries. Default 100. |
includeDetails | boolean | Fetch per-country reach, all creative variations, and extra images. Default true. |
๐ Output data
Each ad is one dataset record. An image ad found by domain:
{"query": "nike.com","advertiserId": "AR18378488041124659201","advertiserName": "Nike Retail BV","creativeId": "CR03225856322918416385","format": "image","domain": "nike.com","adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR03225856322918416385?region=anywhere","firstShown": "2025-10-27T19:20:53Z","lastShown": "2026-07-04T11:05:21Z","previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...","imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/4437896825228257723"],"regionStats": [{ "regionCode": "DE", "lastShownDate": "2026-07-03" },{ "regionCode": "ES", "lastShownDate": "2026-07-03" },{ "regionCode": "PT", "lastShownDate": "2026-07-03" }],"variationsCount": 2}
A video ad found by brand name:
{"query": "Spotify","advertiserId": "AR06692862628802428929","advertiserName": "Spotify USA, Inc.","creativeId": "CR15957144702667456513","format": "video","adUrl": "https://adstransparency.google.com/advertiser/AR06692862628802428929/creative/CR15957144702667456513?region=US","firstShown": "2026-05-11T08:02:44Z","lastShown": "2026-07-03T21:40:10Z","previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...","regionStats": [{ "regionCode": "US", "lastShownDate": "2026-07-03" }],"variationsCount": 4}
๐๏ธ Data fields
14 fields per ad.
Identity (8):
| Field | Type | Description |
|---|---|---|
query | string | The input entry that produced this ad |
advertiserId | string | Stable Google advertiser ID (starts with AR) |
advertiserName | string | Verified advertiser name |
creativeId | string | Stable creative ID (starts with CR) |
format | string | text, image, or video |
domain | string | Advertiser website, when Google lists one |
adUrl | string | Permanent deep link to the creative on the Transparency Center |
previewUrl | string | Rendered preview link for the creative |
Timing (2):
| Field | Type | Description |
|---|---|---|
firstShown | string | First date the ad was seen, ISO 8601 (RFC 3339) UTC |
lastShown | string | Most recent date the ad was seen, ISO 8601 (RFC 3339) UTC |
Creative & reach (4):
| Field | Type | Description |
|---|---|---|
imageUrls | array | Creative image URLs (banners, and the rendered image of text ads) |
regionStats | array | Per-country reach. Each entry has regionCode (ISO-2) and lastShownDate (YYYY-MM-DD). Present when details are on |
variationsCount | integer | Number of distinct creative variations. Present when details are on |
Notes on the data: advertiserId and creativeId are stable IDs you can dedupe and re-query on. adUrl is permanent. Image URLs under tpc.googlesyndication.com/archive/ are long-lived archive copies of the creative. Video creatives are represented by their previewUrl render link and their run dates; the raw video file is not returned.
๐ Examples
Get all of Nike's ads worldwide
{ "queries": ["nike.com"], "maxItems": 500 }
Pull only a competitor's video ads in the US
{ "queries": ["Airbnb"], "region": "US", "adFormat": "video", "maxItems": 100 }
Track several rivals in one run
{ "queries": ["nike.com", "adidas.com", "puma.com"], "maxItems": 1000 }
Audit one advertiser by ID with full detail
{ "queries": ["AR16735076323512287233"], "includeDetails": true, "maxItems": 300 }
Fast, list-only sweep of a brand's German ads
{ "queries": ["Zalando"], "region": "DE", "includeDetails": false, "maxItems": 2000 }
๐ค Copy to your AI assistant
Paste this into Claude, ChatGPT, or Cursor to give it full context about this scraper:
You have access to the Google Ads Transparency Scraper on Apify: silentflow/google-ads-transparency-scraperInput schema:- queries (required, array of strings): brand name, domain, advertiser ID (AR...), or Transparency Center URL- region (string, default "anywhere"): ISO-2 country code (US, GB, DE, FR, ...) or "anywhere"- adFormat (string, default "all"): one of all | text | image | video- maxItems (integer, default 100): total ads to return across all queries- includeDetails (boolean, default true): fetch per-country reach and creative variationsOutput per ad (14 fields):- query (string), advertiserId (string), advertiserName (string), creativeId (string)- format (string: text|image|video), domain (string), adUrl (string), previewUrl (string)- firstShown (string RFC3339), lastShown (string RFC3339)- imageUrls (string[]), regionStats (array of {regionCode, lastShownDate}), variationsCount (int)Use apify-client for Python or JS. No login or API key needed for the target site.
๐ป Integrations
Build a competitor creative tracker (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/google-ads-transparency-scraper").call(input={"queries": ["nike.com", "adidas.com"],"adFormat": "video","maxItems": 500,})# Newest live video ads firstads = list(client.dataset(run["defaultDatasetId"]).iterate_items())ads.sort(key=lambda a: a.get("lastShown", ""), reverse=True)for a in ads[:20]:print(a["advertiserName"], a["firstShown"], a["adUrl"])
Flag new ads from the last 24 hours (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('silentflow/google-ads-transparency-scraper').call({queries: ['Spotify'],region: 'US',maxItems: 300,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const cutoff = new Date(Date.now() - 24 * 3600 * 1000).toISOString();const fresh = items.filter((a) => a.firstShown > cutoff);console.log(`${fresh.length} new ads in the last 24h`);
Export to CSV for a spreadsheet
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN
๐ Performance
| Metric | Value |
|---|---|
| Speed | Roughly a few hundred ads per minute with details on, faster with details off |
| Reliability | Direct access to Google's public ad library, no browser to stall |
| Input types | Brand name, domain, advertiser ID, Transparency Center URL |
| Countries | 30+ selectable, or all at once |
| Formats | Text, image, video |
| Freshness | Live, fetched at run time, no caching |
๐พ Data export
Results are stored in a standard Apify dataset. Download from the dataset tab as JSON, CSV, Excel, HTML, RSS, or XML, or pull them programmatically:
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json&token=YOUR_TOKEN
Every record is flat and typed, so it drops straight into a spreadsheet, a BI tool, or a database.
๐ก Tips for best results
- Use a domain to capture a whole brand. Big brands advertise through several legal entities (a retail arm, regional offices, an agency). A domain like
nike.comaggregates ads across all of them, while a brand name resolves to the single largest advertiser. - Use an advertiser ID for precision. When you already know the exact advertiser, pass its
AR...ID to skip name matching entirely. - Leave
regionon "Anywhere" for a full audit, then re-run per country to see local variations. - Turn
includeDetailsoff for large sweeps when you only need the ad list, dates, and preview images. Turn it on when you need per-country reach. - Raise
maxItemsdeliberately. It is the total across all entries, in the order you list them, so put your priority advertisers first.
โ FAQ
What exactly does this scraper extract? Public ads from the Google Ads Transparency Center: the creative (text, image, or video), advertiser name and ID, ad format, first-seen and last-seen dates, a permanent link to the ad, image URLs, and per-country reach.
How do I find an advertiser?
Four ways, all in the queries field: a brand name (Nike), a website domain (nike.com), an advertiser ID (AR16735076323512287233), or a full Transparency Center URL. The scraper resolves each one for you.
Do I need a Google account or API key? No. The Transparency Center is a public library. No login, no API key, no cookies.
How fresh is the data? Live. Every run queries Google directly at run time, so you see the ads that are running right now, with dates current to the day.
Can I scrape more than one advertiser at once?
Yes. Put several entries in queries and you get one combined dataset. Duplicates are removed automatically across entries.
Can I get the raw video file for video ads?
Not directly. Video creatives are returned with their preview render link (previewUrl), their run dates, and per-country reach. Google generates the underlying video stream with short-lived signed links that are not part of the structured output, so the scraper returns the stable preview link instead.
Why is domain sometimes empty?
Google only attaches a domain to some ads. When it is present it is included; when Google does not list one, the field is omitted rather than guessed.
Does the region filter change which countries appear in regionStats?
The region input filters which ads are returned. regionStats then lists every country each returned ad was shown in, which can include more countries than the one you filtered by.
What is the Google Ads Transparency Center? It is Google's public library, launched in 2023, showing ads served across Google Search, YouTube, Display, and Shopping. It exists so anyone can see who is advertising and what they are running, in over 50 countries.
Is there a limit on how many ads I can pull?
No fixed limit. maxItems is the cap you set; large advertisers can return thousands of ads per run.
โ๏ธ Legal
This Actor extracts publicly available data from the Google Ads Transparency Center. It does not bypass any login, paywall, or CAPTCHA. Users are responsible for complying with Google's terms of service and applicable data protection laws (GDPR, CCPA, and PIPL where relevant). Advertiser names can constitute personal data for sole traders and small businesses; handle the output accordingly. The data returned is informational; verify accuracy for regulated use cases.
๐ Related scrapers
Building competitive and ad intelligence pipelines? Pair this with our other scrapers for a complete view:
- Meta Ad Library Scraper, for Facebook and Instagram ads
- TikTok and TikTok Shop scrapers, for short-video ad and product research
Browse the full set on silentflow on Apify.
๐ฌ Support
Need something this scraper doesn't do yet? We ship features fast.
- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing questions? Check the Monetization tab on the actor page
Response time: usually under 24 hours.
Check out our other scrapers: silentflow on Apify