Home / Tools / Google Ads Transparency Scraper
Domain & website intelligence
Google Ads Transparency Scraper
Scrape Google Ads Transparency Center creatives by advertiser name, AR ID, domain or URL: ad text (headline/description), images, YouTube videos, regions, impression ranges, platforms and first/last shown dates. Monitoring mode detects new and stopped ads. Fast HTTP, no browser.
- Price: $1.50 per 1,000 × ad result
- Prefilled example: finished in 7 s on Oct 19, 2026 (Done in 2.5s: 5 ads from 1/1 targets.)
- Reliability: 14/14 public runs succeeded in the last 30 days (100%)
- Works with: Apify Console, REST API, Python, JavaScript, MCP (Claude, Cursor, VS Code), n8n, Make, Zapier
- Last updated: 2026-10-19
Sample output
| Advertiser | Format | Headline | Landing domain | First shown |
|---|---|---|---|---|
| Nike, Inc. | TEXT | Voir chaussures pour enfants - Si… | nike.com | 2026-06-15 |
| Nike, Inc. | TEXT | Nike® Official Site | nike.com | 2023-11-16 |
| Nike, Inc. | TEXT | Nike® Official Site | nike.com | 2023-11-16 |
Real rows from the prefilled example run (Oct 19, 2026), 5 of 45+ fields shown. Export as JSON, CSV, Excel or HTML, or read them through the API.
Full JSON of one real output row (6 rows in the example dataset)
{
"type": "ad",
"changeType": null,
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"advertiserVerified": true,
"advertiserCountry": "US",
"advertiserLegalName": "Nike, Inc.",
"creativeId": "CR17366989922560376833",
"format": "TEXT",
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR17366989922560376833?region=anywhere",
"headline": "Voir chaussures pour enfants - Site officiel de Nike",
"description": "Offrez-vous le dernier modéle de chaussures Nike pour enfants. Achetez dés maintenant. Des chaussures pour enfants alliant performance et confort. Equipez- vous chez Nike®. Tailles pour tout athlete. Type de chaussures. Choix des Athletes. Sorties exclusives.... Note associée a n...",
"longHeadline": null,
"callToAction": null,
"displayUrl": "www.nike.com/voir/chauss-enfants",
"businessName": "nike.com",
"sitelinks": null,
"productTitle": null,
"merchant": null,
"textSource": "ocr",
"ocrConfidence": 86.3,
"landingUrl": null,
"landingDomain": "nike.com",
"imageUrls": null,
"previewImageUrl": "https://tpc.googlesyndication.com/archive/simgad/11525026190453007206",
"videoId": null,
"videoUrl": null,
"videoThumbnailUrl": null,
"youtubeChannel": null,
"videoDuration": null,
"firstShown": "2026-06-15T16:46:03Z",
"lastShown": "2026-10-19T09:25:00Z",
"daysShown": 120,
"isActive": true,
"regionCodes": [
"CA"
],
"regions": [
{
"regionCode": "CA",
"regionName": "Canada",
"geoId": 2124,
"firstShown": null,
"lastShown": "2026-10-19",
"impressionsMin": null,
"impressionsMax": null,
"platforms": null
}
],
"impressionsMin": null,
"impressionsMax": null,
"platforms": null,
"topic": null
}Output fields
From the Actor's dataset schema. Every row has the same flat shape, so it drops straight into a spreadsheet, a database or an agent's context.
| Field | Type | Description |
|---|---|---|
type | string | Row type: ad, summary or error (summary and error rows are free) |
changeType | string | Monitoring mode: NEW (first seen), STOPPED (no longer running or removed) or RESUMED (stopped before, running again) |
previewImageUrl | string | Rendered preview image of the ad (text ads are archived as images) |
advertiserName | string | Advertiser name as shown in the Transparency Center |
advertiserId | string | Advertiser ID (AR...) |
advertiserVerified | boolean | Advertiser identity verified by Google |
advertiserCountry | string | Advertiser country (ISO code) |
advertiserLegalName | string | Advertiser legal name |
creativeId | string | Ad creative ID (CR...) |
format | string | TEXT, IMAGE or VIDEO |
headline | string | Ad headline |
description | string | Ad description / body text |
longHeadline | string | Long headline (responsive display / video ads) |
callToAction | string | Call-to-action text |
displayUrl | string | Display URL shown in the ad |
businessName | string | Business / brand name shown in the ad |
sitelinks | array | Sitelink texts (text ads, OCR) |
productTitle | string | Product title (Shopping ads) |
merchant | string | Merchant (Shopping ads) |
textSource | string | Where the ad text came from: preview (structured) or ocr (read from the ad image) |
ocrConfidence | number | Average OCR confidence 0-100 |
ocrLanguage | string | OCR language model used (tesseract code, e.g. eng, deu, jpn) |
landingUrl | string | Final/destination URL when the preview exposes it |
landingDomain | string | Domain the ad points to |
Pricing
Pay per result, billed by Apify. No subscription and no minimum. Discount tiers apply automatically on paid Apify plans.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Ad result main Charged once per ad creative returned with details (monitoring mode: NEW and STOPPED ads only). | $0.0015 | $0.0013 | $0.0011 | $0.001 |
| Actor start Charged once when the Actor run starts. | $0.001 | $0.001 | $0.001 | $0.001 |
Examples on the Free plan: 100 ad results = $0.15, 1,000 ad results = $1.50, 10,000 ad results = $15. Apify's Free plan includes $5 of monthly usage credit. Prices read from the Apify API at build time (2026-10-19).
Scheduled price change from 2026-11-02 (Free-plan tier): Ad result: $0.0015 → $0.002. Paid-plan tiers change accordingly. The table shows today's prices.
Example input
This is the prefilled input on the Store page. Keep it and click Start to see real data in seconds.
{
"targets": [
"Nike"
],
"maxAdsPerTarget": 5,
"region": "anywhere",
"includeDetails": true,
"extractAdText": true,
"ocrTextAds": true,
"ocrLanguage": "auto",
"advertiserSummary": true,
"maxAdvertisersPerName": 1,
"monitorMode": false,
"monitorStoreName": "google-ads-transparency-monitor",
"activeWithinDays": 7,
"emitBaselineOnFirstRun": true,
"proxyConfiguration": {
"useApifyProxy": true
},
"residentialFallback": true,
"maxConcurrency": 8,
"dataForSeoFallback": false
}Use it from code, no-code or an AI agent
cURL (one request, returns rows)
curl -X POST \
"https://api.apify.com/v2/acts/wrenfield-data~google-ads-transparency-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"targets": ["Nike"], "maxAdsPerTarget": 5, "region": "anywhere", "includeDetails": true, "extractAdText": true, "ocrTextAds": true, "ocrLanguage": "auto", "advertiserSummary": true, "maxAdvertisersPerName": 1, "monitorMode": false, "monitorStoreName": "google-ads-transparency-monitor", "activeWithinDays": 7, "emitBaselineOnFirstRun": true, "proxyConfiguration": {"useApifyProxy": true}, "residentialFallback": true, "maxConcurrency": 8, "dataForSeoFallback": false}'Python
# pip install apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wrenfield-data/google-ads-transparency-scraper").call(
run_input={
"targets": [
"Nike"
],
"maxAdsPerTarget": 5,
"region": "anywhere",
"includeDetails": True,
"extractAdText": True,
"ocrTextAds": True,
"ocrLanguage": "auto",
"advertiserSummary": True,
"maxAdvertisersPerName": 1,
"monitorMode": False,
"monitorStoreName": "google-ads-transparency-monitor",
"activeWithinDays": 7,
"emitBaselineOnFirstRun": True,
"proxyConfiguration": {
"useApifyProxy": True
},
"residentialFallback": True,
"maxConcurrency": 8,
"dataForSeoFallback": False
},
max_total_charge_usd=1.00, # hard cap for this run
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)JavaScript / Node
// npm i apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('wrenfield-data/google-ads-transparency-scraper').call({
"targets": [
"Nike"
],
"maxAdsPerTarget": 5,
"region": "anywhere",
"includeDetails": true,
"extractAdText": true,
"ocrTextAds": true,
"ocrLanguage": "auto",
"advertiserSummary": true,
"maxAdvertisersPerName": 1,
"monitorMode": false,
"monitorStoreName": "google-ads-transparency-monitor",
"activeWithinDays": 7,
"emitBaselineOnFirstRun": true,
"proxyConfiguration": {
"useApifyProxy": true
},
"residentialFallback": true,
"maxConcurrency": 8,
"dataForSeoFallback": false
}, { maxTotalChargeUsd: 1 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);MCP (Claude, Cursor, VS Code, any MCP client)
{
"mcpServers": {
"wrenfield-google-ads-transparency-scraper": {
"url": "https://mcp.apify.com?tools=wrenfield-data/google-ads-transparency-scraper"
}
}
}Remote MCP server hosted by Apify. Sign in with OAuth on first use, or send Authorization: Bearer <APIFY_TOKEN>. The tool appears as wrenfield-data--google-ads-transparency-scraper. More client setups on the MCP page.
n8n, Make, Zapier
Use the official Apify node or app, pick Run Actor, enter wrenfield-data/google-ads-transparency-scraper and paste the input JSON above. Then read the run's dataset items. Ready-made n8n workflows are on the n8n templates page.
FAQ
How much does Google Ads Transparency Scraper cost?
$0.0015 per ad result on the Apify Free plan ($1.50 per 1,000), billed per result by Apify with no subscription. Plus $0.001 per actor start. Higher Apify plans get the discounted tiers shown in the pricing table. You can cap any run with a maximum cost.
What is the Google Ads Transparency Center?
It is Google's public library of ads run on Google Search, YouTube, Shopping, Display, Maps and Play by verified advertisers. You can browse it at adstransparency.google.com. This Actor turns it into structured data.
Is there an official Google Ads Transparency Center API?
No, Google does not offer a public API for it. (Google publishes political ads in BigQuery, but not commercial ads.) This Actor works as an API: call it from the Apify API, Python/JS clients, Make, Zapier, n8n or the Apify MCP server.
How do I find an advertiser ID?
Open the advertiser in the Transparency Center. The URL contains /advertiser/AR.... You can also just enter the brand name or website domain. The Actor finds the advertiser and reports how it matched in matchedBy.
Why do some text ads have textSource: "ocr"?
Google archives most Search text ads only as images. The Actor reads them with OCR, which is very accurate for English and other Latin-script ads. ocrConfidence shows the confidence. The previewImageUrl always shows the original ad.
Why are impressions and targeting empty for some ads?
Google only publishes impression ranges, per-platform data and targeting for ads shown in the EU/EEA. Choose an EU region (e.g. Germany) to get them.
Can I search by keyword?
The Transparency Center itself can only be searched by advertiser or website, not by ad keyword. Use advertiser names or domains as targets, then filter the extracted ad text.
Related tools
Compare and plan
Try Google Ads Transparency Scraper now
Open it on Apify, keep the prefilled example and click Start. The Apify Free plan includes $5 of monthly credit, no card needed.
Open on Apify