Google Ads Transparency Center Scraper: Ads, Text, EU Reach avatar

Google Ads Transparency Center Scraper: Ads, Text, EU Reach

Pricing

from $0.70 / 1,000 ads

Go to Apify Store
Google Ads Transparency Center Scraper: Ads, Text, EU Reach

Google Ads Transparency Center Scraper: Ads, Text, EU Reach

Every ad a brand runs on Google Search, YouTube, Shopping, Maps & Play. Search by brand, domain or advertiser ID. Ad copy (headline, description), YouTube IDs, EU impressions per country & platform, targeting, only-new-ads alerts. Hard spend limits, no login.

Pricing

from $0.70 / 1,000 ads

Rating

0.0

(0)

Developer

Nat | Data Tools

Nat | Data Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

See every ad a company runs on Google (Search, YouTube, Shopping, Maps and Play) as clean JSON, CSV or Excel. The data comes straight from Google's public Ads Transparency Center.

Search by brand name, website domain, advertiser ID or a pasted Transparency Center link and get:

  • the ad's format, first and last shown dates, days served and image URL;
  • with options switched on: the ad copy (headline, description, display URL), YouTube video ID or direct MP4 link, impressions per country and per platform (EU/EEA), targeting and every A/B variation.

No login, no cookies, no Google account.

You never pay for a failed, duplicate or empty result, and limits are hard limits. If you ask for 50 ads, you get and pay for at most 50 ads.

Why this Google Ads scraper

This ActorTypical Google Ads Transparency actors
Ad copyHeadline, description and display URL of search text ads (read with built-in OCR from Google's archive), copy of HTML/local/Shopping ads, YouTube ID or MP4 URL of video ads"Only metadata": a preview link, no text
ImpressionsPer country and per platform (Search, YouTube, Maps…) wherever Google publishes them (EU/EEA under the DSA), plus totals. impressionsAvailable tells you when Google publishes noneMissing, or one total
Limits and spendPer-target and total caps checked before an ad is fetched; the run's maximum cost is a hard cap; duplicates are never charged"Overcharged despite setting ad limits"
SearchBrand, domain, advertiser ID, links, several countries or all of the EU in one go, platform, format and date filtersOne query and one country per run, or links only
Ad checkOne cheap row per company: runs Google Ads? how many? still active? which accounts advertise this domain? Rows without ads are free$12 per 1,000 checks, or not offered
MonitoringOnly new ads since the last run, per monitor name. Known ads are skipped free, and scheduled checks cost a few requestsRe-download everything
Failed runsFail fast with a clear reason, not charged"Succeed" with 0 results
Price$1 per 1,000 ads, $1.50 with full details, $2.50 with ad text. No start fee, platform usage included$1.50–5 per 1,000 + start fees
AI agentsLenient input: "nike", "nike.com", "Germany", "eu", "last 30 days", "video" all workStrict enums
CompatibilityAccepts the input field names of the popular Transparency Center actors (see Migrating)—

What you can do

  • Competitor ad intelligence: every ad a competitor runs right now, on which Google platforms, since when, with the actual copy.
  • Creative and messaging research: build a swipe file of headlines, descriptions and videos; shownForDays and numServedDays show which ads keep running.
  • EU reach analysis: impressions ranges per country and per platform for any advertiser active in the EU/EEA.
  • Lead generation / ad check: give 1,000 domains and find out which companies advertise on Google, how much, and whether they are active this week.
  • Alerts: schedule a daily run with onlyNewAds and get a Slack or email message when a competitor launches a new ad.
  • AI agents: call it from Claude, ChatGPT or Cursor through Apify's AI integrations.
  • Your own stack: run it from the Apify API, the Python or JavaScript client, Make, Zapier, n8n, Google Sheets, Slack, webhooks or a schedule; export JSON, CSV or Excel.

Quick start

1. All ads of a company in one country

{ "queries": ["nike.com"], "region": ["US"], "maxAdsPerSearch": 200 }

queries accepts brand names (Nike), domains (nike.com), advertiser IDs (AR16735076323512287233) and Transparency Center links. A domain returns every advertiser account whose ads point at that website. For a brand name, the Actor checks the matching advertiser accounts and the brand's own domain, and picks the one with the most ads.

2. Full intelligence: copy, impressions, targeting

{
"advertiserIds": ["AR16735076323512287233"],
"region": ["EU"],
"platforms": ["YOUTUBE", "SEARCH"],
"datePreset": "last30",
"includeDetails": true,
"extractAdText": true,
"maxAdsPerSearch": 100
}
{ "queries": ["hellofresh.com"], "adFormat": "video", "extractAdText": true }

→ youtubeUrl for YouTube video ads, and videoUrl (direct MP4) and videoDurationSec for in-stream video ads.

4. Ad check for a list of companies

{ "resultType": "advertisers", "domains": ["hellofresh.com", "gousto.co.uk", "mindfulchef.com"], "region": ["GB"] }

→ One row per domain with hasAds, approxAdCountLow/High, latestAdLastShown, isActive, the formats seen and the advertiser accounts behind it. Rows without ads cost nothing.

5. Competitor monitoring (only new ads)

{ "queries": ["competitor.com"], "region": ["US", "GB"], "onlyNewAds": true, "monitorStoreName": "competitor-watch", "extractAdText": true }

Schedule it daily and connect a Slack, email or webhook integration:

  • The first run delivers everything (up to your limits) and becomes the baseline.
  • Each later run delivers only ads first shown since the previous run.
  • Ads that are already known are skipped for free.

Migrating from other Transparency Center actors

Paste your existing input. The following field names all work:

  • queries, domains, advertiserIds, startUrls, resultType (ads / advertisers)
  • region, platforms, adFormat, startDate, endDate
  • maxAdsPerSearch, maxAdvertisersPerQuery, includeDetails, onlyNewAds, monitorStoreName
  • the aliases searchQuery, maxResults, resultsLimit, skipDetails, platform, format, dateFrom, dateTo, monitorStateName, fetchCreativeDetails, ocr

Output fields keep the familiar names:

  • creativeId, advertiserId, advertiserName, format, firstShown, lastShown, shownForDays
  • imageUrl, previewUrl, googleCreativeId, googleCustomerId, adGroupId, adUrl / adLibraryUrl
  • variations, regionsShown, regionStats[].impressions.lowerBound/upperBound, surfaceServingStats, targeting

Output

Ad (resultType: "ads", with includeDetails and extractAdText; example, shortened)

{
"type": "ad",
"creativeId": "CR08027505669651300353",
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"format": "TEXT",
"firstShown": "2022-06-28T20:23:05.000Z",
"lastShown": "2026-06-23T17:58:30.000Z",
"shownForDays": 1456,
"numServedDays": 1454,
"lastShownDaysAgo": 115,
"previewType": "image",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/11154944259192068658",
"region": "DE",
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR08027505669651300353?region=DE",
"headline": "Nike Official Site - Worry Free Shopping",
"description": "Rock your game-ready look inspired by your favorite team. Explore new Nike fan gear now!",
"displayUrl": "www.nike.com/nike/soccer",
"adTextSource": "ocr",
"youtubeUrl": null,
"videoUrl": null,
"variationCount": 3,
"variations": [{ "type": "image", "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/…", "width": 380, "height": 219 }],
"regionStats": [
{
"regionCode": "DE",
"regionName": "Germany",
"firstShown": "2023-08-03",
"lastShown": "2023-10-06",
"impressions": { "lowerBound": 7000, "upperBound": 8000 },
"surfaceServingStats": [
{ "surfaceCode": "SEARCH", "surfaceName": "Google Search", "impressions": { "lowerBound": 4000, "upperBound": 5000 } },
{ "surfaceCode": "YOUTUBE", "surfaceName": "YouTube", "impressions": { "lowerBound": 0, "upperBound": 1000 } }
]
}
],
"impressionsTotal": { "lowerBound": 50000, "upperBound": 60000 },
"impressionsAvailable": true,
"targeting": {
"demographics": { "included": true, "excluded": true },
"geography": { "included": true, "excluded": true },
"contextual": { "included": true, "excluded": false },
"customerLists": { "included": false, "excluded": true }
},
"dataStatus": { "details": "ok", "text": "ok" },
"scrapedAt": "2026-10-17T10:21:16.720Z"
}

Values of dataStatus.details and dataStatus.text:

ValueMeaning
okThe data is there
not-requestedThe option was off
unavailableNothing readable, e.g. a plain image banner. Not charged
failedFetching it failed. Not charged
free-plan-limitThe free-plan cap on ad text was reached

Ad check row (resultType: "advertisers")

{
"type": "domain-summary",
"domain": "hellofresh.com",
"region": "US",
"hasAds": true,
"approxAdCountLow": 800,
"approxAdCountHigh": 900,
"latestAdLastShown": "2026-10-17T08:59:36.000Z",
"isActive": true,
"formatsInSample": ["TEXT", "IMAGE", "VIDEO"],
"advertisers": [
{ "advertiserId": "AR00930880903813529601", "name": "Grocery Delivery E-Services USA Inc.", "adsInSample": 96 },
{ "advertiserId": "AR17410177287600472065", "name": "HelloFresh SE", "adsInSample": 4 }
],
"searchUrl": "https://adstransparency.google.com/?domain=hellofresh.com&region=US"
}

Advertiser IDs give type: "advertiser-summary" rows instead. They add name, legalName, countryCode and verified.

Pricing

Pay per event. Platform usage and proxies are included: there is no start fee and no compute bill on top.

EventWhat it isPrice
AdOne ad creative: format, dates, days served, media URL, IDs, links$1.00 / 1,000
Ad detailsAdds variations, all countries with dates, EU impressions per country and platform, targeting$0.50 / 1,000
Ad textAdds headline, description, display URL, CTA, landing page, YouTube ID or MP4 URL. Charged only when text or a video was found$1.00 / 1,000
Advertiser checkOne advertiser or domain summary row that has ads$2.00 / 1,000

Lower rates apply automatically on higher Apify plans (ads down to $0.70 / 1,000).

Never charged:

  • failed or blocked targets;
  • duplicates (the same ad found through two searches);
  • ads already delivered by earlier monitoring runs;
  • details or text that failed or found nothing;
  • ad-check rows without ads.

Examples:

JobCost
1,000 ads of a competitor$1.00
The same 1,000 ads with copy, impressions and targeting$2.50
Ad check for 1,000 domains where 300 advertise$0.60
A daily monitor of 5 competitors that finds 10 new ads a day (with text)about $0.60 per month

The Actor checks your run's maximum cost before each ad and stops cleanly when it is reached, so you never pay more than you set.

Free Apify plan: up to 100 ads per run (25 of them with ad text) and 25 ad-check rows per run. This limit is set by the developer, not by Apify. Any paid plan removes it.

Good to know

  • Impressions are published by Google only where the law requires it. That means EU/EEA countries (Digital Services Act), and political ads in some regions. For US-only ads impressionsAvailable is false: Google publishes no numbers, it is not a scraping gap.
  • Platform filter works only for ads shown since 4 September 2023. Google did not record platforms before that.
  • Search text ads are archived by Google as images, so their copy is read with OCR. It is very accurate on these clean renders (~95 % line confidence). Occasional stray characters can appear in seller-rating lines, which go to extensions. Image banners are not OCR'd: dataStatus.text = "unavailable", not charged. The OCR model is English. Other Latin-script languages read well, but accents can be lost ("enthält" → "enthalt"), and non-Latin scripts are not supported yet. HTML, local, Shopping and video ads are not affected, because their copy is read from the preview, not from an image.
  • Speed: lists run at thousands of ads per minute. With extractAdText, OCR takes about 2–4 s per text ad at the default 1 GB memory. For large text jobs set the run's memory to 2–4 GB: it is faster and the price stays the same.
  • Brand names are ambiguous. "Nike" matches dozens of accounts, including individuals called Nike. For exact results use the domain (nike.com) or the advertiser ID. maxAdvertisersPerQuery controls how many accounts a brand name may expand to.
  • Counts are Google's approximate ranges (approxAdCountLow/High, impressions.lowerBound/upperBound), passed through unchanged.
  • Age-restricted ads are hidden by Google from signed-out visitors, so they are not included.
  • Media links:
    • imageUrl, youtubeUrl and videoUrl are public Google CDN links.
    • previewUrl is Google's preview script for HTML ads. Open the adUrl to see the ad rendered.
  • Topic: topicId is Google's internal topic code, shown on the ad page as "Topic (labeled by Google)". Google does not publish a name table.

The Ads Transparency Center is a public archive that Google publishes so that anyone can see who advertises and how. Regulators require parts of it, for example the EU Digital Services Act's ad repository.

This Actor:

  • reads the same public data a signed-out visitor sees;
  • does not log in and uses no cookies or accounts;
  • never solves, bypasses or fakes CAPTCHAs or bot checks (when Google asks for one, the request is retried later from a different address, and if that keeps happening the run stops);
  • paces its requests;
  • respects robots.txt (adstransparency.google.com publishes none).

Most data is about businesses. Some advertisers are individuals (sole traders), so treat advertiser names as potentially personal data under the GDPR, and keep only what you need. Check Google's terms for your own use case, and consult a lawyer for commercial redistribution.

FAQ

Which Google platforms are covered? Search, YouTube, Shopping, Maps and Play. Filter with platforms, or leave it empty for all.

Can I search by keyword, e.g. "running shoes"? No. The Transparency Center itself is searchable only by advertiser or website, so no tool can do this honestly. Use domains or advertiser names.

Where do I find an advertiser ID? Open the advertiser on adstransparency.google.com: the URL contains /advertiser/AR…. You can also paste the whole URL into queries or startUrls.

Does it download images and videos? It returns direct links (imageUrl, videoUrl, youtubeUrl) rather than copies. That is faster and cheaper for you, and the links are permanent Google CDN URLs.

How is this different from SerpApi? SerpApi bills per search, at about $25–75 per 1,000 searches, and returns no ad copy. Here 1,000 ads cost $1–2.50 including copy and EU impressions.

Can I use it from Claude, ChatGPT or Cursor? Yes, through Apify's AI integrations. Inputs like "nike.com", "eu", "video" and "last 30 days" are understood.

What happens when Google changes something? Each record carries dataStatus, and failures are listed in the run's STATISTICS record. A run where Google answers nothing fails loudly instead of returning an empty "success". Open an issue in the Issues tab: it is answered within 24 hours.