# Google Ads Transparency Scraper - Competitor Ads & Ad Text (`get_anything/google-ads-transparency-scraper`) Actor

Scrape every Google ad a company runs (Search, Display, YouTube, Shopping) from the Google Ads Transparency Center. Search by advertiser name, domain or ID; get format, first/last shown, days running, images, preview links and decoded ad text. Filter by country, format and date. No API key.

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

## Pricing

from $1.05 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 - Competitor Ads & Ad Text

See **every ad a competitor runs on Google** (Search, Display, YouTube, Shopping, Maps), straight from the public [Google Ads Transparency Center](https://adstransparency.google.com). Search by **advertiser name, website domain, advertiser ID or Transparency Center URL** and get each ad's format, first and last shown dates, how many days it has run, the ad image, a preview link and the **decoded ad text** (headline, description, call to action) when Google provides it.

Filter by **country**, **format** (text, image, video) and **date range**. Optionally add the **list of countries each ad ran in**.

No API key, no login, no browser. Fast and cheap.

### What you can do with it

- **Competitor ad research:** see which ads a rival is running right now, and which ones they keep running (long-running ads are usually the winners).
- **Creative inspiration:** collect image and text ads by format for your next campaign.
- **Agency prospecting and audits:** check whether a brand advertises on Google, in which countries, and how actively.
- **Brand protection:** search your own domain to find other advertisers bidding on or reselling your brand.
- **Market monitoring:** schedule it weekly and diff the results to spot new campaigns.
- **AI agents (ChatGPT, Claude, Cursor via Apify MCP):** ask "What Google ads is allbirds.com running in the US?" Default output is small (20 ads).

### Input

| Field | Description |
|---|---|
| `searchTerms` | Advertiser names (`Nike`), domains (`allbirds.com`), advertiser IDs (`AR16735076323512287233`) or Transparency Center URLs. |
| `region` | Two-letter country code (`US`, `GB`, `AE`, `DE`...). Empty or `anywhere` = all countries. |
| `maxAdsPerAdvertiser` | Ads per advertiser or domain (default 20). `0` = all. Newest first. |
| `adFormat` | `ALL`, `TEXT`, `IMAGE` or `VIDEO`. |
| `shownFrom` / `shownTo` | Only ads shown in this date range. |
| `includeAdText` | Decode the ad preview for headline, description and call to action (default on). |
| `includeRegions` | Add the countries each ad ran in, with last-shown date, plus number of variations. |
| `maxAdvertisersPerName` | When searching by name, how many matching advertiser accounts to scrape (biggest first). |

A **domain search** returns ads from every advertiser that points to that domain (the brand itself, its agencies and resellers). A **name search** picks the matching advertiser account with the most ads.

Example:

```json
{
  "searchTerms": ["nike.com", "Allbirds", "AR16735076323512287233"],
  "region": "US",
  "maxAdsPerAdvertiser": 50,
  "adFormat": "ALL",
  "includeRegions": true
}
```

### Output

```json
{
  "resultType": "ad",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR11341498896191848449",
  "format": "TEXT",
  "targetDomain": "nike.com",
  "firstShown": "2023-11-16T21:50:12+00:00",
  "lastShown": "2026-10-28T08:52:51+00:00",
  "daysRunning": 1076,
  "region": "US",
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR11341498896191848449?region=US",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/5425594334699158661",
  "adText": "Nike | nike.com | Nike Official Site | Look your best anywhere on the course. Shop the golf gear that matches your style.",
  "textLines": ["Sponsored", "Nike", "nike.com", "Nike Official Site", "..."],
  "regions": [{ "country": "US", "lastShown": "2026-10-28" }],
  "variationsCount": 4,
  "advertiserAdsEstimate": 8000
}
```

- `imageUrl`: a rendered image of the ad. Google archives most Search text ads as images, so this is often the best way to see the ad.
- `adText` / `textLines`: present when Google serves the ad as an interactive preview (many Display, Shopping, Maps and app ads). Placeholders such as `[Price]` are Google's own.
- `previewUrl`: Google's preview script for the ad.
- If nothing matches, you get one free `error` row explaining why.

### Use it from ChatGPT, Claude & AI agents

This Actor works as a tool for AI assistants through the **Apify MCP server**, and the inputs are designed so an agent can fill them in.

- **Claude (claude.ai / Desktop), ChatGPT, Cursor, VS Code, Windsurf:** add the MCP server URL below as a custom connector / MCP server and sign in with your Apify account:

  ```
  https://mcp.apify.com/?tools=get_anything/google-ads-transparency-scraper
  ```

- **Claude Desktop / Cursor config file:**

  ```json
  { "mcpServers": { "apify": { "url": "https://mcp.apify.com/?tools=get_anything/google-ads-transparency-scraper" } } }
  ```

- **Any LLM framework or GPT Action (REST):** one call runs the Actor and returns the results as JSON:

  ```
  POST https://api.apify.com/v2/acts/get_anything~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN
  ```

- **No-code:** Make, Zapier, n8n, LangChain and LlamaIndex have Apify integrations.

Then just ask, for example: *"Show me the Google ads nike.com is running in the US and which ones have run the longest."*

### Pricing

Pay per event: you pay per ad returned, plus a small add-on per ad when `includeRegions` is on. Error rows are free. See the Pricing tab for current prices.

### FAQ

**Is the data complete?** It is exactly what Google publishes in the Ads Transparency Center for verified advertisers. Google doesn't publish spend, clicks or targeting for commercial ads.

**Why does a domain search show other advertisers?** Agencies and resellers advertise the same domain under their own verified accounts. Search by advertiser name or ID to see only the brand's own account.

**Do I need a proxy?** No, not usually.

**Is it legal?** It reads public data that Google publishes for transparency. Follow Google's terms and your local laws.

# Actor input Schema

## `searchTerms` (type: `array`):

Advertiser names (e.g. 'Nike'), website domains (e.g. 'allbirds.com'), advertiser IDs (AR...) or Google Ads Transparency Center URLs.

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

Two-letter country code where the ads were shown (US, GB, AE, DE...). Leave empty or 'anywhere' for all countries.

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

Maximum ads per advertiser or domain. 0 = all (can be thousands for big brands). Newest ads come first.

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

Only return one format.

## `shownFrom` (type: `string`):

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

## `shownTo` (type: `string`):

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

## `includeAdText` (type: `boolean`):

Decode each ad's preview to extract headline, description, call-to-action and video link.

## `includeRegions` (type: `boolean`):

Add the list of countries each ad ran in (with last-shown date) and number of variations. Charged as a small add-on per ad.

## `maxAdvertisersPerName` (type: `integer`):

When you search by name, how many matching advertiser accounts to scrape (biggest first).

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

Usually not needed.

## Actor input object example

```json
{
  "searchTerms": [
    "nike.com"
  ],
  "region": "US",
  "maxAdsPerAdvertiser": 20,
  "adFormat": "ALL",
  "includeAdText": true,
  "includeRegions": false,
  "maxAdvertisersPerName": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Structured results in the default dataset - one item per ad creative.

# 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 = {
    "searchTerms": [
        "nike.com"
    ],
    "region": "US",
    "maxAdsPerAdvertiser": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("get_anything/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 = {
    "searchTerms": ["nike.com"],
    "region": "US",
    "maxAdsPerAdvertiser": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("get_anything/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 '{
  "searchTerms": [
    "nike.com"
  ],
  "region": "US",
  "maxAdsPerAdvertiser": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call get_anything/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

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