# Google Ads Transparency Center Scraper (`deomoreo/google-ads-transparency`) Actor

Get every Google ad an advertiser runs, from the official Ads Transparency Center: search by brand name, website domain or advertiser ID, filter by country and format (text, image, video), with first and last shown dates and preview links. Pay only per ad delivered.

- **URL**: https://apify.com/deomoreo/google-ads-transparency.md
- **Developed by:** [Francesco Marotta](https://apify.com/deomoreo) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 ad delivereds

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 Center Scraper

See **every Google ad a competitor is running**: Search, Display, Shopping and YouTube ads from the official [Google Ads Transparency Center](https://adstransparency.google.com). Search by **brand name, website domain or advertiser ID**, filter by **country** and **format** (text, image, video), and get first and last shown dates, preview links and a direct link to each ad. You pay only per ad delivered.

### What you get

| Field | Description |
|---|---|
| `advertiserName`, `advertiserId` | The verified advertiser behind the ad |
| `creativeId` | Google's ID of the ad |
| `format` | `TEXT`, `IMAGE` or `VIDEO` |
| `firstShown`, `lastShown` | When the ad was first and last shown (ISO dates) |
| `previewUrl` | Google's preview of the ad (image, or render script for text ads) |
| `imageUrl` | Direct image for image ads and video thumbnails |
| `adUrl` | Link to the ad in the Transparency Center |
| `search`, `matchedAdvertiser` | Which of your searches produced the ad, and the advertiser it matched |

Example item:

```json
{
  "search": "patagonia.com",
  "advertiserName": "PATAGONIA, INC.",
  "advertiserId": "AR13494478831020408833",
  "creativeId": "CR15911562773100756993",
  "format": "IMAGE",
  "firstShown": "2026-08-02T10:15:00.000Z",
  "lastShown": "2026-09-28T21:40:00.000Z",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/...",
  "adUrl": "https://adstransparency.google.com/advertiser/AR13494478831020408833/creative/CR15911562773100756993?region=US"
}
```

### How to use

1. In **Advertisers**, enter one or more of:
   - a **website domain**, such as `nike.com` (most precise: every advertiser that advertises that site);
   - a **brand name**, such as `Nike` (matched to the advertiser with the same name, otherwise the one with the most ads; the match is shown in `matchedAdvertiser`);
   - an **advertiser ID** starting with `AR`.
2. Pick a **Country** (or *anywhere*) and optionally an **Ad format**.
3. Set **Max ads per advertiser** and run. Export as JSON, CSV or Excel, or call it through the API, Make, Zapier or n8n, or from an AI agent via MCP.

### Use cases

- **Competitor research**: what your competitors advertise, in which formats, since when.
- **Creative inspiration**: collect image and video ads in your niche.
- **Agency prospecting and audits**: check whether a brand is advertising on Google at all.
- **Market monitoring**: schedule the Actor weekly and track new ads.

### Pricing

**$1.50 per 1,000 ads** ($0.0015 each), charged only for ads delivered. Searches that find no advertiser or no ads are reported and free. Equivalent searches (`nike.com`, `https://www.nike.com/`) run once, and an ad found by more than one of your searches (for example a domain and an advertiser ID) is delivered, and charged, only once, under the first search. The run stops by itself when your spending limit is reached.

### Errors (not charged)

- `ADVERTISER_NOT_FOUND`: no advertiser matches the name; try the website domain.
- `NO_ADS`: the advertiser has no ads for this country.
- `INVALID_INPUT`: empty search or unsupported country.
- `BLOCKED` / `RATE_LIMITED` / `UPSTREAM_ERROR`: Google refused the request after all retries (the Actor retries automatically through datacenter and residential proxies).

### FAQ

**Is this legal?** The Ads Transparency Center is a public database that Google publishes so anyone can see who advertises and what. This Actor reads only that public information and does not log in.

**Why does a brand name return a different company?** Several advertisers can share a name. Use the website domain or the advertiser ID for exact results.

### Other Actors by the same developer

- [YouTube Transcript & Subtitles Extractor](https://apify.com/Deomoreo/youtube-transcript): transcripts of any YouTube video as text, timestamps or SRT.

# Actor input Schema

## `searches` (type: `array`):

Brand names (Nike), website domains (nike.com) or advertiser IDs (AR...). Domains are the most precise; names are matched to the advertiser with the same name or the most ads.

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

Only ads shown in this country. Choose anywhere for all countries.

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

Only ads of this format. Filtering happens on our side, so the country and advertiser filters still apply.

## `maxAdsPerSearch` (type: `integer`):

Stop after this many ads for each search.

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

Apify datacenter proxy is used by default.

## `residentialFallback` (type: `boolean`):

Retry searches that Google blocks through a residential proxy.

## Actor input object example

```json
{
  "searches": [
    "patagonia.com"
  ],
  "region": "anywhere",
  "format": "ALL",
  "maxAdsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true
}
```

# Actor output Schema

## `ads` (type: `string`):

No description

## `overview` (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 = {
    "searches": [
        "patagonia.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deomoreo/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 = {
    "searches": ["patagonia.com"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deomoreo/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 '{
  "searches": [
    "patagonia.com"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deomoreo/google-ads-transparency --silent --output-dataset

```

## MCP server setup

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