# Google Ads Transparency & Winner Scraper Pro (`voxatools/google-ads-transparency-scraper`) Actor

Extract competitor Google Ads from Google Ads Transparency Center by Domain, Brand Name, or Advertiser ID (AR...). Decodes hidden text headlines, descriptions, landing domains, YouTube/MP4 video URLs, and longevity winner tiers without a headless browser.

- **URL**: https://apify.com/voxatools/google-ads-transparency-scraper.md
- **Developed by:** [VoxaTools](https://apify.com/voxatools) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏆 Google Ads Transparency & Winner Scraper Pro (v1.1) — Decoded Copy, YouTube Video Links, Ad-Group Clone Deduplication & 90+ Day Winner Scoring

> **Uncover your competitors' longest-running, highest-converting Google Search, Display, Shopping & YouTube ads in seconds.**
> Powered by a **Zero-Browser Protobuf RPC & `content.js` Decoder Engine** — **15x faster** than Playwright scrapers, **$0 proxy cost**, **Zero Double-Charging on Ad-Group Clones (`adGroupScaleCount`)**, and **Zero Add-On Tax** (Decoded Ad Headlines, Descriptions, Video Links & Longevity Winner Tiers are **100% INCLUDED** in the `$1.50 / 1,000 ads` base rate!).

***

### 💡 Why Smart Performance Marketers, Agencies & AI Builders Choose VoxaTools Pro

Most Google Ads Transparency scrapers on Apify Store fall into three expensive traps:

1. **Slow Headless Browser Scrapers:** Launch heavy Chromium instances that crash or time out, charge you extra for Residential Proxies, and only return raw Google `previewUrl` iframe links **without decoding the actual ad headline or copy**.
2. **"Add-On Fee Trap" Scrapers (`$2 + $2 + $3 = $7.00 / 1,000 ads`):** Advertise a `$2.00 / 1,000` base rate, then secretly charge an extra **`+$2.00 / 1,000` just to extract `adText`** and **`+$3.00 / 1,000` for details**, while enabling expensive `$8/GB` Residential Proxies by default!
3. **The Duplicate Ad-Group Clone Billing Trap (Paying 3x–10x for the Exact Same Ad):** When enterprise brands (like Canva, Shopify, or HubSpot) scale a winning video or banner across 5 to 15 different Ad Groups (`adGroupId`), Google assigns a separate `CR...` Creative ID to each Ad Group. Standard scrapers blindly dump all 15 identical clones into your dataset and **charge your balance 15 times for the exact same video and headline!**

#### ⚡ Our Technical Reason-Why (Zero Add-On Tax + Smart Ad-Group Clone Deduplication)

Instead of launching a heavy browser or charging you multiple times for duplicate Ad-Group clones, **VoxaTools Pro** communicates directly with Google's internal `SearchCreatives` Protobuf RPC, decodes the `overlay=` Gzip/Protobuf payload + `content.js` bundle in memory (`~51 MB RAM`, `0ms` offline protobuf decoding), and runs an **In-Memory Ad-Group Clone Deduplicator (`deduplicateVisualClones: true`)**:

- **You Only Pay Once per Unique Creative:** Identical creatives duplicated across multiple Ad Groups are automatically merged into a single master record (saving you **30%–60%** of wasted PPE credits!).
- **Exclusive Horizontal Scaling Intelligence (`adGroupScaleCount`):** Instead of junk duplicate rows, we enrich the master record with `adGroupScaleCount`, `clonedCreativeIds`, and `clonedAdGroupIds` — revealing **which exact ads your competitor is aggressively scaling across multiple Ad Groups simultaneously!**

***

### 📊 3-Way Comparison: VoxaTools Pro vs. Other Google Ads Scrapers

| # | Feature / Cost Driver | Legacy Browser Scrapers | "Add-On Fee" Scrapers | 🏆 **VoxaTools Winner Scraper Pro (v1.1)** |
|---|---|---|---|---|
| 1 | **Base Price per 1,000 Ads** | `$2.50 – $5.00 / 1k` | `$2.00 / 1k` (Raw IDs only) | **`$1.50 / 1,000 Ads` (`$0.0015 / ad`)** |
| 2 | **Decoded Ad Headline, Description & CTA** | ❌ Not extracted | ⚠️ Charges **+$2.00 / 1k** extra (`adText`) | ✅ **INCLUDED FREE ($0 Extra)** |
| 3 | **🏆 Longevity Winner Filter (`30d / 90d+ Active`)** | ❌ None (wastes budget on 1-day test ads) | ❌ None | ✅ **INCLUDED FREE (`onlyLongRunningWinners`)** |
| 4 | **📈 Ad-Group Clone Deduplication & Scaling Signal** | ❌ Charges 3x–10x for duplicate clones | ❌ Charges 3x–10x for duplicate clones | ✅ **Auto-Deduplicates Clones + `adGroupScaleCount` (`$0` Extra)** |
| 5 | **🏢 B2B Lead-Gen Advertiser Check Mode** | ❌ None | ✅ Supported (`$3.00 / 1k`) | ✅ **Supported (`resultType: "advertisers"`, `$2.50 / 1k`)** |
| 6 | **📡 Scheduled New-Ad Radar (`onlyNewAds`)** | ❌ None | ✅ Supported | ✅ **Supported (`onlyNewAds` + Named KV Store)** |
| 7 | **Google Surface Filter (`SEARCH`, `YOUTUBE`, `SHOPPING`)** | ❌ Format only | ✅ Supported | ✅ **Supported (`platforms` + `startDate`/`endDate`)** |
| 8 | **Campaign IDs (`googleCustomerId`, `adGroupId`)** | ❌ None | ✅ Supported | ✅ **INCLUDED FREE in Base Tier** |
| 9 | **Optional Deep EU Reach & All A/B Variations** | ❌ None | Charges **+$3.00 / 1k** (`detail`) | ✅ **Optional `includeDetails` (+`$2.50 / 1k`)** |
| 10 | **Default Proxy Cost** | Residential (`$8/GB`) | Residential (`$8/GB` default) | ✅ **$0.00 (Direct Protobuf RPC)** |
| 11 | **AI / MCP Strategy Summary (`COMPETITOR_AD_SUMMARY.json`)** | ❌ None | ❌ None | ✅ **Auto-Generated Every Run** |

***

### 🚀 5 Powerful Operating Modes Built for B2B Growth Teams

#### Mode 1 — 🏆 Evergreen "Winning Ads" Spy (`resultType: "ads"` + `onlyLongRunningWinners: true`)

No advertiser pays Google for 60 to 90+ consecutive days if an ad is losing money. Set `onlyLongRunningWinners: true` (or `minDaysActive: 90`) to automatically skip short-lived test ads and **only pay for proven, profitable campaigns** badged as:

- `🏆 Evergreen Winner (90+ days)`
- `🔥 Proven Winner (30-89 days)`
- `⚡ Scaling (7-29 days)`
- `🧪 Testing (<7 days)`

#### Mode 2 — 📈 Horizontal Ad-Group Scaling Detector (`deduplicateVisualClones: true`)

Media buyers scale winning creatives in two ways: **Vertically** (running the same ad for 90+ days) and **Horizontally** (duplicating the winning video/banner across 3 to 10 different Ad Groups to target multiple audiences at once). VoxaTools Pro automatically merges identical Ad-Group clones so you never pay twice for the same creative, and outputs:

- `adGroupScaleCount`: Total number of parallel Ad Groups running this exact creative (e.g., `3` means scaled across 3 Ad Groups).
- `clonedAdGroupIds`: Array of all Google `adGroupId`s (`["194925389250", "194925389210", "194925389170"]`) running this creative.
- `clonedCreativeIds`: Array of merged `CR...` Creative IDs so you can audit every underlying campaign instance.

#### Mode 3 — 🏢 B2B Lead-Gen Advertiser Check (`resultType: "advertisers"`)

Building a prospect list for your marketing agency or SaaS sales team? Switch `resultType` to `"advertisers"` and paste 1,000+ domains (or import a Google Sheet via `urlsFromFile`). The Actor outputs **1 clean summary row per domain** telling you:

- Whether the company is actively running Google Ads (`isRunningGoogleAds: true/false`)
- Their verified legal entity (`advertiserLegalName`, `advertiserId`, `advertiserCountry`)
- Approximate active ad volume (`approxAdsCount`), top format (`TEXT`/`IMAGE`/`VIDEO`), and whether they have `90+ day Evergreen Winners` (`hasEvergreenWinners`).

#### Mode 4 — 📡 Automated Competitor New-Ad Radar (`onlyNewAds: true`)

Schedule this Actor to run daily or weekly on Apify. When `onlyNewAds: true` is enabled, the Actor stores seen `creativeId`s inside a persistent Key-Value Store (`monitorStoreName: "ads-transparency-monitor"`) and **only outputs brand-new ads launched by your competitors since the last run**. Connect it to Slack, Make, n8n, or Zapier for real-time competitor ad alerts!

#### Mode 5 — 🌍 Deep EU Transparency Reach, Impressions & A/B Variations (`includeDetails: true`)

Need regional impression ranges (`impressionsMin`, `impressionsMax`), per-platform reach (`SEARCH`, `YOUTUBE`, `SHOPPING`), audience targeting signals, and every A/B copy variation inside a creative? Enable `includeDetails: true` to query `LookupService/GetCreativeById` for each ad.

***

### 📦 Rich Output Sample (35 B2B Intelligence Fields)

#### A. Standard Ad Creative Output (`resultType: "ads"`)

```json
{
  "resultType": "ad",
  "query": "canva.com",
  "advertiserId": "AR06374349942554624001",
  "advertiserName": "Canva, Pty Ltd",
  "advertiserLegalName": "Canva, Pty Ltd",
  "advertiserCountry": "AU",
  "advertiserVerified": true,
  "creativeId": "CR03498865944858460161",
  "googleCustomerId": "1481959278",
  "adGroupId": "194925389250",
  "googleCreativeId": "825121438534",
  "adFormat": "VIDEO",
  "targetDomain": "canva.com",
  "headline": "Free templates",
  "description": "Thousands of free, easy-to-use templates",
  "callToAction": "Start Designing",
  "destinationUrl": "https://www.canva.com/templates/",
  "imageUrl": "https://i.ytimg.com/vi/R-rJlpB_hZ4/hqdefault.jpg",
  "videoUrl": "https://www.youtube.com/watch?v=R-rJlpB_hZ4",
  "thumbnailUrl": "https://i.ytimg.com/vi/R-rJlpB_hZ4/hqdefault.jpg",
  "dimensions": "480x360",
  "firstShown": "2026-09-18",
  "lastShown": "2026-10-20",
  "daysActive": 34,
  "isLongRunningWinner": true,
  "longevityTier": "🔥 Proven Winner (30-89 days)",
  "adGroupScaleCount": 3,
  "clonedCreativeIds": [
    "CR14285118993806131201",
    "CR03477844382047010817"
  ],
  "clonedAdGroupIds": [
    "194925389250",
    "194925389210",
    "194925389170"
  ],
  "impressionsMin": 500000,
  "impressionsMax": 1000000,
  "targetRegions": [
    {
      "countryCode": "US",
      "countryName": "United States",
      "impressionsMin": 500000,
      "impressionsMax": 1000000,
      "firstShownDate": "2026-09-18",
      "lastShownDate": "2026-10-20"
    }
  ],
  "variationsCount": 3,
  "parentEntityWarning": false,
  "adTransparencyUrl": "https://adstransparency.google.com/advertiser/AR06374349942554624001/creative/CR03498865944858460161",
  "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?..."
}
```

#### B. Lead-Gen Advertiser Check Output (`resultType: "advertisers"`)

```json
{
  "resultType": "advertiser",
  "query": "shopify.com",
  "isRunningGoogleAds": true,
  "advertiserId": "AR01625195283841286145",
  "advertiserName": "Shopify Inc.",
  "advertiserLegalName": "Shopify Inc.",
  "advertiserCountry": "CA",
  "advertiserVerified": true,
  "targetDomain": "shopify.com",
  "approxAdsCount": "100+ Active Ads",
  "activeAdsSampleCount": 10,
  "hasEvergreenWinners": true,
  "evergreenWinnersSampleCount": 6,
  "longestRunningAdDays": 1520,
  "topFormat": "TEXT",
  "formatBreakdown": { "TEXT": 5, "IMAGE": 3, "VIDEO": 2 },
  "sampleWinnerHeadlines": [
    "Start & Grow Your E-Commerce Brand — Try Shopify Free Then $1/Month"
  ],
  "parentEntityWarning": false,
  "adTransparencyUrl": "https://adstransparency.google.com/advertiser/AR01625195283841286145?region=US"
}
```

***

### 💰 Transparent Modular Pricing (No Hidden Add-On Traps!)

Every free Apify account receives **$5.00 in free monthly usage credit** — enough to extract **~3,330 full competitor ads (with decoded text & winner tiers)** every single month for **$0.00**!

| # | Billing Event | Price | When It Applies |
|---|---|---|---|
| 1 | **`result` (`apify-default-dataset-item`)** | **`$0.0015 / ad` (`$1.50 / 1,000 ads`)** | Every ad extracted in `resultType: "ads"`. **Includes Decoded Headline, Description, CTA, Image/Video URLs, Campaign IDs & Winner Tier for FREE!** |
| 2 | **`detail` (Optional Deep EU/Variations Add-On)** | **`+$0.0025 / ad` (`+$2.50 / 1,000 ads`)** | Only charged when you explicitly enable `includeDetails: true` for EU reach/impressions & all A/B variations. |
| 3 | **`advertiser` (B2B Advertiser Summary Add-On)** | **`+$0.0010 / advertiser` (`$2.50 / 1,000 domains` total)** | Added to the `$1.50 / 1k` dataset item fee when running in `resultType: "advertisers"` (`$1.50 + $1.00 = $2.50 / 1,000`). |

#### Real-World Cost Examples

- **Spying on 500 competitor ads with full decoded headlines, video links & Winner Tiers (`includeDetails: false`):** `500 × $0.0015` = **`$0.75`** (vs. `$2.00` on other scrapers — **62% cheaper!**).
- **Checking 1,000 B2B prospect domains to see who runs Google Ads (`resultType: "advertisers"`):** **`$2.50` total**.
- **Extracting 1,000 ads with full EU reach, audience criteria & A/B variations (`includeDetails: true`):** **`$4.00` total** (vs. `$7.00` on other scrapers — **43% cheaper!**).

***

### 🛡️ 24/7 Automated Canary SLA & Frequently Asked Questions

- **Automated Daily Health Checks:** This Actor is monitored 24/7 by our automated Canary testing pipeline against live Google Ads Transparency endpoints to guarantee `0%` schema drift.
- **Need an Instant Free Browser Preview?** Try our interactive web tool at **[VoxaTools.com — Google Ads Transparency Spy Checker](https://voxatools.com/tools/google-ads-transparency-checker)** before running bulk jobs on Apify.
- **How do I avoid parent-company false positives (e.g., `github.com` returning Microsoft ads)?** Check the boolean `parentEntityWarning` field in the output. When `true`, Google mapped a subsidiary domain to its parent corporate entity; you can then filter by `targetDomain` or pass the exact `AR...` Advertiser ID.

# Actor input Schema

## `resultType` (type: `string`):

Choose 'ads' to extract full ad creatives + decoded headlines + Winner Tiers ($1.50/1k all-inclusive), or choose 'advertisers' for B2B Lead-Gen Ad-Check mode to quickly verify if a list of domains is running Google Ads ($2.50/1k advertisers).

## `queries` (type: `array`):

Enter competitor website domains (e.g., 'shopify.com', 'hubspot.com'), brand names (e.g., 'Nike'), Google Advertiser IDs (e.g., 'AR01625195283841286145'), or full adstransparency.google.com URLs.

## `urlsFromFile` (type: `string`):

Paste a public Google Sheet link, a URL to a .csv / .txt file, or a comma/newline-separated list of domains to merge with 'queries'.

## `region` (type: `string`):

Filter ads shown in a specific country (ISO-2 code like US, GB, DE, FR, VN, SG, AU, CA, JP) or select 'ALL' for global ads.

## `adFormat` (type: `string`):

Filter by ad creative format: All formats, Text Search Ads, Image Display Ads, or Video/YouTube Ads.

## `platforms` (type: `array`):

Filter ads by specific Google properties where the ad was served: SEARCH, YOUTUBE, SHOPPING, MAPS, or PLAY. Leave empty for all properties.

## `startDate` (type: `string`):

Only return ads active on or after this date (e.g. '2026-01-01').

## `endDate` (type: `string`):

Only return ads active on or before this date (e.g. '2026-12-31').

## `maxAdsPerQuery` (type: `integer`):

Maximum number of ad creatives to extract per domain/advertiser query.

## `onlyLongRunningWinners` (type: `boolean`):

Exclusive Winner Filter: Skip short-lived test ads and only output proven, profitable ads running for at least 30 days (or minDaysActive).

## `minDaysActive` (type: `integer`):

Only return ads that have been actively running for at least this many days (0 = return all; 90 = Evergreen Winners only).

## `deduplicateVisualClones` (type: `boolean`):

When enabled (recommended), automatically merges identical creatives duplicated across multiple Ad Groups so you only pay ONCE per unique ad, while outputting 'adGroupScaleCount', 'clonedAdGroupIds', and 'clonedCreativeIds' to show which ads your competitor is aggressively scaling!

## `includeDetails` (type: `boolean`):

Note: Ad Headlines, Descriptions, Video URLs & Winner Tiers are ALREADY included FREE in the base tier! Enable this only if you also need per-creative GetCreativeById lookups for all A/B variations, EU transparency impression ranges, and audience targeting signals.

## `onlyNewAds` (type: `boolean`):

When enabled on scheduled daily/weekly runs, remembers previously extracted creativeIds in a named Key-Value Store and only outputs brand-new competitor ads!

## `monitorStoreName` (type: `string`):

Named Key-Value Store used to persist seen creativeIds across scheduled runs when 'onlyNewAds' is enabled.

## `proxyConfiguration` (type: `object`):

Our Zero-Browser Protobuf RPC engine runs at $0 proxy cost for standard runs (<60 pages). Only enable Datacenter/Residential proxy if scraping 50,000+ ads in bulk.

## Actor input object example

```json
{
  "resultType": "ads",
  "queries": [
    "shopify.com",
    "hubspot.com",
    "canva.com"
  ],
  "region": "US",
  "adFormat": "ALL",
  "platforms": [],
  "maxAdsPerQuery": 20,
  "onlyLongRunningWinners": false,
  "minDaysActive": 0,
  "deduplicateVisualClones": true,
  "includeDetails": false,
  "onlyNewAds": false,
  "monitorStoreName": "ads-transparency-monitor"
}
```

# Actor output Schema

## `adsDataset` (type: `string`):

Full list of extracted Google Ads creatives with decoded headlines, descriptions, media URLs, longevity winner tiers, and regional stats.

## `competitorSummary` (type: `string`):

Aggregated competitor ad strategy report (format share, top headlines, CTAs, winning ad ratio, active date range) ready for AI Agents & LLMs.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "shopify.com",
        "hubspot.com",
        "canva.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("voxatools/google-ads-transparency-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": [
        "shopify.com",
        "hubspot.com",
        "canva.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("voxatools/google-ads-transparency-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "shopify.com",
    "hubspot.com",
    "canva.com"
  ]
}' |
apify call voxatools/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,voxatools/google-ads-transparency-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ET4zuyvhZOEjQE7bf/builds/at5ussEqc1Ijwdonu/openapi.json
