Google Ads Transparency Scraper
Pricing
from $0.10 / 1,000 ads
Google Ads Transparency Scraper
Scrape ads from the Google Ads Transparency Center by domain, advertiser name, advertiser ID or URL. Get creatives, formats, first/last shown dates, regions, platforms and impressions. HTTP-only, no login. $0.10 per 1,000 ads.
Pricing
from $0.10 / 1,000 ads
Rating
0.0
(0)
Developer
Fer
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape public Google ads by domain, advertiser name, advertiser ID, or Transparency Center URL — HTTP only, no browser, no login.
This Actor reads the same public JSON-RPC endpoints that Google Ads Transparency Center uses in the browser. Give it nike.com, Nike, Inc., an AR… advertiser ID, or a pasted Transparency Center link and it returns the creatives that advertiser is running: format, first/last shown dates, regions, preview image, and a link back to the official transparency page.
Empty input is valid. A run with {} searches nike.com and stores 20 ads so Apify Store automated tests succeed.
What does Google Ads Transparency Scraper do?
It collects one dataset row per ad creative from Google's public ad library:
- Advertiser ID (
AR…) and display name - Creative ID (
CR…) - Format:
text,image, orvideo - First shown and last shown dates (ISO 8601)
- Approximate days the ad has been active
- Preview / image URL and the official transparency page URL
- Optional add-on (
includeAdDetails): per-country impression ranges, platforms, headline, body copy, and landing URL when Google publishes them
All of this is public data. The Actor never logs into Google and never opens a browser.
Why scrape the Google Ads Transparency Center?
- Competitor ad research — see which creatives a brand is still spending on, and which ones disappeared
- Ad spy for agencies — export a client's or rival's Google/YouTube/Display library to CSV or Excel
- Brand safety and political ads — archive who ran what, where, and for how long
- Creative analysis — pull headlines and landing URLs (when published) without clicking through thousands of cards
Google's UI is an infinite scroll with no export button. This Actor is the download button.
What data can it extract?
| Field | Description |
|---|---|
creativeId | Google creative ID (CR…) |
advertiserId / advertiserName | Advertiser ID (AR…) and public name |
domain | Advertised domain when returned by search |
format / formatCode | text, image, or video plus the raw RPC code |
firstShown / lastShown | ISO timestamps |
shownForDays | Approximate active span |
transparencyUrl | Official Ads Transparency Center page |
previewUrl / imageUrl / videoUrl | Creative assets |
headline / body / destinationUrl | Ad copy and landing URL (list overlay or details) |
regions / regionsShown | Countries and optional impression ranges |
platforms | Search, YouTube, Display, … when published |
detailsIncluded | Whether the optional details add-on succeeded |
How to scrape Google Ads Transparency Center
- Open the Actor in Apify Console (or call it through the API).
- Leave the defaults to try
nike.com, or paste domains,AR…IDs, brand names, or Transparency Center URLs. - Optionally set a country (
US,DE,FR, …), a format, and a date window. - Turn on Fetch per-ad details only if you need impression ranges or extra copy — it costs one extra
ad-detailsevent per successful enrichment. - Run. Results land in the default dataset (JSON / CSV / Excel / table view).
How much will it cost?
Pricing is pay per result, with no Actor-start fee.
Store prices:
| Event | When it is charged | Price |
|---|---|---|
ad | One successful dataset row | $0.0001 ($0.10 / 1,000 ads) |
ad-details | Only if includeAdDetails actually added extra fields | $0.0004 ($0.40 / 1,000 ads) |
Empty searches, failed lookups, and advertisers with zero ads are not charged. If the run hits ACTOR_MAX_TOTAL_CHARGE_USD, the Actor stops cleanly, keeps the ads already saved, and exits successfully.
Compute cost stays tiny: the Actor is HTTP-only and defaults to 256 MB RAM. Live measurements from this repository (21 Oct 2026, no proxy):
| Run | Ads | HTTP requests | Body traffic | Wall time |
|---|---|---|---|---|
Default {} (nike.com, 20 ads) | 20 | 1 | 0.023 MB | ~3 s |
| One advertiser, 1,000 ads | 1,000 | 25 | 0.333 MB | 13.4 s |
| Per 1,000 list ads | 1,000 | 25 | 0.33 MB | — |
includeAdDetails adds one GetCreativeById RPC per ad (~3 KB). A content.js preview is fetched only when that RPC did not already return detail fields.
Apify Proxy is off by default — direct HTTP currently works better for list searches. If Google returns HTTP 302 /sorry/, the Actor enables proxy and retries; if the proxy is also blocked it retries without proxy / another IP.
Input
All fields are optional. Schema defaults make {} a valid, successful run.
{"domains": ["nike.com"],"maxAdsPerAdvertiser": 20}
Useful combinations:
{"advertiserIds": ["AR16735076323512287233"],"region": "US","format": "IMAGE","maxAdsPerAdvertiser": 100}
{"advertiserNames": ["Nike, Inc."],"includeAdDetails": true,"maxAdsPerAdvertiser": 10}
{"startUrls": [{ "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233" }]}
| Field | Default | Notes |
|---|---|---|
domains | empty input → ["nike.com"] | Prefill only; not injected when you send names, IDs, or URLs |
advertiserIds | [] | AR… IDs |
advertiserNames | [] | Resolved via SearchSuggestions |
startUrls | [] | Advertiser, creative, or search URLs |
region | ANYWHERE | ISO alpha-2 or ANYWHERE |
format | ALL | ALL / TEXT / IMAGE / VIDEO |
startDate / endDate | — | YYYY-MM-DD |
maxAdsPerAdvertiser | 20 | Per domain or advertiser |
maxTotalAds | 0 | 0 = no extra cap |
includeAdDetails | false | Extra RPC / preview decode |
proxyConfiguration | { useApifyProxy: false } | Auto-enabled on /sorry/; dropped again if proxy is also blocked |
Output
One flat JSON object per ad. Example (trimmed from a live nike.com run):
{"creativeId": "CR14775126100300267521","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","domain": "nike.com","format": "image","formatCode": 1,"firstShown": "2023-11-16T23:56:41.000Z","lastShown": "2026-10-21T16:03:07.000Z","shownForDays": 897,"region": "ANYWHERE","transparencyUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR14775126100300267521","previewUrl": "https://tpc.googlesyndication.com/archive/simgad/16121937908686408129","imageUrl": "https://tpc.googlesyndication.com/archive/simgad/16121937908686408129","matchedInput": "nike.com"}
Download the dataset as JSON, CSV, or Excel, or use the Overview table view (image, advertiser, format, dates, transparency link).
Tips
- Start with
maxAdsPerAdvertiser: 20to inspect the schema, then raise the cap. - Domain search returns every advertiser whose ads mention that domain (subsidiaries, media agencies, regional entities). Filter on
advertiserNamein the dataset if you only want the parent brand. includeAdDetailsis best-effort. Google hides impression ranges outside some EEA countries, and many image ads have no extractable copy.- Leave proxy off unless a run hits
/sorry/. The Actor will try Apify Proxy and then fall back to direct / another IP. If it is still blocked, retry later or switch the proxy group toRESIDENTIAL. - Deduplication is by
creativeIdacross the whole run.
FAQ
Does this need a Google account or API key?
No. It calls the same anonymous RPCs the public website uses.
Will an empty run work?
Yes. {} searches nike.com and stores up to 20 ads.
Why is an advertiser missing?
Some local businesses never run Google ads, or run them only in a country you filtered out. A zero-ad target is logged and not billed.
Is format filtering reliable?
Yes for the list RPC. Live checks on 2026-10-21 showed SearchCreatives field 4 = 1 image, 2 text, 3 video. The raw formatCode is always stored so you can remap if Google changes the enum.
Can I use this as an API?
Yes. Run the Actor through the Apify API and read defaultDatasetId, or add it to an integration.
Legality and disclaimer
This Actor collects publicly available information from the Google Ads Transparency Center. It is not affiliated with, endorsed by, or maintained by Google. You are responsible for how you use the data (including advertising-research and privacy rules that apply in your jurisdiction, such as GDPR if you combine results with personal data). Do not use the output to impersonate advertisers or to violate Google's terms.
Issues and API
Use the Issues tab on the Actor page for bugs and feature requests. Use the API tab for scheduled runs, webhooks, and code snippets.