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.

Run it on Apify API & MCP

Sample output

AdvertiserFormatHeadlineLanding domainFirst shown
Nike, Inc.TEXTVoir chaussures pour enfants - Si…nike.com2026-06-15
Nike, Inc.TEXTNike® Official Sitenike.com2023-11-16
Nike, Inc.TEXTNike® Official Sitenike.com2023-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.

FieldTypeDescription
typestringRow type: ad, summary or error (summary and error rows are free)
changeTypestringMonitoring mode: NEW (first seen), STOPPED (no longer running or removed) or RESUMED (stopped before, running again)
previewImageUrlstringRendered preview image of the ad (text ads are archived as images)
advertiserNamestringAdvertiser name as shown in the Transparency Center
advertiserIdstringAdvertiser ID (AR...)
advertiserVerifiedbooleanAdvertiser identity verified by Google
advertiserCountrystringAdvertiser country (ISO code)
advertiserLegalNamestringAdvertiser legal name
creativeIdstringAd creative ID (CR...)
formatstringTEXT, IMAGE or VIDEO
headlinestringAd headline
descriptionstringAd description / body text
longHeadlinestringLong headline (responsive display / video ads)
callToActionstringCall-to-action text
displayUrlstringDisplay URL shown in the ad
businessNamestringBusiness / brand name shown in the ad
sitelinksarraySitelink texts (text ads, OCR)
productTitlestringProduct title (Shopping ads)
merchantstringMerchant (Shopping ads)
textSourcestringWhere the ad text came from: preview (structured) or ocr (read from the ad image)
ocrConfidencenumberAverage OCR confidence 0-100
ocrLanguagestringOCR language model used (tesseract code, e.g. eng, deu, jpn)
landingUrlstringFinal/destination URL when the preview exposes it
landingDomainstringDomain the ad points to

Pricing

Pay per result, billed by Apify. No subscription and no minimum. Discount tiers apply automatically on paid Apify plans.

EventFree planBronzeSilverGold
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