Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Pricing

from $1.05 / 1,000 results

Go to Apify Store
Google Ads Transparency Scraper

Google Ads Transparency Scraper

Every Google ad an advertiser or website runs, from the Ads Transparency Center: ad text, images, YouTube video ids, first/last shown dates, regions, EU impressions, who paid and topic. Search by advertiser name, id or domain; filter by country, format and dates; monitor new ads.

Pricing

from $1.05 / 1,000 results

Rating

0.0

(0)

Developer

Fetch Foundry

Fetch Foundry

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Security

Limited permissions

Share

Google Ads Transparency Scraper — Competitor Ads, Ad Text, Images & Videos

Get every Google ad an advertiser or website runs from Google's Ads Transparency Center: the actual ad text, images, YouTube video links, first and last shown dates, the countries where each ad ran, EU impression ranges, who paid for it and its topic.

  • Search by advertiser name, advertiser id or Transparency Center URL, or by website domain.
  • Filter by country shown, format (image, text, video) and date range.
  • Monitor competitors: with onlyNewAds, a scheduled run returns only ads you have not seen before.

One row per ad creative. Name matching, totals and anything that went wrong are in a separate run report, so the dataset stays clean.

Quick start

{
"advertisers": ["Nike, Inc."],
"domains": ["nike.com"],
"region": "US",
"maxAdsPerTarget": 200
}

On 2026-10-10, 1,004 ads with full details and ad text took 5½ minutes in one run.

Output

Each row is one ad creative. Below is a real row (a shopping ad shown 9–10 million times in Poland), with long preview URLs shortened:

{
"creativeId": "CR16502104412475359233",
"advertiserId": "AR18378488041124659201",
"advertiserName": "Nike Retail BV",
"format": "TEXT",
"adType": "PRODUCT_LISTING_AD",
"firstShown": "2021-10-25T07:00:00+00:00",
"lastShown": "2026-10-10T09:32:17+00:00",
"daysShown": 1772,
"domain": null,
"imageUrl": null,
"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&...",
"videoId": null,
"videoUrl": null,
"adText": "Plecak Jordan Paris Saint-Germain (27 l) - Czerń - Rozmiar: JEDEN | Nike Oficjalny",
"adTextLines": [
"Plecak Jordan Paris Saint-Germain (27 l) - Czerń - Rozmiar: JEDEN",
"Nike Oficjalny"
],
"creativeUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR16502104412475359233",
"advertiserUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201",
"variationCount": 2,
"paidBy": "Nike Retail BV",
"topic": "Luggage & Bags",
"regions": [
{"regionCode": "DE", "regionName": "Germany", "geoId": 2276, "firstShown": "2023-03-03",
"lastShown": "2024-04-11", "impressionsMin": null, "impressionsMax": 1000},
{"regionCode": "PL", "regionName": "Poland", "geoId": 2616, "firstShown": "2023-03-01",
"lastShown": "2026-10-10", "impressionsMin": 9000000, "impressionsMax": 10000000}
],
"regionCount": 6,
"impressionsMin": 9000000,
"impressionsMax": 10000000,
"impressionsNote": "EU/EEA only (Digital Services Act)",
"detailFetched": true,
"previewFetched": true,
"dataComplete": true,
"_input": "advertiser:AR18378488041124659201 [AR18378488041124659201]",
"_source": "google-ads-transparency",
"_scrapedAt": "2026-10-10T13:50:11.726792+00:00"
}

The run's key-value store also has RUN_REPORT, which shows:

  • which advertiser each name was matched to, and the other candidates;
  • the totals Google lists for each advertiser or domain;
  • why each one stopped;
  • errors, requests and retries;
  • whether the run switched to Residential proxy (see Reliability and cost).

Field reference

Ad identity

FieldMeaning
creativeId, advertiserId, advertiserNameGoogle's creative id (CR…), advertiser id (AR…) and the verified advertiser name.
creativeUrl, advertiserUrlThe ad's and the advertiser's pages in the Transparency Center.
domainThe website the ad points to, when Google lists one.

Format and type

FieldMeaning
formatGoogle's format: IMAGE, TEXT or VIDEO.
adTypeWhat the preview actually is (see the table below). Falls back to format when there is no preview.
adTypeWhat it is
SINGLE_ADSearch text ad: headline, display URL and description.
PRODUCT_LISTING_ADShopping ad: product title and store.
LOCAL_ADMaps / local ad: business name, address and description.
ADS_IN_AIXAd shown in Google's AI experiences. This is Google's own name for it.
IMAGEImage ad.
VIDEOVideo ad.

Dates

FieldMeaning
firstShown, lastShownWhen the ad was first and last shown anywhere (UTC).
daysShownNumber of days the ad ran.

Content

FieldMeaning
adText, adTextLinesThe visible text of the ad, read from its preview. Template slots such as "[Price]" and "
imageUrl, imageWidth, imageHeightThe image of image ads, with its size.
videoId, videoUrlThe YouTube video of video ads.
previewUrlGoogle's preview script for the ad.
variationCount, variationImageUrls, variationPreviewUrlsOther versions of the same creative (sizes, texts).

Who and where

FieldMeaning
paidByWho paid for the ad. Can differ from the advertiser (for example, a media agency).
topicGoogle's topic for the ad, in English.
regionsEvery country where the ad was shown: ISO code, name, first and last shown date, and impressions where published.
regionCountNumber of countries.

Impressions

FieldMeaning
impressionsMin, impressionsMax, impressionsNoteTotal impressions range. Google publishes impressions only for EU/EEA countries (Digital Services Act).

An impression range can be open on one side:

  • Only a maximum (for example 1,000) means "under 1,000".
  • Only a minimum (for example 10,000,000) means "10 million or more".

Run bookkeeping

FieldMeaning
detailFetched, previewFetchedWhether the details and the preview were read. If one failed, detailError or previewError says why.
dataCompletetrue when everything you asked for was collected for this ad.
_inputWhich advertiser or domain found this ad.
_source, _scrapedAtData source and scrape time (UTC).

Input

FieldNotes
advertisersNames, AR ids or Transparency Center URLs. A name is matched exactly first, ignoring case and "Inc." / "LLC" / "B.V."-style suffixes; every exact match is included. With no exact match, the similar name with the most ads is used. RUN_REPORT.advertiserResolution lists the candidates; use an AR id when you need one specific account.
domainsWebsite domains. URLs are fine; they are reduced to the domain.
region2-letter country code where the ads were shown. Empty means anywhere.
formatALL, IMAGE, TEXT or VIDEO. TEXT also covers shopping and local ads.
dateFrom, dateToYYYY-MM-DD. If you set only one, the other is filled in, because Google ignores half a range.
maxAdsPerTargetDefault 200; 0 = all. Big brands run thousands of creatives (Nike, Inc.: 8,000–9,000).
includeAdDetailsDefault on: regions, impressions, who paid, topic, variations. Costs one extra request per ad.
includeAdTextDefault on: ad text and YouTube id. Costs one extra request per text or video ad.
onlyNewAds, historyStoreNameSkip ads that earlier runs already delivered, for scheduled monitoring.
residentialFallbackDefault on. See Reliability and cost.
proxyConfigurationApify datacenter proxy by default.

Things Google does not tell you (and how this Actor handles them)

  • Totals are ranges, not counts. Google shows "8000–9000". They appear as totalAdsMin / totalAdsMax in the report.
  • Half a date range is silently ignored. With only a start date, Google returns every ad. The Actor always sends both ends.
  • Topic names come back in random languages (Spanish, Arabic, Chinese) unless English is requested explicitly. The Actor requests English.
  • Region-only searches return nothing. Google needs an advertiser or a domain, so the Actor asks for one.
  • One brand, many advertiser accounts. "Nike" is Nike, Inc., Nike Retail BV, NIKE GLOBAL TRADING B.V. and more. The report lists the candidates for each name, and a domain search covers all of them.

Reliability and cost

You pay per ad row. Platform usage is small but depends on whether Google throttles Apify's shared datacenter IPs. Both cases were measured on 2026-10-10:

SituationPlatform usage per 1,000 ads
Datacenter proxy not throttled≈ $0.03 (1,004 ads in 336 s)
Google throttling datacenter IPs; run switched to Residential≈ $0.35–0.46 (204 ads in 229 s for $0.093)

Google rate-limits busy IPs with HTTP 429. Within one hour, the same datacenter pool went from 0 throttled requests to every request throttled. To handle this:

  • The Actor paces its requests.
  • With residentialFallback on, after 3 throttled datacenter requests the rest of the run moves to Apify Residential.
  • RUN_REPORT shows the retries by endpoint and route (switchedToResidentialAfterRequests).

Without a proxy, a test run lost one target completely to rate limiting, so keep the default proxy on.

A run that reaches its timeout still delivers every ad collected so far, because rows are saved page by page.

Limits

  • Data covers what Google publishes in the Transparency Center. Spend, targeting audiences and click data are not public.
  • Impressions exist only for EU/EEA countries.
  • The ad text is read from Google's preview of the ad. Ads whose preview is a picture only (image ads) have imageUrl but no adText.