# Google Ads Transparency Scraper (`piotrv1001/google-ads-transparency-scraper`) Actor

Scrape the Google Ads Transparency Center: every Search, YouTube, Display and Shopping ad of any advertiser or website, with format, first and last shown dates, days running, image and preview links, every variation and EU impression ranges. Filter by country, format and date.

- **URL**: https://apify.com/piotrv1001/google-ads-transparency-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Marketing, Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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

### 🚀 Google Ads Transparency Scraper

Get **every Google ad an advertiser runs**, straight from the Google Ads Transparency Center. The **Google Ads Transparency Scraper** takes website domains, advertiser names, advertiser IDs or Transparency Center links and returns each ad with its advertiser, format (text, image, video), first and last shown dates, number of days shown, image or preview link and a link to the ad page. Turn on details to add every variation of the ad, each country it ran in and, for ads shown in the EU, impression ranges. Use it to track competitor advertising on Google Search, YouTube, Shopping and display, collect creatives for inspiration, or find companies that are actively buying ads.

### ✨ Features

- 🌐 **Any Advertiser Input**: Website domains (`nike.com`), advertiser names (`Nike, Inc.`), advertiser IDs (`AR16735076323512287233`) or Transparency Center links.
- 📚 **Many Advertisers per Run**: Bulk competitor lists in one run.
- 🌍 **Any Country**: A 2-letter country code (US, GB, DE…) or anywhere (default).
- 🎞️ **Format and Date Filters**: Text, image or video ads only, and ads shown since a date.
- 🔍 **Details on Demand**: Every variation, each country with first and last shown dates, EU impression ranges and the ad category.
- ⏱️ **Longevity Signal**: Days shown for every ad: long-running ads are the ones that work.
- 🧹 **No Duplicates**: An ad found through two inputs (a domain and its advertiser) is saved and charged once.

### 🛠️ How It Works

1. **Paste domains, advertiser names or advertiser IDs**, one per line.
2. **Pick the region, format and how many ads you want**: the default is 50.
3. **Run the Scraper**: download the results as JSON, CSV or Excel or pull them through the API.

### ⚙️ Input

| Field               | What it does                                                                                              |
| ------------------- | --------------------------------------------------------------------------------------------------------- |
| **Advertisers**     | Domains, advertiser names, advertiser IDs or Transparency Center links, one per line. Default `nike.com`.  |
| **Region**          | 2-letter country code or `anywhere`. Default `anywhere`.                                                   |
| **Ad format**       | `any`, `text`, `image` or `video`. Default `any`.                                                          |
| **Shown since**     | Only ads shown on or after this date (YYYY-MM-DD). Optional.                                               |
| **Include details** | Adds variations, countries, EU impression ranges and category. Slower, same price. Default off.            |
| **Max ads**         | Stop after this many ads in total (all advertisers together). Default 50.                                  |

```json
{
    "advertisers": ["nike.com", "adidas.com", "AR16735076323512287233"],
    "region": "US",
    "format": "video",
    "shownSince": "2026-09-01",
    "includeDetails": true,
    "maxItems": 1000
}
```

- A **domain** returns ads from every advertiser verified for that website (the brand, its country entities and its agencies).
- An **advertiser name** is matched to the advertiser with exactly that name (legal suffixes such as Inc. or GmbH are ignored) and the most ads. The log shows the advertiser that was picked. For an exact advertiser, use its ID from the Transparency Center (`AR…`).
- A **Transparency Center link** keeps its own region and format.
- Names, domains and IDs that match nothing are skipped and not charged; the status message lists them.

### 💰 Pricing

Pay only for the ads you get. No monthly rental.

| Event           | Price                                | What you get                              |
| --------------- | ------------------------------------ | ----------------------------------------- |
| **Ad**          | $0.0008 per ad ($0.80 per 1,000)     | One ad with all the fields below          |
| **Actor start** | $0.00005 per run                     | Charged once when the run starts.         |

Details cost nothing extra. Examples: 50 ads = $0.04 · 1,000 ads = $0.80 · 10,000 ads = $8.00.

### 📊 Sample Output Data

```json
{
    "creativeId": "CR14731811200501284865",
    "advertiserId": "AR12605932698289045505",
    "advertiserName": "mybestbrands GmbH",
    "domain": "nike.com",
    "format": "IMAGE",
    "firstShown": "2025-10-20T12:43:08.000Z",
    "lastShown": "2026-10-19T08:31:19.000Z",
    "daysShown": 314,
    "imageUrl": null,
    "width": null,
    "height": null,
    "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=6518376971&creativeId=780048249803&...",
    "googleCreativeId": "780048249803",
    "googleCustomerId": "6518376971",
    "adGroupId": "188262729778",
    "adUrl": "https://adstransparency.google.com/advertiser/AR12605932698289045505/creative/CR14731811200501284865?region=DE",
    "region": "DE",
    "input": "nike.com",
    "variationCount": 3,
    "variations": [
        { "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?..." }
    ],
    "regionsShown": [
        { "region": "DE", "firstShown": "2025-10-20", "lastShown": "2026-10-19", "impressionsMin": 6000000, "impressionsMax": 7000000 }
    ],
    "impressionsMin": 6000000,
    "impressionsMax": 7000000,
    "category": "Apparel & Accessories",
    "scrapedAt": "2026-10-19T11:40:25.611Z"
}
```

- `format` `TEXT` = a search text ad. Its `imageUrl` is Google's picture of the ad as shown on Search (headline, link and description).
- `imageUrl` is a direct image link for text and plain image ads; video, Shopping and rich ads have a Google-hosted `previewUrl` instead.
- `daysShown` = how many days the ad has been shown. `firstShown`, `lastShown` and `daysShown` count all countries together; per-country dates are in `regionsShown` (details on).
- `googleCustomerId` and `adGroupId` group ads from the same ad account and ad group (present when the ad has a `previewUrl`).
- `variationCount`, `variations`, `regionsShown`, `impressionsMin`, `impressionsMax` and `category` come with **Include details** on. Impression ranges are published for ads shown in the EU only; elsewhere they are `null`.

### ❓ FAQ

**Do I need a Google account?** No.

**Why does a big brand's domain return ads from other advertisers?** The Transparency Center lists every advertiser verified to run ads for that website: country entities and media agencies included. Use an advertiser ID to get one advertiser only.

**Can I get the ads of a political campaign?** This Actor covers the advertiser ad pages; political ad spend reports are not included.

### 🔗 More Ad Library Actors

- [Facebook Ads Library Scraper](https://apify.com/piotrv1001/facebook-ads-library-scraper): search all Meta ads by keyword, country and filters.
- [Facebook Page Ads Scraper](https://apify.com/piotrv1001/facebook-page-ads-scraper): every ad a Facebook page runs.

# Actor input Schema

## `advertisers` (type: `array`):

Website domains (nike.com), advertiser names (Nike, Inc.), advertiser IDs (AR16735076323512287233) or Ads Transparency Center links, one per line.

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

Where the ads were shown: a 2-letter country code (US, GB, DE, BR…) or anywhere.

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

Text, image or video ads only, or all formats.

## `shownSince` (type: `string`):

Only ads shown on or after this date (YYYY-MM-DD). Leave empty for all ads.

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

Add every variation of each ad, each country it ran in with first and last shown dates and, for ads shown in the EU, impression ranges. Slower, same price.

## `maxItems` (type: `integer`):

Stop after this many ads in total (all advertisers together).

## Actor input object example

```json
{
  "advertisers": [
    "nike.com"
  ],
  "region": "anywhere",
  "format": "any",
  "includeDetails": false,
  "maxItems": 50
}
```

# Actor output Schema

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

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

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

```

## MCP server setup

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