# Google Ads Transparency Scraper — Competitor Ads by Brand (`technicaldost/google-ads-transparency-scraper-advertiser-ads`) Actor

Scrape the Google Ads Transparency Center: every ad a brand, website or advertiser ID runs on Google Search, YouTube, Display and Shopping. Format, first and last shown, ad images, preview links, countries and impression ranges. Filter by country and format. $1.50 per 1,000 ads.

- **URL**: https://apify.com/technicaldost/google-ads-transparency-scraper-advertiser-ads.md
- **Developed by:** [Technical Dost Solutions](https://apify.com/technicaldost) (community)
- **Categories:** Marketing, SEO tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 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 gets **every ad an advertiser runs on Google** (Search, YouTube, Display, Shopping, Maps) from the public **Google Ads Transparency Center**. Enter a **brand name, website domain, advertiser ID or Transparency Center link** and get each ad's **format** (text, image, video), **first and last shown dates**, **ad image** or preview link, the advertiser's **legal name**, and the **countries it ran in with impression ranges** and dates. Filter by **country** and **format**. No login, no API key.

### What you get

- Search by brand name (e.g. Booking.com), website domain (e.g. nike.com, finds every advertiser buying ads for that site), advertiser ID (AR...) or a Transparency Center URL.
- Format, first shown and last shown for every ad, so you see what is running now and how long creatives last.
- Ad image URL (archived text and image ads) or interactive preview link (image and video ads) and the Transparency Center link for each ad.
- Per-country reach: the countries each ad ran in, first and last shown dates per country and impression ranges where Google publishes them.
- Advertiser legal name and number of creative variants.
- Filter by country (US, GB, DE, IN ... or anywhere) and by format (text, image, video).
- Handles Google's rate limits by rotating residential IPs automatically.

### How to use Google Ads Transparency Scraper

1. Add **Advertisers**: brand names, domains (e.g. `nike.com`), advertiser IDs (`AR...`) or Transparency Center links.
2. Optionally set **Country** (e.g. `US`) and **Ad format**.
3. Set **Max ads per advertiser** and keep **Ad details** on for countries and impressions.
4. Run and export to JSON, CSV or Excel, or schedule it weekly to catch new creatives.

### Input example

```json
{
  "advertisers": [
    "nike.com",
    "Booking.com",
    "AR02934798844673654785"
  ],
  "region": "US",
  "adFormat": "video",
  "maxAdsPerAdvertiser": 200,
  "includeDetails": true
}
```

All fields are described in the **Input** tab.

### Output example

```json
{
  "advertiserId": "AR02934798844673654785",
  "advertiserName": "Booking.com",
  "creativeId": "CR14428101641955704833",
  "format": "TEXT",
  "firstShown": "2021-10-25T07:00:00.000Z",
  "lastShown": "2026-11-03T17:57:37.000Z",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/11314906390289214151",
  "previewUrl": null,
  "adUrl": "https://adstransparency.google.com/advertiser/AR02934798844673654785/creative/CR14428101641955704833",
  "advertiserLegalName": "Booking.com B.V.",
  "variantCount": 1,
  "variantImageUrls": [
    "https://tpc.googlesyndication.com/archive/simgad/11314906390289214151"
  ],
  "regionCount": 9,
  "regions": [
    {
      "country": "AT",
      "firstShown": null,
      "lastShown": "2026-10-27",
      "impressionsMin": null,
      "impressionsMax": 1000
    },
    {
      "country": "DE",
      "firstShown": null,
      "lastShown": "2026-11-03",
      "impressionsMin": 40000,
      "impressionsMax": 45000
    },
    {
      "country": "BE",
      "firstShown": null,
      "lastShown": "2026-11-02",
      "impressionsMin": null,
      "impressionsMax": 1000
    }
  ],
  "regionFilter": "anywhere",
  "searchInput": "booking.com",
  "scrapedAt": "2026-11-03T18:23:17.758Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `advertiserId` | Advertiser ID (AR...). |
| `advertiserName` | Advertiser name. |
| `creativeId` | Ad (creative) ID (CR...). |
| `format` | TEXT, IMAGE or VIDEO. |
| `firstShown` | First shown (ISO 8601). |
| `lastShown` | Last shown (ISO 8601). |
| `imageUrl` | Archived ad image. |
| `previewUrl` | Interactive preview script URL. |
| `adUrl` | Ad page in the Transparency Center. |
| `advertiserLegalName` | Verified legal name. |
| `variantCount` | Number of creative variants. |
| `variantImageUrls` | Images of all variants. |
| `regionCount` | Countries the ad ran in. |
| `regions` | Countries with firstShown, lastShown, impressionsMin, impressionsMax. |
| `regionFilter` | Country filter used. |
| `searchInput` | Your input that found it. |
| `scrapedAt` | When scraped (ISO 8601). |

Export results as JSON, CSV, Excel, XML or HTML, or read them with the API.

### Use cases

- Competitor ad research: see every ad a rival runs, how long they keep them and where.
- Agencies: creative inspiration, pitch decks and client competitor reports.
- Brand protection: find advertisers bidding on your domain or brand.
- Market entry: which countries a competitor advertises in, and how hard (impression ranges).
- AI agents: give an assistant a live view of a company's Google advertising.

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

This Actor uses **pay-per-event** pricing: **$0.0015 per ad** ($1.5 per 1,000). Platform usage is included. There is no start fee and no extra charge for details. Advertisers with no ads cost nothing.

Set **Maximum cost per run** in the run options to cap your spend; the Actor stops when the limit is reached.

### Use Google Ads Transparency Scraper with AI agents (MCP)

Give Claude, ChatGPT, Cursor or any MCP client this Actor as a tool through the hosted [Apify MCP server](https://mcp.apify.com):

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=technicaldost/google-ads-transparency-scraper-advertiser-ads" --header "Authorization: Bearer YOUR_APIFY_TOKEN"
```

Or in a JSON MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=technicaldost/google-ads-transparency-scraper-advertiser-ads",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

The tool is named `technicaldost--google-ads-transparency-scraper-advertiser-ads`. Ask your agent, for example, to *"run Google Ads Transparency Scraper with {"advertisers": \["nike.com", "Booking.com", "AR02934798844673654785"], "region": "US", "adFormat": "video", "maxAdsPerAdvertiser": 200, "includeDetails": true}"*.

### Run Google Ads Transparency Scraper via API

```bash
curl -X POST "https://api.apify.com/v2/acts/technicaldost~google-ads-transparency-scraper-advertiser-ads/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"advertisers": ["nike.com", "Booking.com", "AR02934798844673654785"], "region": "US", "adFormat": "video", "maxAdsPerAdvertiser": 200, "includeDetails": true}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("technicaldost/google-ads-transparency-scraper-advertiser-ads").call(run_input={"advertisers": ["nike.com", "Booking.com", "AR02934798844673654785"], "region": "US", "adFormat": "video", "maxAdsPerAdvertiser": 200, "includeDetails": True})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('technicaldost/google-ads-transparency-scraper-advertiser-ads').call({"advertisers": ["nike.com", "Booking.com", "AR02934798844673654785"], "region": "US", "adFormat": "video", "maxAdsPerAdvertiser": 200, "includeDetails": true});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations

Schedule runs (daily, hourly) in Apify Console and send results to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or your own webhook.

### FAQ

#### Where does the data come from?

From Google's public Ads Transparency Center (adstransparency.google.com), the same data its website shows. No login.

#### Name, domain or ID: which should I use?

A **domain** returns ads from every advertiser promoting that site. A **name** picks the advertiser with the most ads matching that name (turn on **All matching advertisers** to get up to 10). An **advertiser ID** (AR..., in the Transparency Center URL) is the most precise.

#### Does it include the ad text?

Text and many image ads come as an archived image (`imageUrl`) exactly as Google shows them. Image and video ads that Google renders interactively come as a `previewUrl` plus the Transparency Center link (`adUrl`).

#### What are impressions?

For some countries (notably the EU, under the DSA), Google publishes impression ranges per ad. Other countries show dates only, so impressions are null there.

#### How is it priced?

$1.50 per 1,000 ads, details included. No start fee.

#### Is it legal to scrape this data?

The Actor collects publicly available information only and does not log in or bypass access controls. Use the data in line with the website's terms and the laws that apply to you, especially when processing personal data.

### Related Actors

More tools from the same developer that work well together with this one:

- [Facebook Ads Library | No Login](https://apify.com/technicaldost/facebook-ads-library-scraper): Scrape public ads from the Meta Ad Library by keyword, country and ad type.
- [Google Search Results Scraper](https://apify.com/technicaldost/google-search-results-scraper): Get organic search results for any keyword: title, URL, snippet and position.
- [Google Trends Scraper — Interest, Regions & Related Queries](https://apify.com/technicaldost/google-trends-explorer-interest-related-queries): Google Trends data as JSON: interest over time, interest by country/state/city and related queries (top and rising) for any keywords.

# Actor input Schema

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

Brand names, website domains, advertiser IDs (AR...) or Ads Transparency Center links, e.g. booking.com, Nike, AR02934798844673654785.

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

Two-letter country code (US, GB, DE, IN, ...) or anywhere.

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

Only ads of this format.

## `maxAdsPerAdvertiser` (type: `integer`):

Up to 10,000 per advertiser or domain.

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

Adds legal name, variants, countries with dates and impression ranges (one extra request per ad, same price).

## `allMatchingAdvertisers` (type: `boolean`):

For brand names: scrape up to 10 advertisers whose name matches, not only the biggest one.

## Actor input object example

```json
{
  "advertisers": [
    "booking.com"
  ],
  "region": "anywhere",
  "adFormat": "all",
  "maxAdsPerAdvertiser": 20,
  "includeDetails": true,
  "allMatchingAdvertisers": false
}
```

# 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": [
        "booking.com"
    ],
    "region": "anywhere",
    "maxAdsPerAdvertiser": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/google-ads-transparency-scraper-advertiser-ads").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": ["booking.com"],
    "region": "anywhere",
    "maxAdsPerAdvertiser": 20,
}

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

```

## MCP server setup

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

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/ECd8QJyyNhX5n5qyc/builds/iwtzoMxYmbyhVpdsK/openapi.json
