Google Ads Transparency Center Scraper - Reliable
Pricing
Pay per event
Google Ads Transparency Center Scraper - Reliable
Scrape Google Ads Transparency Center (Google Ads Library): ads by domain, advertiser name, ID or URL with format, first/last shown, countries, EU impressions, images, YouTube videos. Residential proxy, auto-retries.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Christian Machon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Get every Google ad an advertiser runs - by domain, advertiser name, advertiser ID or Transparency Center URL - without failed runs. For each ad you get the advertiser, ad ID, format (text / image / video), first and last shown dates, the countries it ran in (with impression ranges in the EU), the creative image, the YouTube video for video ads, and the ad copy where Google provides it as text.
Built for reliability: Google answers automated traffic with "unusual traffic" blocks very quickly. This Actor uses residential IPs, rotates sessions, retries with backoff and switches connection automatically. In our last 50 test runs (2,393 ads, 25+ countries, all formats) 50 of 50 runs succeeded and every run ended with a per-input status report. No run returned an empty dataset without saying why.
What can you use it for?
- Competitor ad research - see which ads a competitor runs now and since when, in which countries and in which formats.
- Creative inspiration and swipe files - download ad images and YouTube video links in bulk.
- Market entry and geo analysis - see where a brand advertises, with EU impression ranges.
- Agencies and brand safety - monitor a client's or an impersonator's ads on a schedule.
- Political and regulatory research - collect ads from verified advertisers.
- AI agents and automations - clean flat JSON for Make, Zapier, n8n, LangChain or the Apify MCP server.
Why this scraper?
| This Actor | |
|---|---|
| Blocks / "unusual traffic" | Residential IPs by default, a fresh session per block, exponential backoff, automatic fallback (residential -> datacenter -> direct, then cycling back) |
| Measured reliability | 50 / 50 test runs succeeded, from 1 ad to 400 ads per run |
| Inputs | Domain (nike.com), advertiser name (Netflix), advertiser ID (AR...) or any Transparency Center URL (advertiser, creative or ?domain= search, including its region) |
| Filters | Region (any country), format (text / image / video), last-shown date range |
| Empty results | Never silent: every input gets a status (SUCCEEDED, PARTIAL, NO_DATA, FAILED) and a reason. When a name doesn't match an advertiser, it falls back to the matching domain (Grammarly -> grammarly.com) or lists the closest advertisers |
| Honest output | Fixed columns on every row. Fields Google doesn't provide are null, never guessed (see "What data you get") |
| Speed and cost | Pure HTTP, no browser, 256 MB. About 1 s per fully enriched ad, or around 400 ads in 35 s with details off |
How to use it
- Click Try for free.
- Enter one or more search terms: domains, advertiser names,
AR...IDs or Transparency Center URLs. - Optionally choose a region, format and date range.
- Click Start, then download results as JSON, CSV or Excel, or fetch them via API.
Input example
{"searchTerms": ["nike.com", "Netflix", "AR16735076323512287233","https://adstransparency.google.com/?region=FR&domain=temu.com"],"region": "DE","format": "ALL","dateFrom": "2026-09-01","maxAdsPerSearch": 100,"includeAdDetails": true,"includeCreativeContent": true}
| Field | Description |
|---|---|
searchTerms | Domains, advertiser names, advertiser IDs (AR…) or Transparency Center URLs (up to 200). Anything that looks like a domain (including Booking.com) is searched as a domain. |
region | Country code (US, DE, …) or empty for anywhere. A region inside a pasted URL is used for that URL. |
format | ALL, TEXT, IMAGE or VIDEO. |
dateFrom / dateTo | Keep ads shown within this range (YYYY-MM-DD, inclusive). Results are newest first, so a dateFrom also makes runs faster. |
maxAdsPerSearch | Maximum ads per search term (default 100). |
advertiserNameMatch | For names: best (the matching advertiser with the most ads), all (every advertiser whose name contains the term, up to maxAdvertisersPerName) or exact. |
includeAdDetails | Per-ad lookup for countries, regional dates, impressions and all variation images (default on). Turn it off for fast ad lists. |
includeCreativeContent | Loads the ad preview to get YouTube video IDs and text/shopping ad copy (default on). |
proxyConfiguration, proxyFallback, maxRetries, maxConcurrency, failOnNoData | Reliability controls. The defaults are good. |
What data you get
One row per ad. These fill rates were measured over 1,883 fully enriched ads in our tests:
| Field | Filled | Notes |
|---|---|---|
advertiserId, advertiserName, creativeId, format, lastShown, adUrl, advertiserUrl | 100% | adUrl opens the ad in the Transparency Center |
firstShown | ~100% | ISO timestamp, globally |
regionCodes, regionCount, regions[] | 100% (details on) | Each region has its own firstShown/lastShown dates; per-region firstShown is sometimes null |
targetDomain | ~87% | Domain the advertiser is verified for/advertises |
imageUrl | ~77% | Image ads, text ads archived as images, shopping product images. imageWidth/imageHeight only for archived images |
variationImageUrls, variationCount | 57% / 100% | All image variations of the ad |
videoId, videoUrl | ~90% of video ads | YouTube video for video ads |
headline | ~24% overall | Mostly shopping product titles and some responsive search/local ads |
description, displayUrl | ~3% | Only for the rare text ads Google stores as text |
impressionsMin, impressionsMax | EU/EEA regions only | Google publishes impression ranges only for ads shown in the EU (DSA). null elsewhere |
searchInput, searchType, regionFilter, scrapedAt | Run metadata |
Important, applies to every scraper: Google archives most text (search) ads as an image of the ad, not as text. For those, the ad copy is visible in imageUrl but headline/description are null. We don't OCR or invent text. Dynamic keyword insertion ads may show templates such as {Keyword:Nike sandals} exactly as Google stores them.
Output example
{"searchInput": "tesla.com", "searchType": "domain", "regionFilter": "DE","advertiserId": "AR17828074650563772417", "advertiserName": "Tesla Inc.","creativeId": "CR18431297936794058753", "format": "VIDEO","firstShown": "2026-07-13T13:27:47.000Z", "lastShown": "2026-10-26T13:19:11.000Z","adUrl": "https://adstransparency.google.com/advertiser/AR17828074650563772417/creative/CR18431297936794058753?region=DE","targetDomain": "tesla.com","videoId": "TOnJMLfOZCs", "videoUrl": "https://www.youtube.com/watch?v=TOnJMLfOZCs","headline": null, "variationCount": 3,"regionCount": 1, "regionCodes": ["DE"],"regions": [{ "regionCode": "DE", "regionName": "Germany", "firstShown": "2026-07-13", "lastShown": "2026-10-26", "impressionsMin": 15000, "impressionsMax": 20000 }],"impressionsMin": 15000, "impressionsMax": 20000}
The Output tab has three views: Overview, Creatives and Reach (regions and impressions).
Run summary
Each run stores a summary in the key-value store record OUTPUT. It includes per-input status, the advertisers that were matched, Google's estimated total ad count, errors, notes (for example "no advertiser named X, searched domain x.com instead"), and connection stats (requests, retries, blocks, the connection that worked). Use it in pipelines to detect partial results.
Pricing
Pay per event, with everything included: details, video IDs, ad copy and residential proxy.
| Event | Price |
|---|---|
| Actor start | $0.003 per run |
| Ad returned | $0.0015 per ad (= $1.50 per 1,000 ads) |
You pay only for ads that are actually returned. There are no extra fees for details, assets or proxy. Example: 100 ads with full details costs $0.153. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.
FAQ
Is it legal? The Ads Transparency Center is a public Google service, and this Actor reads only what is publicly shown there. Make sure your use complies with Google's terms and the laws that apply to you.
Why is the ad text empty for most text ads? Google stores them as images (see above). The imageUrl shows the full ad.
Why no impressions for my US ads? Google publishes impression ranges only for EU/EEA regions.
Can I filter by platform (Search, YouTube, Shopping, Maps)? Not yet. Google's platform filter isn't reliable enough for us to expose honestly.
How do date filters work? An ad is kept if it was shown at any time within your range (its first-to-last-shown period overlaps it).
Name search found the wrong company? Use advertiserNameMatch: "all" to see every candidate, or paste the advertiser ID or URL from the Transparency Center.
Do I need a proxy? No. Residential proxy is used by default and included. You can supply your own proxies.
Limits
- Up to 10,000 ads per search term (Google's own result paging applies).
- Impression ranges: EU/EEA only. Ad copy as text: only where Google stores it as text.
- No platform or political-topic filter. Google's search by advertiser name is fuzzy, so prefer domains or IDs for exact results.