Google Ads Transparency Center Scraper avatar

Google Ads Transparency Center Scraper

Pricing

from $0.80 / 1,000 ads

Go to Apify Store
Google Ads Transparency Center Scraper

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

Krundle Freako

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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

  1. 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.
  2. Optionally set regions, date range, ad format and platform, and the maximum number of ads.
  3. 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

FieldDescription
advertisersAdvertiser names or AR… IDs. A name resolves to the matching advertiser with the most ads; set advertiserNameMatch: "all" to scrape every match.
domainsDomains such as nike.com. Returns ads from all advertisers that point to that domain.
startUrlsTransparency Center URLs: /advertiser/AR…, /advertiser/AR…/creative/CR…, or /?domain=….
regionsISO country codes (US, GB, DE, …). Leave empty for anywhere.
startDate / endDateYYYY-MM-DD. Google supports roughly the last 12 months only.
adFormatall, text, image or video.
platformall, search, youtube, maps, play or shopping.
maxAdsPerSource / maxAdsTotalResult 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.
includeDetailsAdds full creative details (one extra request per ad, billed as "ad with details").
extractTextDownloads the ad preview to extract the copy (on by default).
ocrModetextAdsWithoutText (default) runs OCR on text-ad screenshots that have no machine-readable copy. allImageAds also runs it on image/banner ads. off disables OCR.
ocrLanguagesTesseract language codes. Default ["eng"]. Add e.g. deu, fra, spa, kor, jpn, chi_sim for other languages.
onlyNew / stateKeyMonitoring mode (see below).
proxyConfigurationApify Proxy (on by default). Datacenter proxies are usually enough.
maxConcurrency, requestIntervalMs, maxRetriesPoliteness 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:

advertiserNameadvertiserIdcreativeIdformatheadlinedisplayUrltextSourcefirstShownlastShown
Nike, Inc.AR16735076323512287233CR03162399022933606401textNike® Official Sitenike.compreview2023-11-162026-10-18
Nike, Inc.AR16735076323512287233CR09478963857012555777textThe Latest Nike® Socks - Shop Nike® Sockswww.nike.com/shop/socksocr2023-11-162026-10-18
Tesla Inc.AR17828074650563772417CR11505465921326022657videoGoodbye Gas Generatorstesla.compreview2025-05-202026-10-18
WPP MEDIA MANAGEMENTAR06365026152670560257CR04320763977681338369imageEquípate con Nike Trainingnike.compreview2026-09-102026-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")

  1. Turn on Only new ads since last run and, optionally, set a state key such as competitors-weekly.
  2. Schedule the Actor (for example daily) and add a Slack, email or webhook integration.
  3. 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-state on 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.

WhatPricePer 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:

FeatureThis Actor
InputsAdvertiser name, advertiser ID, domain, Transparency Center URLs (advertiser, creative, domain)
FiltersRegion, date range, format, platform
Ad copy from previewsHeadline, description, long headline, CTA, display/landing URL, YouTube video ID
Text from screenshot-only adsBuilt-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 monitoringOnly-new mode with a persistent state, so scheduled runs return and bill only new ads
Per-region dates, impressions, audience criteriaOptional details mode
BrowserNone (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-items with Authorization: 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-scraper from 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. textSource tells you whether text came from the preview or from ocr. Non-Latin scripts need the matching ocrLanguages (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.