# Google Ads Transparency Scraper & Funnel Spy | $1.50/1K Ads (`devoted_helix/google-ads-transparency-scraper`) Actor

Extract competitor ads from Google Ads Transparency Center by domain, brand, or advertiser ID. Decodes unlisted YouTube ad videos, copy, days running & landing page pixels.

- **URL**: https://apify.com/devoted_helix/google-ads-transparency-scraper.md
- **Developed by:** [batuhan senavci](https://apify.com/devoted_helix) (community)
- **Categories:** Marketing, Lead generation, Integrations
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.13 / 1,000 google ad creative extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper — Ad Copy, Unlisted YouTube Video & Funnel Spy

Extract live and historical competitor ads from the **Google Ads Transparency Center** by **domain**, **brand name**, **Advertiser ID (`AR...`)**, or pasted Transparency URL — enriched with **exact landing page paths**, **unlisted YouTube video URLs**, **decoded ad copy**, **ad longevity (`daysRunning`)**, and **landing page pixel/funnel teardowns**.

Built on a **stateless high-speed HTTP RPC engine** (runs on just `256 MB` RAM with near-zero compute overhead — no slow headless browser crashes, no login, and no cookies required).

***

### Why Performance Marketers & Agencies Choose This Actor

Most Google Ads scrapers only give you a bare creative ID or fail on pagination. This Actor goes three steps deeper:

1. **Uncovers Hidden Creative Assets (`includeCreativeDetails: true`):**
   - Extracts **unlisted YouTube ad video URLs** (`https://www.youtube.com/watch?v=...`) and high-res thumbnails from Video/Demand Gen preview bundles.
   - Extracts **exact paid-traffic landing page subpaths** (e.g., `https://competitor.com/lp/free-trial` instead of just `competitor.com`).
   - Captures multi-size creative variations, ad copy snippets, and regional impression dates.
2. **Winner / Evergreen Ad Filtering (`minDaysRunning`):**
   - Filter straight to ads running **14+, 30+, or 90+ days** — if a competitor pays Google for the same creative for months, that angle converts.
3. **Optional Landing Page & Pixel Teardown (`analyzeLandingPage: true`, off by default):**
   - Runs only on **exact landing URLs decoded from the creative** (`landingPageSource: "creative_preview"`), so it needs `includeCreativeDetails`. The root-domain fallback (`advertiser_domain_fallback`) is never analyzed or charged.
   - Scans the destination page once per unique URL to extract **Page Title, H1/H2 Hero Hooks, Pricing/Free-Trial Signals, CTA Copy, Retargeting Pixels** (`Meta Pixel`, `Google Ads gtag`, `GTM`, `TikTok Pixel`, `LinkedIn Insight`, `Clarity`, `Hotjar`), and **CMS/Commerce Stack** (`Shopify`, `Webflow`, `Next.js`, `Stripe`, `Klaviyo`, `HubSpot`).
4. **Scheduled Competitor Monitoring (`onlyNewAds: true`):**
   - Schedule daily or weekly runs and connect to Slack, Telegram, Make, n8n, or Zapier to get alerted **only when a competitor launches a brand-new ad creative**.

***

### Input Parameters

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `domains` | `string[]` | `["shopify.com"]` | Competitor domains to spy on (`monday.com`, `notion.so`, etc.). |
| `queries` | `string[]` | `[]` | Brand names or keywords (auto-resolves best verified `AR...` advertiser). |
| `advertiserIds` | `string[]` | `[]` | Direct Google Advertiser IDs (`AR15972262369074085889`). |
| `startUrls` | `string[]` | `[]` | Direct URLs pasted from `adstransparency.google.com`. |
| `resultType` | `"ads" \| "advertisers"` | `"ads"` | Extract ad creatives or discover verified advertiser accounts. `advertisers` searches `queries` plus `domains` (a domain with no direct match is retried as its brand name, e.g. `shopify.com` → `shopify`). |
| `region` | `string` | `"US"` | ISO-2 country code (`US`, `GB`, `DE`, `FR`, `CA`, `AU`, `TR`, `BR`, `IN`, `JP`, etc.). |
| `adFormat` | `"ALL" \| "TEXT" \| "IMAGE" \| "VIDEO"` | `"ALL"` | Filter by ad format. |
| `maxAdsPerTarget` | `integer` | `25` | Max ads to extract per target (supports automatic multi-page token pagination). |
| `minDaysRunning` | `integer` | `0` | Keep only proven ads running at least `N` days. |
| `onlyActiveAds` | `boolean` | `false` | Keep only ads shown within the last 7 days. |
| `includeCreativeDetails` | `boolean` | `true` | Enrich variations, unlisted YouTube video URLs, exact landing URLs, and ad text. |
| `analyzeLandingPage` | `boolean` | `false` | Paid add-on: extract H1 hooks, offer signals, pixels, and tech stack from exact landing pages (requires `includeCreativeDetails`). |
| `onlyNewAds` | `boolean` | `false` | Stateful deduplication across scheduled runs. |

***

### Sample Output Record

```json
{
  "creativeId": "CR08249508655150000000",
  "advertiserId": "AR13684162165480030209",
  "advertiserName": "Shopify Inc.",
  "domain": "shopify.com",
  "landingPageUrl": "https://shopify.com/free-trial",
  "landingPageSource": "creative_preview",
  "format": "VIDEO",
  "status": "ACTIVE",
  "firstShown": "2026-08-14T10:15:00.000Z",
  "lastShown": "2026-11-12T06:20:00.000Z",
  "daysRunning": 90,
  "isEvergreenWinner": true,
  "region": "US",
  "youtubeVideoUrl": "https://www.youtube.com/watch?v=gIzUaZonnD8",
  "thumbnailUrl": "https://i.ytimg.com/vi/gIzUaZonnD8/hqdefault.jpg",
  "adCopySnippets": [
    "Start your free trial today",
    "Build and scale your online store on Shopify"
  ],
  "variationCount": 3,
  "transparencyUrl": "https://adstransparency.google.com/advertiser/AR13684162165480030209/creative/CR08249508655150000000?region=US",
  "landingPageIntel": {
    "analyzedUrl": "https://shopify.com/free-trial",
    "httpStatus": 200,
    "fetchOk": true,
    "pageTitle": "Start a Free Trial — Shopify",
    "h1Hooks": ["Bring your ideas to life for $1/month"],
    "offerSignals": ["free trial", "$1/month"],
    "adPixelsDetected": ["google_ads_gtag", "google_tag_manager", "meta_pixel", "tiktok_pixel"],
    "techStackDetected": ["shopify", "cloudflare"],
    "funnelReadinessScore": 95
  }
}
```

***

### Pricing (Transparent Pay-Per-Event)

No monthly Apify subscription required — pay strictly for what you extract:

- **Ad Creative Extracted (`ad-scraped`):** `$0.0015` per creative (`$1.50 / 1,000 ads`)
- **Full Creative & YouTube/Copy Decode (`creative-detail-fetched`):** `$0.0015` per enriched creative (optional via `includeCreativeDetails`)
- **Competitor Landing Page Funnel Teardown (`landing-page-analyzed`):** `$0.01` per unique landing URL analyzed (cached per run, optional via `analyzeLandingPage`, **off by default**)

How charging works:

- `ad-scraped` is charged first, per ad. Add-on events are only charged for ads that were already paid for.
- `landing-page-analyzed` is charged **only after the page loads successfully (HTTP 2xx)** and only for exact landing URLs decoded from the creative. Blocked or failed pages return `landingPageIntel.fetchOk: false`, `funnelReadinessScore: null`, and cost nothing. Root-domain fallbacks are never analyzed.
- If the run's maximum charge limit is reached, the Actor stops and pushes only what was paid for.

### Failure Behaviour

If Google Ads Transparency Center blocks or fails **every** request in a run and no ads are returned, the run ends as **FAILED** with the upstream error in the status message, and nothing is charged. A run that reaches Google but finds no matching ads succeeds with an empty dataset.

***

### Popular Integrations

- **Make / n8n / Zapier:** Trigger weekly competitor ad digests into Slack, Notion, Airtable, or Google Sheets.
- **AI Agents & MCP Pipelines:** Feed verified competitor hooks, YouTube scripts, and landing page offers straight into Claude, GPT, or Gemini creative generators.

# Actor input Schema

## `domains` (type: `array`):

Exact competitor domains to extract ads for (e.g. shopify.com, monday.com, hubspot.com).

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

Brand names or company keywords. Automatically resolves verified Advertiser IDs (or lists matching advertisers when Result Type = advertisers). Result Type = advertisers searches these names plus the domains above.

## `advertiserIds` (type: `array`):

Direct Google Ads Transparency Advertiser IDs starting with AR (e.g. AR15972262369074085889).

## `startUrls` (type: `array`):

Paste URLs directly from adstransparency.google.com (advertiser pages or domain search URLs).

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

Choose 'ads' to extract ad creatives & funnel intel, or 'advertisers' to discover verified advertiser accounts and ad-volume bands.

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

Two-letter ISO country code where the ads were shown (e.g. US, GB, DE, FR, CA, AU, TR, NL, ES, IT, BR, IN, JP, AE).

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

Filter returned creatives by ad format (ALL, TEXT, IMAGE, or VIDEO).

## `maxAdsPerTarget` (type: `integer`):

Maximum number of ads to return for each domain, brand query, or advertiser ID.

## `minDaysRunning` (type: `integer`):

Only return ads that have been running for at least N days (e.g. set 14 or 30 to filter strictly for profitable evergreen ads).

## `onlyActiveAds` (type: `boolean`):

When enabled, excludes historical paused ads and keeps only ads shown within the last 7 days.

## `includeCreativeDetails` (type: `boolean`):

Fetches full creative variations, regional impression dates, and decodes Google preview bundles to extract exact landing page subpaths, ad text/headlines, and unlisted YouTube video URLs.

## `analyzeLandingPage` (type: `boolean`):

Optional paid add-on ($0.01 per unique landing page). Inspects each exact landing page decoded from the creatives to extract hero H1 hooks, pricing/trial offers, CTAs, tracking pixels (Meta, Google, TikTok, LinkedIn, GTM, Hotjar, Clarity), and SaaS tech stack. Requires 'Enrich Full Creative Details'. Charged only when the page loads successfully; root-domain fallbacks and blocked pages are never charged.

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

Tracks seen creative IDs in a persistent Apify Key-Value Store and outputs only newly launched ads since your previous scheduled run.

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

Custom name for the persistent Key-Value Store when Monitor Mode is enabled.

## Actor input object example

```json
{
  "domains": [
    "shopify.com"
  ],
  "resultType": "ads",
  "region": "US",
  "adFormat": "ALL",
  "maxAdsPerTarget": 25,
  "minDaysRunning": 0,
  "onlyActiveAds": false,
  "includeCreativeDetails": true,
  "analyzeLandingPage": false,
  "onlyNewAds": false,
  "monitorStoreName": "google-ads-competitor-monitor"
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "domains": [
        "shopify.com"
    ],
    "region": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("devoted_helix/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 = {
    "domains": ["shopify.com"],
    "region": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("devoted_helix/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 '{
  "domains": [
    "shopify.com"
  ],
  "region": "US"
}' |
apify call devoted_helix/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devoted_helix/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/tsdhsrhZaEXwJh6uQ/builds/QyyvhtoXnIs640q1n/openapi.json
