Home › Guides › Google Ads Transparency Scraper

Google Ads Transparency Center data: a competitor's ads, copy, reach and targeting as JSON

Google publishes the ads every advertiser runs — on Search, YouTube, Maps, Play and Shopping — in the public Ads Transparency Center. The Google Ads Transparency Scraper turns that library into one row per ad: the ad text (read from the ad's picture by OCR when Google keeps only a picture), the image or preview, first and last shown dates, per-country impressions and platforms for the EEA and Turkey, the audience-targeting approach, the topic and the advertiser's legal name. No Google account, no API key, no browser.

Who it's for

What you get: one row per ad

GroupFields
AdvertiserName, legal name, advertiser ID, country, D-U-N-S number (where Google publishes it)
AdCreative ID, format (text, image, video), first shown, last shown, days shown, image or preview URL, Transparency Center link
Ad copyText lines in order, call to action, display URL, landing URL, YouTube video ID, Shopping product title, price and merchant, app details of app-install ads
Reach (EEA + Turkey)Impression range, impressions per platform, and per country: first and last shown, impression range, platform breakdown
TargetingDemographics, location, contextual signals, customer lists, topics of interest — each marked included, excluded, both, or unused
ClassificationGoogle's ad topic, product category (some Shopping ads), number of variations
StatusWhere the copy came from (the preview, OCR, or an empty archive picture), OCR confidence 0–100, a "new" flag in monitoring mode

A real row from a run on 2026-09-23 — query Decathlon, region France (trimmed):

{
  "advertiserName": "Decathlon France SASU",
  "advertiserLegalName": "Decathlon France SASU",
  "advertiserId": "AR15666691663760195585",
  "advertiserCountry": "FR",
  "creativeId": "CR18395479902410244097",
  "format": "TEXT",
  "firstShown": "2026-01-21T16:26:15.000Z",
  "lastShown": "2026-09-23T14:37:34.000Z",
  "daysShown": 233,
  "adTexts": ["DECATHLON - SUPPORT DE CADENAS DE CADRE DE VELO RING-LOCK - antivol - velo voyage - Decathlon"],
  "displayUrl": "Decathlon.fr",
  "isShoppingAd": true,
  "targeting": { "demographics": "UNUSED", "geoLocation": "INCLUDED_AND_EXCLUDED", "contextualSignals": "INCLUDED_AND_EXCLUDED", "customerLists": "UNUSED", "topicsOfInterest": "UNUSED" },
  "impressionsEeaTrLow": 6000,
  "impressionsEeaTrHigh": 7000,
  "regions": [
    { "countryCode": "FR", "countryName": "France", "firstShown": "2026-01-21", "lastShown": "2026-09-23", "impressionsLow": 6000, "impressionsHigh": 7000 }
  ],
  "adCopyStatus": "ok"
}

Input: domains, brands or advertiser IDs

A query can be a domain (nike.com), a brand name (Nike), an advertiser ID (AR…) or a Transparency Center URL. Region, format, platform and dates are applied by Google itself, so a filtered run does not download ads it then throws away.

InputWhat it does
queriesDomains, brand names, AR… advertiser IDs or Transparency Center URLs
regionOnly ads shown in this country (243 countries); default anywhere
adFormat · platformText (includes Shopping product ads), image or video · Search, YouTube, Maps, Play or Shopping
datePresetAds shown in the last 7, 30, 90 or 365 days, or a custom range
maxAdsPerQueryStop after this many ads per query, up to 100,000 (default 100)
includeDetails · includeAdCopyRegions, impressions, platforms, targeting and topic · text lines, CTA, display URL, YouTube ID, Shopping title, price and merchant (one extra request per ad each)
ocrImageAdsRead the text of ads Google keeps only as a picture (on by default; English, German, French, Spanish, Portuguese, Italian, Dutch, Polish, Turkish)
onlyNewAds + monitorNameMonitoring: only ads this monitor has not returned before

A brand's ads in France, with per-country reach:

{ "queries": ["Decathlon"], "region": "FR", "maxAdsPerQuery": 100 }

A weekly monitor of new ads from two competitors (schedule it weekly):

{ "queries": ["hubspot.com", "salesforce.com"], "onlyNewAds": true, "monitorName": "crm-competitors", "datePreset": "last7", "maxAdsPerQuery": 2000 }

Example use cases

Measured data quality

Share of ads with the field filled, measured on the Apify platform (runs of nike.com, Decathlon and hubspot.com, plus 50 YouTube video ads of nike.com). Several fields depend a lot on the advertiser:

FieldFilled
Advertiser name and ID, creative ID, format, first / last shown, days shown, countries100%
Advertiser legal name99–100% (16% in the YouTube sample, where 40 of 50 ads ran through a media agency's account)
Impressions and platforms per country (EEA and Turkey)70–82% (ads running there for about three months or more: 99%; newer ads: 0%)
Targeting approach77–86%
Ad text lines, OCR on85% to 100 of 100, depending on the advertiser
YouTube video ID (YouTube video ads)88%
Topic38–55%
D-U-N-S number7–14%

No test run returned a duplicate creativeId per query (3,100 ads checked). The five targeting categories and the Shopping and YouTube platform codes were cross-checked, ad by ad, against Google's public BigQuery dataset of the Transparency Center.

Honest limits

Speed

On the Apify platform, 40 nike.com ads took 24 seconds and 600 ads of nike.com and Decathlon took 6.6 to 8 minutes. Advertisers whose ads are mostly pictures run at roughly 20 ads per minute with OCR (100 nike.com ads, 60 of them pictures, in 4.5 minutes); turning ocrImageAds off brings the speed back. With the default one-hour timeout and details and ad copy on, a run delivers roughly 4,000–5,000 ads. A proxy is not needed: if Google rate-limits the run, it switches to Apify residential proxy by itself.

Pricing

Pay per event: one ad event for every delivered ad, plus ad-detail when details were returned and ad-copy when text or other copy fields were read, from the preview or by OCR. Pictures with no readable text are not charged as ad copy, queries that return no ads and error rows are not charged, and an advertiser given twice in one run is run once. Current prices are on the actor's Pricing tab on Apify.

Try it on a competitor: paste a domain such as nike.com and get its ads with text, dates, EEA reach and targeting — exportable to JSON, CSV or Excel.

Open the Google Ads Transparency Scraper →

Batch scraper or real-time API?

This scraper is built for batch jobs, schedules and monitoring. When an app or an AI agent needs one lookup at a time, the same code runs as an always-on HTTP endpoint — see the Google Ads Transparency API guide. For advertising data beyond Google, the LinkedIn company data guide covers LinkedIn's public Ad Library, and the firmographics & competitive intelligence guide shows how to profile the companies behind the ads. All Google datasets are listed in the Google data section.

Frequently asked questions

Do I need a Google account or an API key?

No. The scraper reads the same public data as the Ads Transparency Center website, with no Google account, no API key and no browser. It is not affiliated with Google.

Why are impressions empty for some ads?

Google publishes impression ranges only for ads shown in the EEA and Turkey, and only once an ad has run there for about three months. US-only ads and new ads have none. Rows for countries outside the EEA and Turkey list the country and its last-shown date, with the impression range set to null.

Why do some ads have no text?

Google archives many ads only as a picture. With OCR on (the default), the text is read from the picture and the row is marked adCopyStatus: "ocr". Rows still without text are pictures that hold no ad (image-placeholder), pictures without readable text, or ads in non-Latin scripts.

Can I get only new ads?

Yes. Turn on onlyNewAds and give the monitor a name. Each run returns only ads that monitor has not returned before and remembers them, also when a run is aborted. A run checks up to 10,000 listed ads per query; pair it with a date preset such as last7.

Does the data contain personal data?

The data describes advertisers and their ads, not the people who saw them. Advertiser names are published by Google and can be the names of individuals such as sole traders; treat those as personal data where GDPR or similar laws apply.

Google Ads Transparency Scraper — pay per event, no Google account, no API key.

Get competitor ads on Apify →