# Google Ads Transparency Scraper & Bulk Domain Ad Checker (`mamang_warkop/google-ads-transparency-scraper`) Actor

Extract text, image & video ads from Google Ads Transparency Center, bulk-check if a list of domains runs Google Ads (for B2B lead gen), or summarize competitor ad strategy. Supports domains, brand names, AR IDs & URLs.

- **URL**: https://apify.com/mamang_warkop/google-ads-transparency-scraper.md
- **Developed by:** [Wilda Adri Perta](https://apify.com/mamang_warkop) (community)
- **Categories:** Lead generation, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 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 Scraper & Bulk Domain Ad-Spend Checker (3-in-1)

Extract active **text, image, and video ad creatives** from the **Google Ads Transparency Center** (Google Ad Library), bulk-qualify **whether thousands of B2B prospect domains are actively paying for Google Ads**, or generate an instant **Competitor Ad Strategy Summary** — with **zero login, zero cookies, and zero headless browser overhead**.

***

### Why Choose This Actor Over Other Google Ads Scrapers?

| Feature | Our Actor (`mamang_warkop`) | Typical Ads Transparency Scrapers |
| :--- | :--- | :--- |
| **Primary Brand Advertiser Resolution** | **Smart Volume & Domain Matching:** Matches the true primary brand advertiser (`shopify.com` → `Shopify Inc.`, 70,000+ ads) instead of random third-party resellers. | Often returns the first small merchant or affiliate mentioning the domain (`Life and Fork Pty Ltd`). |
| **3-in-1 Modes Included** | **`ads` + `check_domains` + `summary`** in a single Actor. | Requires paying for 2–3 separate Actors. |
| **B2B Ad-Spend Tier & Sales Pitch Angle** | Automatically classifies **`adSpendTier`** (`Enterprise`, `Growth`, `Active`, `Testing`, `None`) + generates **`agencyPitchAngle`** for cold outreach. | Raw numbers only. |
| **Dynamic Placeholder Cleanup** | Automatically cleans `{KeyWord:Running Shoes}` into clean human-readable copy (`Running Shoes`). | Raw unparsed Google internal syntax. |
| **Flexible Input Parsing** | Accepts **domains** (`nike.com`), **full URLs** (`https://www.nike.com/running`), **brand names** (`Nike`), **AR IDs** (`AR1837...`), or **Transparency URLs**. | Breaks if you paste a full URL or brand name. |
| **Speed & Compute Cost** | **Pure HTTP RPC** — finishes in seconds using minimal Apify memory (512 MB). | Heavy Playwright/Puppeteer browsers that eat up your compute credits. |

***

### Step-by-Step Usage Guide (Panduan Penggunaan)

#### Option A: Run Directly in Apify Console (No Coding Required)

1. **Enter Target Queries (`queries`):** Type or paste one or more company domains (`nike.com`, `shopify.com`), brand names (`Stripe`), or Google Advertiser IDs (`AR09026146787696115713`).
2. **Select Mode (`mode`):**
   - Choose **`Extract Ad Creatives (ads)`** if you want every individual ad's headline, description, landing page URL, image link, and video URL.
   - Choose **`Bulk Check Domains for Active Google Ads (check_domains)`** if you have a list of B2B lead domains (from Apollo, Clay, or Google Maps) and want to know which companies are actively spending money on Google Ads.
   - Choose **`Advertiser Strategy Summary (summary)`** for a high-level breakdown of ad formats (`text` vs `image` vs `video`) and top destination domains.
3. **Choose Region (`region`):** Leave as `"anywhere"` for global ad activity, or enter a 2-letter ISO country code (`"US"`, `"GB"`, `"DE"`, `"AU"`, `"CA"`, `"ID"`, `"SG"`, `"BR"`, etc.).
4. Click **Start** at the bottom, then download your results in **Excel, CSV, or JSON** from the **Storage / Dataset** tab.

***

#### Option B: Automate with Clay.com, n8n, or Make.com

Use the synchronous REST endpoint to enrich leads in real time inside **Clay**, **n8n** (`HTTP Request` node), or **Make.com**:

```bash
curl -X POST "https://api.apify.com/v2/acts/mamang_warkop~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["nike.com", "shopify.com", "gymshark.com"],
    "mode": "check_domains",
    "region": "anywhere"
  }'
```

***

#### Option C: Call via Python or JavaScript SDK

##### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")
run = client.actor("mamang_warkop/google-ads-transparency-scraper").call(
    run_input={
        "queries": ["nike.com", "shopify.com"],
        "mode": "ads",
        "maxAdsPerQuery": 25,
        "adFormat": "all",
        "region": "US",
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["advertiserName"], item["format"], item.get("headline") or item.get("imageUrl"))
```

##### JavaScript / Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
const run = await client.actor('mamang_warkop/google-ads-transparency-scraper').call({
    queries: ['nike.com', 'shopify.com'],
    mode: 'check_domains',
    region: 'US',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

***

### Input Parameters Reference

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `queries` | `array` | `["nike.com", "shopify.com"]` | List of domains, full URLs, brand names, Advertiser IDs (`AR...`), or Google Ads Transparency URLs. |
| `mode` | `string` | `"ads"` | `"ads"` (individual creatives), `"check_domains"` (bulk B2B ad-spend qualifier), or `"summary"` (strategy overview). |
| `maxAdsPerQuery` | `integer` | `10` | Maximum number of creatives to fetch per advertiser (1–500). |
| `adFormat` | `string` | `"all"` | Filter creatives by format: `"all"`, `"text"`, `"image"`, or `"video"`. |
| `region` | `string` | `"US"` | `"anywhere"` for global ads, or ISO-2 country code (`"US"`, `"GB"`, `"DE"`, `"CA"`, `"AU"`, `"ID"`, `"SG"`, etc.). |
| `proxyConfiguration` | `object` | Optional | Optional Apify Proxy configuration for very large multi-hundred domain batches. |

***

### Output Examples

#### 1. Mode `ads` (Ad Creative Spy)

```json
{
  "query": "nike.com",
  "advertiserId": "AR18378488041124659201",
  "advertiserName": "Nike Retail BV",
  "advertiserTotalActiveAds": 80000,
  "creativeId": "CR02178781504182681601",
  "format": "text",
  "lastShown": "2026-10-20",
  "region": "US",
  "headline": "Nike Official Store - Free Shipping & Returns",
  "description": "Shop the latest Nike running shoes, apparel, and gear.",
  "destinationUrl": "nike.com",
  "imageUrl": null,
  "videoUrl": null,
  "transparencyUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR02178781504182681601"
}
```

#### 2. Mode `check_domains` (Bulk B2B Ad-Spend Qualifier)

```json
{
  "domain": "shopify.com",
  "runsGoogleAds": true,
  "status": "ok",
  "activeAdsCount": 70000,
  "adSpendTier": "Enterprise Spender (500+ active ads)",
  "agencyPitchAngle": "High-volume Google advertiser (70000 active ads under Shopify Inc.). Pitch landing page CRO, creative testing, or omnichannel attribution.",
  "advertiserId": "AR09026146787696115713",
  "advertiserName": "Shopify Inc.",
  "isParentOrExternalEntity": false,
  "region": "anywhere",
  "advertiserPageUrl": "https://adstransparency.google.com/advertiser/AR09026146787696115713?region=anywhere"
}
```

***

### Transparent Pricing

- **Pay-Per-Event:** `$0.001` per result (`$1.00 per 1,000 results`).
- Covered automatically by Apify's free monthly starter credit (`$5.00/month` = up to **5,000 results/month free**).

### Support & Feature Requests

Have a question, found an edge case, or need a custom field for your agency workflow? Open an issue in the **Issues** tab on this Actor page — we monitor and respond rapidly.

# Actor input Schema

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

Enter one or more domains (e.g. nike.com, shopify.com), advertiser names, Advertiser IDs (AR...), or Google Ads Transparency URLs.

## `mode` (type: `string`):

Choose 'ads' to extract ad creatives, 'check_domains' to bulk-check which domains actively run Google Ads (great for B2B lead generation), or 'summary' for an advertiser strategy overview.

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

Maximum number of ads to return for each domain/advertiser in 'ads' mode (1-500), or sample size in 'summary' mode (1-100).

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

Filter extracted creatives by format (applies to 'ads' mode).

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

ISO country code (e.g. US, GB, DE, FR, CA, AU, ID, IN, SG, BR) or 'anywhere' for global ads.

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

Not required for normal volume. Enable only if running large batches and experiencing rate limits.

## Actor input object example

```json
{
  "queries": [
    "nike.com",
    "shopify.com"
  ],
  "mode": "ads",
  "maxAdsPerQuery": 10,
  "adFormat": "all",
  "region": "anywhere",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "queries": [
        "nike.com",
        "shopify.com"
    ],
    "region": "anywhere"
};

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

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

```

## MCP server setup

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