Google Ads Transparency Center Scraper
Pricing
from $0.80 / 1,000 ads
Google Ads Transparency Center Scraper
Get ads from Google Ads Transparency Center. In: domain, advertiser name/ID or URL; optional country, dates, format, platform. Out: one JSON row per ad with advertiser, creative ID, format, ad copy (OCR for screenshots), regions, first/last shown, URLs. $0.80 per 1,000 ads; 10 per input by default.
Pricing
from $0.80 / 1,000 ads
Rating
0.0
(0)
Developer
Krundle Freako
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Ads Transparency Center Scraper: Google Ads Spy & Ad Library API
See every Google ad your competitors run. This Actor pulls ads from the public Google Ads Transparency Center (Google's ad library) by advertiser name, advertiser ID (AR…), website domain or Transparency Center URL. You get clean JSON, CSV or Excel with ad copy, formats, regions, first/last shown dates, preview and landing URLs, and optional impression data.
Use it as a Google ads spy tool for competitor research, or call it as a Google Ads Transparency API from your own code, a scheduler, Make/n8n/Zapier, or AI agents over Apify's API and MCP server.
- ✅ Search text, image and video ads on Google Search, YouTube, Display, Maps, Play and Shopping
- ✅ Filter by country, date range, ad format and platform
- ✅ Real ad copy (headline, description, display URL, landing URL, YouTube video ID)
- ✅ Built-in OCR reads text from ads Google stores only as screenshots (no external API key needed)
- ✅ "Only new ads" monitoring mode for scheduled competitor tracking
- ✅ Optional details mode: per-country dates, impression ranges, variations, topic, audience criteria
- ✅ HTTP-only (no headless browser), so it's fast and cheap. Pay per ad: $0.80 per 1,000 ads
What can you use it for?
- Competitor ad research. List every Search, YouTube and display ad a competitor runs, where it runs and how long it has been live. Long-running ads are usually the ones that work.
- Ad copy and creative swipe files. Export headlines, descriptions and calls to action to a spreadsheet. Image and video creatives come with preview URLs.
- Agency pitches and audits. Pull a prospect's whole Google ad library in minutes.
- Brand protection. Find every advertiser whose ads point to your domain (
domains: ["yourbrand.com"]). - Ongoing monitoring. Schedule a daily or weekly run with only new ads and get alerts (Slack, email or a webhook) when a competitor launches new creatives.
- AI agents and data pipelines. Feed structured ad data to LLMs, Clay, Google Sheets, BigQuery, n8n, Make or Zapier.
How to scrape Google Ads Transparency Center
- Click Try for free and enter one or more domains (e.g.
nike.com), advertiser names (e.g.Nike), advertiser IDs (AR…), or paste Transparency Center URLs. - Optionally set regions, date range, ad format and platform, and the maximum number of ads.
- Click Start, then download results as JSON, CSV, Excel, XML or HTML, or read them through the API.
Input examples
By website domain. You get ads from every advertiser whose ads lead to that domain:
{"domains": ["nike.com"],"maxAdsPerSource": 100}
By advertiser ID, US-only YouTube video ads since September, with full details:
{"advertisers": ["AR16735076323512287233"],"regions": ["US"],"adFormat": "video","platform": "youtube","startDate": "2026-09-01","includeDetails": true,"maxAdsPerSource": 200}
By advertiser name. The name resolves to the matching advertiser with the most ads. Use "advertiserNameMatch": "all" to include every match:
{"advertisers": ["Tesla"],"adFormat": "text"}
By Transparency Center URL (advertiser, single creative, or domain search; a region parameter in the URL is respected):
{"startUrls": [{ "url": "https://adstransparency.google.com/advertiser/AR17828074650563772417?region=US" },{ "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR09478963857012555777" },{ "url": "https://adstransparency.google.com/?region=GB&domain=allbirds.com" }]}
Weekly competitor monitoring (schedule it; each run returns only ads not seen before):
{"domains": ["competitor-a.com", "competitor-b.com"],"onlyNew": true,"stateKey": "competitors-weekly","maxAdsPerSource": 0}
All input fields
| Field | Description |
|---|---|
advertisers | Advertiser names or AR… IDs. A name resolves to the matching advertiser with the most ads; set advertiserNameMatch: "all" to scrape every match. |
domains | Domains such as nike.com. Returns ads from all advertisers that point to that domain. |
startUrls | Transparency Center URLs: /advertiser/AR…, /advertiser/AR…/creative/CR…, or /?domain=…. |
regions | ISO country codes (US, GB, DE, …). Leave empty for anywhere. |
startDate / endDate | YYYY-MM-DD. Google supports roughly the last 12 months only. |
adFormat | all, text, image or video. |
platform | all, search, youtube, maps, play or shopping. |
maxAdsPerSource / maxAdsTotal | Result limits. maxAdsPerSource defaults to 10 over the API (50 in the Console form) so quick calls stay cheap; raise it for full exports. 0 means unlimited. |
includeDetails | Adds full creative details (one extra request per ad, billed as "ad with details"). |
extractText | Downloads the ad preview to extract the copy (on by default). |
ocrMode | textAdsWithoutText (default) runs OCR on text-ad screenshots that have no machine-readable copy. allImageAds also runs it on image/banner ads. off disables OCR. |
ocrLanguages | Tesseract language codes. Default ["eng"]. Add e.g. deu, fra, spa, kor, jpn, chi_sim for other languages. |
onlyNew / stateKey | Monitoring mode (see below). |
proxyConfiguration | Apify Proxy (on by default). Datacenter proxies are usually enough. |
maxConcurrency, requestIntervalMs, maxRetries | Politeness settings. The defaults are 2 parallel requests and at least 1.2 s between requests. |
Output
Each dataset item is one ad (creative). Real rows from test runs:
| advertiserName | advertiserId | creativeId | format | headline | displayUrl | textSource | firstShown | lastShown |
|---|---|---|---|---|---|---|---|---|
| Nike, Inc. | AR16735076323512287233 | CR03162399022933606401 | text | Nike® Official Site | nike.com | preview | 2023-11-16 | 2026-10-18 |
| Nike, Inc. | AR16735076323512287233 | CR09478963857012555777 | text | The Latest Nike® Socks - Shop Nike® Socks | www.nike.com/shop/socks | ocr | 2023-11-16 | 2026-10-18 |
| Tesla Inc. | AR17828074650563772417 | CR11505465921326022657 | video | Goodbye Gas Generators | tesla.com | preview | 2025-05-20 | 2026-10-18 |
| WPP MEDIA MANAGEMENT | AR06365026152670560257 | CR04320763977681338369 | image | Equípate con Nike Training | nike.com | preview | 2026-09-10 | 2026-10-18 |
A full item (shortened):
{"advertiserId": "AR17828074650563772417","advertiserName": "Tesla Inc.","creativeId": "CR11505465921326022657","format": "video","firstShown": "2025-05-20T23:02:23.540Z","lastShown": "2026-10-18T02:26:14.959Z","numDaysShown": 490,"regions": [],"adUrl": "https://adstransparency.google.com/advertiser/AR17828074650563772417/creative/CR11505465921326022657?region=anywhere","previewType": "javascript","previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...","imageUrl": null,"textSource": "preview","headline": "Goodbye Gas Generators","description": "No Noise, No Gas—Just Seamless Backup Power","longHeadline": "No Gas, No Maintenance, No Noise—Tesla Powerwall Keeps Your Home Running","displayUrl": "tesla.com","clickUrl": "https://www.tesla.com/solarpanels","videoId": "bkbfSJwdAjQ","videoUrl": "https://www.youtube.com/watch?v=bkbfSJwdAjQ","videoThumbnail": "https://i.ytimg.com/vi/bkbfSJwdAjQ/hqdefault.jpg","textSnippets": ["Goodbye Gas Generators", "No Noise, No Gas—Just Seamless Backup Power", "..."],"source": { "type": "advertiser", "input": "Tesla -> Tesla Inc. (AR17828074650563772417)" },"scrapedAt": "2026-10-18T02:55:40.000Z"}
For a text ad that exists only as a screenshot, OCR fills the same fields and adds ocrText and ocr (confidence, layout):
{"format": "text","imageUrl": "https://tpc.googlesyndication.com/archive/simgad/…","textSource": "ocr","headline": "Shop Nike Vaporfly 4 - Built For Race Day","description": "The work starts now. Chase race-day goals in Nike Vaporfly 4. Today's spring KMs become tomorrow's breakthrough performances. 30-Day Free Returns.","displayUrl": "www.nike.com/zoom/fly","ocr": { "confidence": 88, "layout": "search_text_ad", "meaningful": true, "businessName": "Nike" }}
With includeDetails: true, each item also gets a details object with variations, per-region stats and more:
"details": {"variationCount": 3,"regionStats": [{"regionCode": "PL", "regionName": "Poland","firstShown": "2023-03-03", "lastShown": "2026-09-28","impressions": { "lowerBound": null, "upperBound": 1000 },"platforms": [ { "platform": "google_search", "impressions": { "lowerBound": 0, "upperBound": 1000 } } ]}],"totals": { "firstShown": "2023-03-01", "lastShown": "2026-10-17", "impressions": { "lowerBound": 10000000, "upperBound": null } },"topic": { "id": 166, "name": "Apparel & Accessories" },"audienceSelection": { "demographics": { "flag1": true, "flag2": false }, "geography": { "flag1": true, "flag2": false } },"advertiser": { "name": "Nike, Inc.", "country": "US", "legalName": "Nike, Inc." }}
The run's Output tab links to the ads (Overview and Details views) and to a RUN_SUMMARY record with per-input counts, charged events and request statistics.
Monitoring new ads ("only new since last run")
- Turn on Only new ads since last run and, optionally, set a state key such as
competitors-weekly. - Schedule the Actor (for example daily) and add a Slack, email or webhook integration.
- Each run returns, and charges for, only creatives it hasn't returned before for the same state key. The memory lives in the named key-value store
google-ads-transparency-stateon your account. To start over, delete that store or change the state key.
How much does it cost to scrape Google ads?
You pay per event, with no subscription. Apify platform usage is included in these prices.
| What | Price | Per 1,000 |
|---|---|---|
| Ad (basic mode) | $0.0008 per ad | $0.80 per 1,000 ads |
| Ad with details (details mode, instead of basic) | $0.002 per ad | $2.00 per 1,000 ads |
| OCR text extraction (only when OCR actually reads usable text) | $0.0004 per ad | +$0.40 per 1,000 OCR-read ads |
| Actor start | $0.00005 per GB of run memory | ≈ $0.0001 per run at the default 2 GB |
Examples
- 1,000 ads, basic, OCR off: $0.80
- 1,000 nike.com ads, basic, default OCR (about 70% were screenshot-only text ads): $0.80 + 700 × $0.0004 ≈ $1.08
- 1,000 ads in details mode: $2.00 (plus OCR, if used)
- A weekly monitoring run that finds 20 new ads: about $0.02. Ads already seen are skipped for free.
Set a maximum cost per run in the run options and the Actor stops cleanly at that limit. With Apify's free monthly credit you can scrape several thousand ads at no cost.
What makes this scraper different
Many Google Ads Transparency scrapers on the Store return similar core fields (advertiser, creative ID, format, dates, preview URLs). This one focuses on a few things that save time in practice:
| Feature | This Actor |
|---|---|
| Inputs | Advertiser name, advertiser ID, domain, Transparency Center URLs (advertiser, creative, domain) |
| Filters | Region, date range, format, platform |
| Ad copy from previews | Headline, description, long headline, CTA, display/landing URL, YouTube video ID |
| Text from screenshot-only ads | Built-in OCR (Tesseract, runs inside the Actor, billed only when it reads usable text). On nike.com it raised readable ads from 5 to 27 out of 30. |
| Incremental monitoring | Only-new mode with a persistent state, so scheduled runs return and bill only new ads |
| Per-region dates, impressions, audience criteria | Optional details mode |
| Browser | None (HTTP JSON endpoints), so it's fast and low-cost |
Compare fields and prices on the Store yourself; pick whichever fits your workflow.
Use it as an API, or from AI agents (MCP)
Tool summary for agents. Input: at least one of domains (e.g. ["nike.com"]), advertisers (name or AR… ID) or startUrls, plus optional regions, startDate/endDate, adFormat, platform. Output: one JSON item per ad (advertiserName, creativeId, format, headline, description, displayUrl, clickUrl, firstShown, lastShown, adUrl…). Cost: $0.0008 per ad; the default call ({"domains": ["nike.com"]}, 10 ads) costs about $0.01 and takes about 2 minutes (text extraction and OCR are paced politely); with extractText: false it returns metadata in seconds.
- REST API:
POST https://api.apify.com/v2/acts/krundle~google-ads-transparency-scraper/run-sync-get-dataset-itemswithAuthorization: Bearer <token>and the input JSON as the body returns the ads directly. - SDKs: use the Apify Python and JavaScript clients:
client.actor("krundle/google-ads-transparency-scraper").call(run_input={...}). - MCP: connect to
https://mcp.apify.com?tools=krundle/google-ads-transparency-scraperfrom Claude, Cursor, ChatGPT or any MCP client. - Agentic payments (no Apify account): an agent can pay with x402 (USDC on Base or Solana) or MPP by buying a prepaid token at agi.apify.com, or with Skyfire via
https://mcp.apify.com?payment=skyfire&tools=krundle/google-ads-transparency-scraper. This Actor is pay-per-event with limited permissions, so it is eligible for both.
Tips and limitations
- Text ads are often archived as screenshots. Google stores many Search text ads only as an image (
imageUrl). OCR reads them: in our tests headlines came out word-for-word, and descriptions were correct except where a product thumbnail covers part of the text or the ad truncates it.textSourcetells you whether text came from thepreviewor fromocr. Non-Latin scripts need the matchingocrLanguages(e.g.kor); otherwise those ads are returned without text rather than with garbage. - Some ads have no copy at all. Pure YouTube video creatives may only provide the video ID.
- Date filters cover roughly the last 12 months (a Transparency Center limit).
- Impressions, per-region first-shown dates and audience criteria are published by Google mainly for ads shown in the EU/EEA (DSA transparency). Elsewhere you usually get only dates.
- No spend or click data. Google doesn't publish budgets, CPCs or keywords in the Transparency Center, so no scraper can provide them.
- Name matching. Advertiser names are ambiguous (e.g. "Adidas" matches several national entities). For exact results, use the
AR…ID or a domain. - Age-restricted ads aren't shown to logged-out users, so they aren't scraped.
- Throttling. Google throttles aggressive traffic. Keep the default politeness settings and Apify Proxy for large runs.
FAQ
What is the Google Ads Transparency Center? It's Google's public ad library. It shows the ads verified advertisers ran on Google Search, YouTube, Display, Maps, Play and Shopping, with formats, dates and regions.
Can I spy on competitors' Google ads with this? Yes, within what Google makes public. Enter the competitor's domain or advertiser ID to get their ads, copy, formats, countries and run dates. Budgets, keywords and performance aren't public.
Is there a Google Ads Transparency API? This Actor works as one: call it through the Apify API, SDKs, integrations or MCP and get structured JSON back.
How do I find an advertiser ID?
Search the advertiser on adstransparency.google.com; the ID is the AR… part of the URL. Or just enter the name or domain here.
Is it legal to scrape the Google Ads Transparency Center? It's a public library Google publishes so people can scrutinize ads. Only collect data you have a legitimate reason to use, and comply with the laws that apply to you, including GDPR for any personal data.
How fast is it?
With extractText: false, search pages return up to 100 ads each, so thousands of ads per minute are possible. Text extraction, OCR and details add per-ad requests that are deliberately paced.
Can I get all ads shown in one country?
Per advertiser or domain, yes. Set regions or use a URL with ?region=XX. The Transparency Center doesn't support browsing all advertisers in a country, so neither does this Actor.
Something doesn't work? Open an issue on the Actor's Issues tab with the run ID, and we'll take a look.