Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Google Ads Transparency Scraper

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

SilentFlow

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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

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

TeamWhat they build
Performance marketingA live board of every competitor creative, refreshed weekly, to benchmark angles and offers
Creative strategyA swipe file of a rival's top image and video ads, sorted by how long each has stayed live
Brand & PRMonitoring for a brand's own ads across countries to catch unauthorized resellers running paid traffic on its name
Market researchA map of which advertisers dominate a category by number of active ads per country
AgenciesPre-pitch audits showing a prospect exactly what their competitors are advertising right now
EcommerceTracking a competitor's promotional calendar by watching when new ads appear and old ones disappear

๐Ÿ“ฅ Input parameters

ParameterTypeDescription
queriesarrayOne entry per advertiser. Brand name, domain, advertiser ID, or Transparency Center URL. Required.
regionstringCountry to filter ads by (ISO code) or anywhere. Default anywhere.
adFormatstringall, text, image, or video. Default all.
maxItemsintegerMaximum total ads to return across all entries. Default 100.
includeDetailsbooleanFetch 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):

FieldTypeDescription
querystringThe input entry that produced this ad
advertiserIdstringStable Google advertiser ID (starts with AR)
advertiserNamestringVerified advertiser name
creativeIdstringStable creative ID (starts with CR)
formatstringtext, image, or video
domainstringAdvertiser website, when Google lists one
adUrlstringPermanent deep link to the creative on the Transparency Center
previewUrlstringRendered preview link for the creative

Timing (2):

FieldTypeDescription
firstShownstringFirst date the ad was seen, ISO 8601 (RFC 3339) UTC
lastShownstringMost recent date the ad was seen, ISO 8601 (RFC 3339) UTC

Creative & reach (4):

FieldTypeDescription
imageUrlsarrayCreative image URLs (banners, and the rendered image of text ads)
regionStatsarrayPer-country reach. Each entry has regionCode (ISO-2) and lastShownDate (YYYY-MM-DD). Present when details are on
variationsCountintegerNumber 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-scraper
Input 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 variations
Output 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 ApifyClient
client = 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 first
ads = 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

MetricValue
SpeedRoughly a few hundred ads per minute with details on, faster with details off
ReliabilityDirect access to Google's public ad library, no browser to stall
Input typesBrand name, domain, advertiser ID, Transparency Center URL
Countries30+ selectable, or all at once
FormatsText, image, video
FreshnessLive, 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.com aggregates 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 region on "Anywhere" for a full audit, then re-run per country to see local variations.
  • Turn includeDetails off for large sweeps when you only need the ad list, dates, and preview images. Turn it on when you need per-country reach.
  • Raise maxItems deliberately. 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.

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.

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