Google Ads Transparency Center Scraper
Pricing
from $1.50 / 1,000 results
Google Ads Transparency Center Scraper
Unlock competitor insights! Extract ads by name, URL, or ID. Get precise data: impressions by region/platform (YT, Search, Display), targeting flags, and dates. Use Rich Variations mode for CTAs, URLs, and images. Fast, structured JSON output. 🎯⚖️
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Donjuan
Actor stats
0
Bookmarked
7
Total users
3
Monthly active users
a day ago
Last modified
Categories
Share
Google Ads Transparency Scraper
A script for scraping creatives from the Google Ads Transparency Center (adstransparency.google.com).
Overview
This script is designed for the Apify platform. It resolves a target advertiser (by name, URL, or ID), enumerates the advertiser's creatives using a headless Chromium browser via Playwright, and fetches the full detail of each creative through the public LookupService/GetCreativeById RPC. Results are written to the dataset as structured JSON.
Features
- Accepts an advertiser name, a full Transparency Center URL, or a raw advertiser ID (
AR...). - Automatically parses
regionandpreset-dateout of a provided URL. - Returns every creative's first/last-shown dates, served days, format, targeting flags, per-region impressions, and per-surface (Search / YouTube / Display / …) impression breakdowns.
- Resolves Google's numeric geo-target IDs to ISO 3166-1 alpha-2 codes and country names.
- Optional
rich_variationsmode renders each creative in a headless browser to additionally extractclickUrl,cta,description, andimageUrlper variation (significantly slower).
Input
Parameters
- advertiser_name: Organisation name to search (e.g.
"Niantic, Inc."). Used only ifadvertiser_urlandadvertiser_idare empty; multiple matches are all scraped. - advertiser_url: Full Ads Transparency Center URL.
regionandpreset-datefrom the URL are applied automatically. - advertiser_id: Known advertiser ID starting with
AR. - region: Region filter —
anywhere(default) or an ISO alpha-2 code such asDE,ES,US. Overridden by the URL'sregionparam if present. - preset_date: Optional preset date-range filter matching the UI (e.g.
"Last 30 days"). - limit: Max creatives to fetch per advertiser. Default
100. - rich_variations: When
true, each creative is rendered in a headless browser to fill variation-levelclickUrl,cta,description, andimageUrl. Adds roughly 12 seconds per creative — disabled by default.
Format
{"advertiser_url": "https://adstransparency.google.com/advertiser/AR08888592736429539329?authuser=0®ion=ES&preset-date=Last+30+days","limit": 10,"rich_variations": false}
Or, by organisation name:
{"advertiser_name": "Niantic, Inc.","region": "anywhere","limit": 100}
Output
The script outputs a JSON array where each object represents one creative with its region stats, targeting flags, and variations.
Example Output
[{"adLibraryUrl": "https://adstransparency.google.com/advertiser/AR08888592736429539329/creative/CR08436770543486631937","advertiserId": "AR08888592736429539329","advertiserName": "Niantic, Inc.","creativeId": "CR08436770543486631937","firstShown": "2023-07-04","format": "IMAGE","lastShown": "2024-05-17","numServedDays": 319,"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...","regionStats": [{"regionCode": "DE","regionName": "Germany","firstShown": "2023-07-04","lastShown": "2024-05-17","impressions": { "lowerBound": 1000, "upperBound": 2000 },"surfaceServingStats": [{ "surfaceCode": "YOUTUBE", "surfaceName": "YouTube","impressions": { "lowerBound": 1000, "upperBound": 2000 } },{ "surfaceCode": "SEARCH", "surfaceName": "Google Search","impressions": { "lowerBound": 0, "upperBound": 1000 } }]}],"startUrl": "https://adstransparency.google.com/advertiser/AR08888592736429539329?region=anywhere","targeting": {"targetingCategory": {"demographics": { "1": true, "2": false },"geography": { "1": true, "2": true },"contextual": { "1": true, "2": true },"advertiserList": { "1": false, "2": true }}},"variations": [{"clickUrl": "https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo","cta": "Install","description": "Catch Pokémon, battle other Trainers, raid with friends, and more in Pokémon GO","imageUrl": "https://tpc.googlesyndication.com/simgad/16977068568541754968","previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?..."}]}]
When rich_variations is false (default), each variations[] entry contains only previewUrl; clickUrl, cta, description, and imageUrl are only populated when rich_variations is true.
How to Use
- Set up a new task on the Apify platform.
- Configure the input JSON with one of
advertiser_url,advertiser_id, oradvertiser_name, plus any optional filters. - Run the task. The script writes each creative as a separate record to the dataset.
Notes & Limitations
- Advertisers with many thousands of creatives will take proportionally longer; use
limitto cap per-advertiser work. rich_variationsmultiplies run time by roughlylimit × 12 seconds. Use only when you need variation-levelclickUrl/cta/description/imageUrl.imageUrlis best-effort — small AppInstall ad units that render images through canvas/CSS may leave it empty.- Unknown region IDs fall back to the raw numeric Google geo-target ID.
Disclaimer
This script is provided "as is" without any warranties. Users assume full responsibility for its use. Ensure compliance with Google's terms of service and applicable legal regulations when using this scraper.