Google Ads Transparency Scraper — Advertiser Ads & Creatives
Pricing
from $1.00 / 1,000 ad creatives
Google Ads Transparency Scraper — Advertiser Ads & Creatives
Scrape every ad creative an advertiser runs on Google from the Ads Transparency Center. Resolve by advertiser name, ID, or domain; get image and HTML5 creatives with first/last-shown dates, region filtering, and full pagination — no 100-item cap. Cookieless, no login, no CAPTCHA.
Pricing
from $1.00 / 1,000 ad creatives
Rating
0.0
(0)
Developer
Esteban Ortega
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape every ad creative an advertiser runs on Google straight from the Google Ads Transparency Center (adstransparency.google.com). Give it an advertiser name, an advertiser ID, or a domain, and get back a clean, structured list of that advertiser's image and HTML5 ad creatives — with first-shown / last-shown dates, region filtering, and full pagination (no hidden 100-item cap). Cookieless, no login, no CAPTCHA.
Built for competitive-ad researchers, performance marketers, brand-safety teams, and AI agents that need an advertiser's live ad library without the Google Ads Transparency Center's clunky UI.
What it does
- Resolves an advertiser three ways. Look up by advertiser name ("Verizon"), by exact advertiser ID (
AR11385763688137883649), or by domain ("verizon.com"). No fuzzy guesswork — the mode is explicit, and ambiguous names return disambiguation candidates you can pin. - Lists every creative with full token pagination. Most scrapers silently stop at 100 results. This one follows Google's pagination token to the end (or your chosen cap), so you get the whole ad library — deduped by creative ID and guarded against stuck pagination tokens and runaway page loops.
- Region filtering that actually works. Pass a 2-letter country code (US, GB, CA…; UK/USA are aliased) to see only ads shown in that country. Uses Google's real geo IDs, validated against the live site. An unknown code fails fast with one error record instead of silently scraping the whole world.
- Optional per-region enrichment. Turn on creative enrichment to add every render variant and per-country last-shown dates for each creative.
- Optional asset rehosting. Google's
simgadimage and preview URLs expire fast — enabledownloadAssetsto persist the actual creative bytes in your run's key-value store. - Loud on anomalies, never silently empty. If Google changes its internal payload shape or soft-blocks a request (the #1 reason competing scrapers return nothing), this actor surfaces an explicit error or notice record — including mid-pagination truncation (
partial: trueon the advertiser summary) — instead of pretending the result is a complete zero. A genuinely dormant advertiser (Google's own counts say 0 recent and 0 lifetime ads) is reported as a clean zero, not a false alarm. - Streaming results. Every page of creatives is pushed to the dataset the moment it is scraped, so a timeout or migration late in a long run still leaves everything already fetched in your dataset.
Output fields
Each creative is one dataset item (type: "creative"). Every run also emits one advertiser summary record per advertiser, plus advertiser_candidate / domain_candidate records for disambiguation. At most one error or notice record is emitted per advertiser target (and failures never consume your maxCreativesPerAdvertiser budget). All records share the identical key set, so exports stay rectangular.
Sample creative output item:
{"type": "creative","scraped_at": "2026-07-23T05:10:00+00:00","advertiser_id": "AR11385763688137883649","advertiser_name": "Verizon Value, Inc","creative_id": "CR15308872423592427521","format": "image","format_enum": 1,"image_url": "https://tpc.googlesyndication.com/archive/simgad/6369736585639432871","preview_url": null,"first_shown": "2025-09-22T07:00:00+00:00","last_shown": "2026-07-23T04:14:25+00:00","region": "US","regions": [],"variants": [],"deep_link": "https://adstransparency.google.com/advertiser/AR11385763688137883649/creative/CR15308872423592427521?region=us","asset_kvs_key": null,"error": null}
Sample advertiser summary item:
{"type": "advertiser","advertiser_id": "AR11385763688137883649","advertiser_name": "Verizon Value, Inc","legal_name": "Verizon Value, Inc","country": "US","verified": true,"total_creatives": 500,"recent_ads": 500,"lifetime_ads": 600,"partial": false,"region": "US"}
total_creatives— the number of creatives actually scraped in this run (after your cap / region filter / any truncation).recent_ads/lifetime_ads— Google's own reported totals for the advertiser (from the search results page, falling back to the suggestion service), so you can tell a capped scrape from a complete one.partial—trueon the advertiser summary when pagination ended abnormally (soft-block, stuck token, page failure) and the creative list may be incomplete; a matchingerrorrecord explains where it was truncated.format—image,html5, orunknown(raw enum kept informat_enum).image_url— directsimgadimage URL (static image ads).preview_url— Googledisplayads-formatspreview URL (HTML5 / responsive ads).first_shown/last_shown— ISO-8601 UTC, converted from Google's unix timestamps.regions— populated only withenrichCreativeDetail:[{geo_id, country, last_shown}]per country.variants— populated only withenrichCreativeDetail: every render variant of the creative.deep_link— direct link to the creative in the Ads Transparency Center.asset_kvs_key— populated only withdownloadAssets: the key-value-store key holding the rehosted bytes.
Input
| Field | Type | Description |
|---|---|---|
advertiserName | string | Advertiser to resolve by name (e.g. Verizon). Best match is scraped; other matches become advertiser_candidate records. Defaults to Verizon when no target field is provided at all. |
advertiserId | string | Exact AR… advertiser ID. Most deterministic input; takes priority over name/domain. |
domain | string | Website domain (e.g. verizon.com). Lowest priority. |
region | string | Optional 2-letter ISO country code (US, GB, CA…; UK/USA aliased to GB/US) to filter creatives by where they ran. Empty = all regions. Any other unknown code fails fast with one error record — never an accidental all-regions scrape. |
maxCreativesPerAdvertiser | integer | Cap on creatives per advertiser (0 = no cap — full pagination). Bounds cost on very large advertisers. |
enrichCreativeDetail | boolean | One extra request per creative to add per-region dates + all variants. Slower; no extra dataset items. |
includeAdvertiserDetail | boolean | One request per advertiser for legal name / country / verified. Default on. |
downloadAssets | boolean | Download + rehost each creative's bytes to the key-value store (URLs expire). |
requestDelaySeconds | number | Politeness delay between requests (default 1s). Raise for large or enrichment-heavy crawls. |
proxyConfiguration | object | Optional proxies. Works cookieless from datacenter IPs at modest volume. |
Use cases
- Competitive ad intelligence — pull a competitor's entire live creative library and track how it changes week over week.
- Creative research / swipe files — collect every image and HTML5 ad a brand is running, by country.
- Brand safety & compliance — audit which ads an advertiser is currently showing in a given region.
- Ad-tech & agency reporting — feed an advertiser's ad inventory into dashboards with stable, rectangular fields.
- AI agents — a deterministic "list this advertiser's Google ads" tool with explicit input modes and clean JSON.
FAQ
How do I scrape Google Ads Transparency Center without an API?
Google doesn't offer a public Ads Transparency Center API. This actor talks to the same internal endpoints the website itself uses, cookieless and without a browser, and returns structured JSON — so you don't have to reverse-engineer anything.
How do I find an advertiser's ID?
Search by name or domain and read the advertiser / advertiser_candidate records — each carries the AR… ID. Or copy it from an adstransparency.google.com/advertiser/AR… URL. Pinning the ID is the most reliable way to run repeatedly.
Why do some scrapers return an empty result for a busy advertiser?
Google periodically changes the internal request payload shape. Scrapers that copied an old payload then silently receive {} and report zero ads. This actor mirrors the current live payload exactly and never swallows an unexpected empty response. An empty response is genuinely ambiguous, so the actor classifies it honestly: if Google's own suggestion counts say the advertiser has 0 recent and 0 lifetime ads, the zero is reported as a clean result; otherwise you get one clear error record stating that the advertiser may have no live ads or Google changed the payload / soft-blocked the request. On a region-filtered run an empty first page gets a cautious notice record ("zero ads in this region OR drift — cross-check without the region filter"), and an empty response mid-pagination marks the result partial instead of pretending it is complete.
Can I get all of an advertiser's ads, not just the first 100?
Yes. Leave maxCreativesPerAdvertiser at 0 and the actor follows Google's pagination token to the end.
Why are the image URLs sometimes dead when I open them later?
Google's simgad and preview URLs expire quickly. Enable downloadAssets to rehost the actual bytes into your run's key-value store, and use asset_kvs_key.
Can I filter ads by country?
Yes — set region to a 2-letter ISO code. The actor maps it to Google's geo ID and filters server-side.
Pricing
This actor bills per result (pay-per-event, one charge per dataset item). Each creative, each advertiser summary, and each candidate record is one item. Error/notice records are capped at one per advertiser target, and failed requests never consume your maxCreativesPerAdvertiser budget — the cap counts only real, deduplicated creatives. To control cost on large advertisers, set maxCreativesPerAdvertiser. Enrichment flags (enrichCreativeDetail, includeAdvertiserDetail, downloadAssets) add requests but not extra dataset items.
A note on data source and terms
This actor reads public ad-transparency data that Google itself publishes for accountability. The endpoints are unauthenticated and require no login or terms acceptance. Google's general Terms of Service broadly discourage automated access to its products, so treat large-scale or aggressive use as a business/legal judgment call: keep volume modest, use the built-in delays, and consider residential proxies for heavy crawls. The actor never attempts CAPTCHA or WAF evasion. You are responsible for your own use of the data.