This repository is documentation only. The scraper itself runs on the Apify platform — no setup, no server, no code to install.
Scrape the Google Ads Transparency Center at scale and pull every ad your competitors are running across Search, Display, Shopping and YouTube. Look up advertisers by website domain, by advertiser ID, or by brand name, batch up to 50 competitors in a single run, and optionally enrich each ad with impressions ranges, per-region breakdowns, spend tiers and A/B creative variants. There is no API key, no login and no Google account required — you get a clean, structured, queryable Google ad library feed you can export to JSON, CSV or Excel.
If you have been searching for a Google Ads Transparency Center API, a way to download competitor ad creatives, or a Google ad spend / impressions data export, this Apify Actor turns Google's public regulatory ad data into a schedulable dataset.
Each dataset row is one ad creative, deduplicated by ad ID. Real output fields:
| Field | Description |
|---|---|
adId |
Google creative ID for the ad. |
advertiserId |
AR…-prefixed Google advertiser ID. |
adUrl |
Link to the ad's page in the Ads Transparency Center. |
advertiserName |
Display name of the advertiser. |
advertiserDomain |
Verified advertiser website domain. |
format |
Creative format: TEXT, IMAGE, VIDEO, DISPLAY or UNKNOWN. |
surface |
Where the ad runs: SEARCH, DISPLAY or SHOPPING. |
imageUrl |
Direct URL to the creative image (image/banner ads). |
imageWidth / imageHeight |
Creative image dimensions in pixels. |
iframeUrl |
Live ad iframe URL for rich-media / responsive creatives. |
previewUrl |
Best available preview URL (image, else iframe). |
variationCount |
Number of creative variations grouped under the ad. |
firstShown / lastShown |
First and last observed dates (ISO yyyy-mm-dd). |
advertiserTotalAdsMin / advertiserTotalAdsMax |
Google's estimate of the advertiser's total ad count. |
impressionsRange |
Min/max impressions range (enrichment). |
impressionsRegions |
Per-region impression breakdown (enrichment). |
spendRange |
Spend tier min/max (enrichment, political ads). |
targetingCategory |
Ad targeting category, e.g. Clothing & Accessories (enrichment). |
variantUrls |
A/B variant preview URLs (enrichment). |
payer |
Paying entity for the ad (political ads, enrichment). |
firstShownDetailed / lastShownDetailed |
Precise first/last shown dates (enrichment). |
searchedDomain / searchedAdvertiser / searchedRegions / searchedFormat |
Search context that produced the record. |
scrapedAt |
ISO timestamp of when the ad was scraped. |
Enrichment fields are null when enrichDetails is off or Google withholds them.
- Competitive ad monitoring — track which Google ads your top competitors run, in which regions, and at what scale.
- Creative swipe files — download competitor ad creatives via
imageUrl/iframeUrlto study winning formats and hooks. - Google ad spend & impressions intelligence — use enrichment to estimate where and how heavily rivals invest per region.
- Share-of-voice analysis — aggregate impressions and spend ranges to size category share-of-voice.
- Ad-tech & agency lead generation — active Google advertisers are warm B2B leads for agencies and martech vendors.
- Political ad accountability — the
payerfield exposes who funds political ads for journalism and research. - New-campaign alerting — schedule the Actor and get notified the moment a competitor launches a new creative.
You can run the Actor four ways. Every method returns the same structured dataset.
- Open the Actor: apify.com/logiover/google-ads-transparency-scraper.
- Click Try for free. The default input (
nike.com) returns sample ads immediately — no configuration needed. - Set your own competitor
domains, then Start and export from the Output tab.
npm install -g apify-cli
apify login
apify call logiover/google-ads-transparency-scraper \
--input '{ "mode": "domain", "domains": ["nike.com", "adidas.com"], "maxAds": 200 }'curl -X POST \
"https://api.apify.com/v2/acts/logiover~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "domain",
"domains": ["nike.com", "adidas.com", "puma.com"],
"regions": ["US", "DE"],
"creativeFormats": ["IMAGE", "VIDEO"],
"maxAds": 300,
"enrichDetails": true
}'See examples/javascript.md and examples/python.md for full snippets. All four methods live in examples/.
Every field is optional except providing at least one target that matches your mode. Leave everything empty and the run defaults to nike.com, so you always get sample data.
| Field | Type | Description |
|---|---|---|
mode |
select | How to identify advertisers: domain, advertiser-id, or advertiser-name. Default domain. |
domains |
array | For mode=domain. Advertiser website domains (no www. / https://). Batch up to 50+. |
advertiserIds |
array | For mode=advertiser-id. AR… Google advertiser IDs from advertiser detail-page URLs. |
advertiserNames |
array | For mode=advertiser-name. Brand/company names, auto-resolved to the top-matching advertiser. |
regions |
multi-select | Country/region filter (ISO 3166-1 alpha-2, e.g. US, GB, DE). Multiple = OR filter. anywhere skips the filter. ~120 countries. |
creativeFormats |
multi-select | Filter by format: any combination of TEXT, IMAGE, VIDEO. Empty = all formats. |
maxAdsPerTarget |
integer | Cap on ads returned per advertiser/domain. 0 = unlimited per target. |
maxAds |
integer | Global cap on total ads across all targets. 0 = unlimited. |
enrichDetails |
boolean | Fetch each ad's detail page for impressions, regional breakdown, spend tiers, variant URLs, targeting category and payer info. Roughly doubles cost and run time. Default false. |
proxyConfiguration |
object | Apify Proxy (AUTO) is on by default and rotates IPs. Switch to RESIDENTIAL only for very large runs. |
mode, regions and creativeFormats are dropdowns in the Console for easy selection.
A realistic sample record (enrichment fields populated):
{
"adId": "CR10456789012345678",
"advertiserId": "AR01614014162839862273",
"adUrl": "https://adstransparency.google.com/advertiser/AR01614014162839862273/creative/CR10456789012345678",
"advertiserName": "Nike, Inc.",
"advertiserDomain": "nike.com",
"format": "IMAGE",
"surface": "DISPLAY",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/1234567890",
"imageWidth": 1200,
"imageHeight": 628,
"iframeUrl": null,
"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/1234567890",
"variationCount": 4,
"firstShown": "2026-05-02",
"lastShown": "2026-07-04",
"targetingCategory": { "code": "1234", "name": "Clothing & Accessories", "surface": 3 },
"impressionsRange": { "min": 100000, "max": 1000000 },
"spendRange": { "min": 5000, "max": 10000 },
"payer": null,
"advertiserTotalAdsMin": 900,
"advertiserTotalAdsMax": 1000,
"searchedDomain": "nike.com",
"searchedRegions": ["US", "DE"],
"scrapedAt": "2026-07-06T09:14:22.183Z"
}The Console ships two ready-made table views — Ads Overview and Creative Details — so you can browse results with no post-processing.
- Schedules — run hourly, daily or weekly for continuous competitive monitoring.
- Webhooks — push every newly detected ad to Slack, Airtable, or your own endpoint on run completion.
- Google Sheets / Airtable / Notion — sync the dataset live for a shared competitor swipe file.
- BigQuery / S3 / your data warehouse — export via the Apify API for long-term ad tracking.
- Zapier · Make · n8n · Pipedream — connect the Actor into no-code automations (e.g. Slack alert on a new competitor creative).
Every run writes to an Apify dataset you can export as CSV, JSON, JSONL (JSON Lines), Excel (XLSX) or XML — one click in the Console or via the Apify API.
Google does not publish an official Ads Transparency Center API. This Actor is a practical Google Ads Transparency Center API alternative — it returns structured ad records you can pull programmatically via the Apify API.
Yes. The Ads Transparency Center is a public regulatory tool, so you can extract competitor ad creatives, impressions and spend ranges with no Google API key, no account, no cookies and no login.
Set mode to domain and pass up to 50 competitor domains in one run. The Actor deduplicates by ad ID and returns every creative each advertiser is running.
Enable enrichDetails. Each ad's detail page is fetched to unlock the impressions range, per-region impressions breakdown, spend tier and A/B variant URLs.
Every record includes a direct imageUrl (fetch it with a plain HTTP GET) plus an iframeUrl for video and rich-media creatives — perfect for building a swipe file.
Every run lands in an Apify dataset that exports to CSV, JSON, JSONL, Excel (XLSX) or XML in one click, or via the Apify API.
Batch many competitors per run and cap volume with maxAdsPerTarget (per competitor) and maxAds (global ceiling). Detail enrichment roughly doubles per-ad cost and run time.
Search text ads, Display image and video banners, YouTube and Shopping product ads across SEARCH, DISPLAY and SHOPPING surfaces. Format detection is automatic; filter with creativeFormats.
Google attaches targetingCategory, impressionsRange, spendRange and payer selectively depending on the ad and what it chooses to disclose. A null value means Google did not return that field — it is not a scraping error.
Yes. Schedule the Actor on Apify to run on any interval and use webhooks to push new creatives to Slack, Airtable, or your backend automatically.
- Meta Ad Library Scraper — scrape Facebook & Instagram ads from the Meta Ad Library.
- Competitor Ad Intelligence — aggregate and analyze competitor ad activity across channels.
- Google News Scraper — structured Google News headlines and articles by keyword.
👉 Browse all logiover scrapers on Apify Store.
📄 Documentation only — this repository contains no scraper source code. The Actor runs on the Apify platform.
Licensed under the MIT License · © 2026 logiover · Not affiliated with, endorsed by, or sponsored by Google LLC.