Google Ads Transparency Center Scraper avatar

Google Ads Transparency Center Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Google Ads Transparency Center Scraper

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

Donjuan

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

3

Monthly active users

a day ago

Last modified

Share

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 region and preset-date out 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_variations mode renders each creative in a headless browser to additionally extract clickUrl, cta, description, and imageUrl per variation (significantly slower).

Input

Parameters

  • advertiser_name: Organisation name to search (e.g. "Niantic, Inc."). Used only if advertiser_url and advertiser_id are empty; multiple matches are all scraped.
  • advertiser_url: Full Ads Transparency Center URL. region and preset-date from 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 as DE, ES, US. Overridden by the URL's region param 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-level clickUrl, cta, description, and imageUrl. Adds roughly 12 seconds per creative — disabled by default.

Format

{
"advertiser_url": "https://adstransparency.google.com/advertiser/AR08888592736429539329?authuser=0&region=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

  1. Set up a new task on the Apify platform.
  2. Configure the input JSON with one of advertiser_url, advertiser_id, or advertiser_name, plus any optional filters.
  3. 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 limit to cap per-advertiser work.
  • rich_variations multiplies run time by roughly limit × 12 seconds. Use only when you need variation-level clickUrl/cta/description/imageUrl.
  • imageUrl is 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.