# Google Ads Transparency Scraper: every ad of any advertiser (`bepolabs/google-ads-transparency`) Actor

Monitor brands without a login. Enter domains, IDs or names; get filterable output with sizes, formats and permalinks for reports, agencies and AI agents. Costs 1 USD per 1,000 ads.

- **URL**: https://apify.com/bepolabs/google-ads-transparency.md
- **Developed by:** [BEPO Labs](https://apify.com/bepolabs) (community)
- **Categories:** Marketing, Lead generation, Developer tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 93.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 ads

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

### 📢 What is Google Ads Transparency Scraper?

See who pays for what: this Actor reads the Google Ads Transparency data of a business and returns each of its ads as a tidy row. Start from a domain, an ID or just a brand such as Canva, narrow by country, format and period, and collect up to 2,000 per target in one run.

- **Competitor ad research**: see which ads your competitors run, how long they keep them and in which countries
- **Creative inspiration**: collect the image ads of a whole category to study formats, sizes and messages
- **Agency pitches and audits**: show a prospect what their competitors advertise before the first meeting
- **Brand protection**: find ads that link to your domain from advertisers you do not know
- **Market and compliance research**: track how long ads stay live and which regions they target over time

![Google Ads Transparency Scraper: Every ad a company runs on Google, by domain, advertiser ID or name, from the Ads Transparency Center.](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/google-ads-transparency-hero.png)

#### ✨ Why use this Actor?

- ✅ **Three ways in**: websites, verified IDs or plain names, mixed in one run (up to 50 targets)
- ✅ **Region, format and period filters**: two-letter country codes for over 50 countries, text, image or video only, and a shown-from and shown-until limit
- ✅ **Dates you can sort on**: first and last shown as ISO timestamps, so you can see at once which ads are new and which still run
- ✅ **Direct links**: each row points to the ad's page in the Transparency Center and to the archived creative
- ✅ **No login, no cookies**: uses the same public calls the Transparency Center page makes in your browser
- ✅ **Pay per ad**: 1 USD per 1,000 ads; targets that fail cost nothing

### 📦 What data can you get with Google Ads Transparency Scraper?

| | | |
|---|---|---|
| 🏢 Advertiser name | 🆔 Advertiser ID and creative ID | 🎞️ Format: text, image or video |
| 🖼️ Ad image URL | 📐 Width and height | ▶️ Preview URL |
| 🌐 Advertised domain | 📅 First shown | 🕒 Last shown |
| 🗺️ Region | 🔗 Link to the ad in the Transparency Center | 🎯 The target it was found by |

> Text ads are archived as pictures, so they usually carry an image URL and a size too. Video and some other ads come with Google's preview instead.

### 🚀 How to use Google Ads Transparency Scraper

Google Ads Transparency Scraper works in a few clicks, no coding needed:

1. [Create a free Apify account](https://console.apify.com/sign-up) (the free plan includes 5 USD of monthly credit).
2. Open [Google Ads Transparency Scraper](https://apify.com/bepolabs/google-ads-transparency) and click **Try for free**.
3. Enter one or more websites, IDs or names. Optionally pick a region, a format and a period, and set how many ads you want each.
4. Click **Start** and wait for the run to finish (most runs take seconds).
5. Download your data as JSON, CSV, Excel, XML or HTML, or send it straight to Google Sheets, Make, Zapier or your AI agent.

![How Google Ads Transparency Scraper works](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/google-ads-transparency-workflow.png)

### ⬇️ Input

Add at least one domain, ID or brand name, up to 50 in total. Everything else is optional.

##### Domain, ID or name?

A **website** (`nike.com`; full URLs are shortened) finds every ad linking to it, from any buyer. An **ID** (`AR` and 20 digits) is the exact account from the Transparency Center URL. A **name** is matched to the advertiser called exactly that with the most ads, else the closest suggestion.

##### Region

A two-letter country code such as US, DE or GB limits results to ads shown there. The default `anywhere` covers every region.

##### How many ads

`maxAdsPerTarget` caps each target (default 100, up to 2,000). Ads come newest first, 40 per request.

| Field | Type | What it does | Default |
|---|---|---|---|
| **Domains** (`domains`) | array | Advertised domains, e.g. | `["nike.com"]` |
| **Advertiser IDs** (`advertiserIds`) | array | Verified advertiser IDs (AR followed by 20 digits), as in the Transparency Center's advertiser URL. |  |
| **Advertiser names** (`advertiserNames`) | array | Names such as Canva; each is matched to the advertiser with that exact name and the most ads (else the closest suggestion). |  |
| **Region** (`region`) | string | Two-letter country where the ads were shown (US, DE, GB ...), or anywhere. | `"anywhere"` |
| **Format** (`format`) | string | Return only ads of this creative format: "all", "text", "image" or "video". | `"all"` |
| **Shown from** (`dateFrom`) | string | Only ads shown on or after this day (YYYY-MM-DD). |  |
| **Shown until** (`dateTo`) | string | Only ads shown on or before this day (YYYY-MM-DD). |  |
| **Max ads per domain or advertiser** (`maxAdsPerTarget`) | integer | 1 to 2,000; ads come newest first, 40 per call. | `100` |
| **Proxy** (`proxyConfiguration`) | object | Google shows one IP its captcha page after a few dozen calls; Apify Proxy (datacenter, on by default) gives each retry a new IP. | `{"useApifyProxy":true}` |

![Google Ads Transparency Scraper input form](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/google-ads-transparency-input.png)

#### Input example

```json
{
    "domains": [
        "nike.com"
    ],
    "region": "US",
    "maxAdsPerTarget": 50
}
```

### ⬆️ Output

Every ad becomes one row. The run summary in the key-value store (`OUTPUT`) has a line per target with the ads saved, the total Google reports and the error if it failed.

![Google Ads Transparency Scraper output table](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/google-ads-transparency-output.png)

#### Output example

One row of the dataset (local run on nike.com in the US, 2026-10-16):

```json
{
    "target": "nike.com",
    "targetType": "domain",
    "advertiserId": "AR16735076323512287233",
    "advertiserName": "Nike, Inc.",
    "creativeId": "CR06462557060302110721",
    "format": "text",
    "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/142794422222513915",
    "width": 348,
    "height": 419,
    "previewUrl": null,
    "domain": "nike.com",
    "firstShown": "2023-11-16T22:40:58.000Z",
    "lastShown": "2026-10-16T02:52:44.000Z",
    "region": "US",
    "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR06462557060302110721?region=US"
}
```

View the results as a table or JSON in the Output tab and download them as JSON, CSV, Excel, XML, HTML or RSS, all fields or only those you pick.

### 💰 How much does Google Ads Transparency Scraper cost?

Google Ads Transparency Scraper is priced **per event**: **1 USD per 1,000 ads** (0.001 USD each), with no monthly rental. Each saved ad is billed once; targets that fail (no advertiser found, Google's captcha page) cost nothing.

| You get | You pay |
|---|---|
| 100 ads | 0.1 USD |
| 1,000 ads | 1 USD |
| 10,000 ads | 10 USD |
| 100,000 ads | 100 USD |

💡 Apify's free plan gives you 5 USD of credit every month, enough for about **5,000 ads** at no cost. Set a spending limit per run and the Actor stops there.

### ⚖️ Google Ads Transparency Scraper vs. the alternatives

| | Google Ads Transparency Scraper | Transparency Center website | Ad intelligence suites |
|---|---|---|---|
| **Search by domain, ID or name** | ✅ all three, mixed | ✅ one at a time | ✅ |
| **Many advertisers in one go** | ✅ up to 50 per run | ❌ | ✅ |
| **Export to CSV, Excel, JSON** | ✅ | ❌ | ✅ |
| **Schedules, API and MCP for AI agents** | ✅ | ❌ | API on higher plans |
| **Price** | ✅ 1 USD per 1,000 ads | free, by hand | monthly subscription |

### 🔌 Integrations, API and MCP

#### Connect Google Ads Transparency Scraper to your AI agent (MCP)

Give Claude, ChatGPT, Cursor or any MCP client direct access to Google Ads Transparency Scraper through the [Apify MCP server](https://mcp.apify.com). Add this URL to its settings:

```text
https://mcp.apify.com/?actors=bepolabs/google-ads-transparency
```

For Claude Desktop, add it under `mcpServers` in `claude_desktop_config.json`:

```json
{
    "mcpServers": {
        "google-ads-transparency": {
            "command": "npx",
            "args": [
                "-y",
                "@apify/actors-mcp-server",
                "--actors",
                "bepolabs/google-ads-transparency"
            ],
            "env": {
                "APIFY_TOKEN": "<your Apify API token>"
            }
        }
    }
}
```

Then ask: *"Show me the newest 20 ads that link to nike.com in the US and summarise which formats they use."*

#### Run it from your code

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("bepolabs/google-ads-transparency").call(run_input={"domains":["nike.com"],"region":"US","maxAdsPerTarget":50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

JavaScript (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('bepolabs/google-ads-transparency').call({"domains":["nike.com"],"region":"US","maxAdsPerTarget":50});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### No-code integrations

Send results to **Google Sheets, Slack, Airtable, HubSpot, Make, Zapier, n8n** and more from the Integrations tab, start runs on a **schedule**, or trigger your own endpoint with a **webhook** when a run finishes. The [Apify API](https://docs.apify.com/api/v2) gives you full control over runs and datasets.

### ❓ FAQ

##### Where does the data come from?

From Google's Ads Transparency Center (adstransparency.google.com), where Google publishes the ads of verified advertisers. The Actor repeats the calls your browser makes.

##### Why does a target say "captcha page"?

Google rate-limits busy IP addresses and then answers with its captcha page. The run summary names this and the Actor retries with backoff; if it persists, run again later with fewer inputs. Such runs are not charged.

##### Why do I get fewer ads than Google's total?

`maxAdsPerTarget` caps each input (default 100, at most 2,000). The run summary shows the total Google reports for each one.

##### Can I find an advertiser by name?

Yes. The name is matched to the advertiser called exactly that with the most ads; when none fits, the closest suggestion is used. The summary shows which ID was picked.

##### Which countries can I filter by?

Over 50 countries by two-letter code, among them US, GB, DE, FR, ES, IT, NL, CA, AU, IN, BR, MX and JP, or `anywhere` for all regions.

##### Is it legal to use Google Ads Transparency Scraper?

The Ads Transparency Center is an archive where Google lets anyone see who advertises and what; the Actor reads only that data, without a login, and Google's site has no robots.txt rule against it. The requests are the page's own and not an official API, so they can change. Ad creatives belong to their advertisers: use them for research and analysis, and check the rules that apply to you before you republish them.

##### What if something is missing or does not work?

Open an issue on the **Issues** tab; we read each one and reply. Feature requests are welcome too.

### 💬 Your feedback

Tell us what Google Ads Transparency Scraper should add on the **Issues** tab or leave a review; your notes decide what we work on next.

### 🔗 Related Actors

| Actor | What it does |
|---|---|
| 📈 [Google Trends Scraper](https://apify.com/bepolabs/google-trends) | Interest over time for up to five keywords on one 0 to 100 scale, any country or worldwide, plus top and rising related queries. |
| 📈 [Wikipedia Pageviews](https://apify.com/bepolabs/wikipedia-pageviews) | Daily or monthly views of any Wikipedia article in any language, with totals and averages, from the official Wikimedia API. |
| 📇 [Website Contacts](https://apify.com/bepolabs/website-contacts) | Company websites to emails, phone numbers and social profiles, one row per site, with a status that says why nothing was found. |
| 💼 [ATS Jobs](https://apify.com/bepolabs/ats-jobs) | Every open job from company career boards on Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee in one deduped feed. |
| 🌐 [Domain RDAP and DNS](https://apify.com/bepolabs/domain-rdap) | Domains to registrar, creation and expiry dates, age, status, nameservers, DNSSEC and DNS records from official RDAP, in bulk. |
| 📍 [OpenStreetMap Places](https://apify.com/bepolabs/osm-pois) | Shops, restaurants and offices in any city or area, with address, phone, website, opening hours and coordinates. |
| 🛍️ [Shopify Products](https://apify.com/bepolabs/shopify-products) | Any Shopify store URL to every product, with variants, prices, sale prices, SKUs, stock and images. |
| 🧩 [Tech Stack Detector](https://apify.com/bepolabs/tech-stack) | Any list of domains to the technologies behind each site: CMS, shop, framework, analytics, CDN and hosting. |

# Changelog

This Actor's version history is a separate document: https://apify.com/bepolabs/google-ads-transparency/changelog.md

# Actor input Schema

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

Advertised domains, e.g. nike.com. Every ad that links to the domain, from any advertiser.

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

Verified advertiser IDs (AR followed by 20 digits), as in the Transparency Center's advertiser URL.

## `advertiserNames` (type: `array`):

Names such as Canva; each is matched to the advertiser with that exact name and the most ads (else the closest suggestion).

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

Two-letter country where the ads were shown (US, DE, GB ...), or anywhere.

## `format` (type: `string`):

Only ads of this format.

## `dateFrom` (type: `string`):

Only ads shown on or after this day (YYYY-MM-DD).

## `dateTo` (type: `string`):

Only ads shown on or before this day (YYYY-MM-DD).

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

1 to 2,000; ads come newest first, 40 per call.

## Actor input object example

```json
{
  "domains": [
    "nike.com"
  ],
  "region": "anywhere",
  "format": "all",
  "maxAdsPerTarget": 100
}
```

# 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": [
        "nike.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bepolabs/google-ads-transparency").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": ["nike.com"] }

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

```

## MCP server setup

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

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/LI54D5zoSDhoSqIDe/builds/bLyO1Xd9VCpEQ03T7/openapi.json
