# Google Ads Transparency Scraper: Competitor Ads (`automationnation/google-ads-transparency-scraper`) Actor

Scrape Google's Ads Transparency Center: every ad an advertiser or domain runs on Google Search, YouTube, Display and Shopping, with format, first and last shown dates, days running, ad text, preview and link. Only-new mode for competitor ad alerts. $1 per 1,000 ads.

- **URL**: https://apify.com/automationnation/google-ads-transparency-scraper.md
- **Developed by:** [Nathan Carter](https://apify.com/automationnation) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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.
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

**Google Ads Transparency Scraper is an Apify Actor that returns every ad an advertiser runs on Google, from Google's Ads Transparency Center: format, first and last shown dates, days running, the ad's text and images, and a link to each ad.** Look up any brand by name, website domain or advertiser ID, filter by country and format, and get one JSON row per ad.

#### Example result

nike.com, from a real run on 6 October 2026: 50 ads in 28 seconds. One text ad, for example, was first shown on 16 November 2023 and was still running on 5 October 2026 (902 days).

Each ad includes the advertiser, format, first and last shown dates, days running, preview image, ad text and a link to the ad in the Transparency Center.

#### Quick facts

- **What you get, one row per ad:**
  - advertiser name and ID, ad ID and format (text, image or video)
  - first shown, last shown and days running, so you can see what's live and what's been running for months
  - headline, texts, image URLs, landing page and YouTube video, read from the ad's preview
  - a preview image and a link to the ad on Google's Ads Transparency Center
- **Any advertiser:** names (`Nike`), domains (`nike.com`), Transparency Center URLs or advertiser IDs (`AR…`).
- **Filters:** country (US, UK, Germany, 50 more or anywhere) and format.
- **Price:** $1 per 1,000 ads (less on paid Apify plans), ad text included. Apify's free $5 monthly credit covers 5,000 ads.
- **AI agents:** connect `https://mcp.apify.com?tools=automationnation/google-ads-transparency-scraper` (setup below).

### What can you do with it?

- **Competitor research:** see every ad a rival runs on Search, YouTube, Display and Shopping, and which ones have been live longest (their winners).
- **Creative inspiration:** collect headlines, offers and visuals across a whole market.
- **Agency pitches and audits:** show a prospect what their competitors spend their creative on.
- **Brand protection:** spot ads that use your brand or point to look-alike domains.
- **Market intelligence:** track when brands launch, pause and rotate campaigns, by country.
- **Ad spy and PPC research:** study competitors' ad copy and ad creative in Google's ad library, the Ads Transparency Center.

### How to use it

1. Click **Try for free**.
2. Add **advertisers or domains**, e.g. `nike.com` or `Nike`.
3. Choose the **country**, **ad format** and how many ads you want per advertiser.
4. Click **Start**. 100 ads with their text take about a minute. Download JSON, CSV or Excel, or use the API.

#### Run it on a schedule: only new ads

**Competitor ad alerts:** see each new ad a competitor launches on Google Search, YouTube and Display. Turn on **Only new ads** and each run checks the advertiser's most recent ads and saves, and charges for, only the ones earlier runs didn't return.

1. Add the advertisers or domains you watch and turn on **Only new ads** (`"onlyNewAds": true`).
2. Click **Save as a new task**, then **Schedule** it daily or weekly.
3. On the task's **Integrations** tab, send new ads to Slack, email, Google Sheets or a webhook, or pick them up in n8n, Make or Zapier.

```json
{
  "advertisers": ["nike.com", "Adidas"],
  "region": "us",
  "maxAdsPerAdvertiser": 100,
  "onlyNewAds": true
}
```

You pay only for new ads, and ads seen before are skipped before their text and images are fetched, so repeat runs are quick. Use **Monitor name** to keep separate histories for the same advertisers.

#### Input example

```json
{
  "advertisers": ["nike.com", "Adidas", "AR16735076323512287233"],
  "maxAdsPerAdvertiser": 200,
  "region": "us",
  "format": "all",
  "includeAdContent": true
}
```

#### Output example

```json
{
  "input": "nike.com",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR00174332937293004801",
  "format": "image",
  "firstShown": "2026-04-28T15:50:24.000Z",
  "lastShown": "2026-10-05T09:22:29.000Z",
  "daysShown": 127,
  "headline": "Nike Men's Tech Fleece Windrunner Full-Zip Jacket in Black, Size: Medium | HV0949-010",
  "texts": ["Nike Men's Tech Fleece Windrunner Full-Zip Jacket in Black, Size: Medium | HV0949-010", "Nike"],
  "imageUrls": ["https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcSg4CcDe_UlkHO3JDcGrfa24KGsWZxJLi-zluNkfaqJMqX8L3Q"],
  "landingUrl": null,
  "youtubeUrl": null,
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR00174332937293004801?region=US",
  "region": "us",
  "scrapedAt": "2026-10-05T12:00:00.000Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `advertiserId`, `advertiserName` | The verified advertiser |
| `creativeId`, `format` | The ad and its format: `text`, `image` or `video` |
| `firstShown`, `lastShown`, `daysShown` | When it ran; a recent `lastShown` means it's still live |
| `headline`, `texts` | The ad's visible text, from its preview (with **Ad text and images** on) |
| `imageUrls`, `landingUrl`, `youtubeUrl` | Images, link target and YouTube video, when the preview has them |
| `previewImageUrl` | Google's rendered image of the ad (text ads often come this way) |
| `adUrl` | The ad on Google's Ads Transparency Center |
| `domain`, `region`, `input` | Domain, country filter and what you asked for |

The **Run summary** (`OUTPUT`) shows, per advertiser, which advertiser a name matched, other matches, the total ads Google reports and how many were returned.

### How much does it cost?

| Ads | Free & Bronze plans | Silver | Gold and above |
|---|---|---|---|
| 1,000 | $1.00 | $0.90 | $0.80 |
| 10,000 | $10 | $9 | $8 |

Ad text and images are included. Advertisers that can't be found are free. Set a **maximum cost per run** in the run options to cap spend.

### Use it with AI agents (MCP)

**Hosted:** add `https://mcp.apify.com?tools=automationnation/google-ads-transparency-scraper` to Claude, ChatGPT, Cursor or another MCP client and sign in with Apify.

**Local (Claude Desktop or Cursor config):**

```json
{
  "mcpServers": {
    "google-ads-transparency": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--tools", "automationnation/google-ads-transparency-scraper"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

Then ask, for example: "Which Google ads has Adidas run in the UK for more than 60 days, and what do their headlines promise?"

### Integrations and API

```bash
curl -X POST "https://api.apify.com/v2/acts/automationnation~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"advertisers":["nike.com"],"maxAdsPerAdvertiser":40,"region":"us"}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("automationnation/google-ads-transparency-scraper").call(run_input={"advertisers": ["nike.com"], "region": "us"})
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(ad["format"], ad["daysShown"], ad.get("headline"))
```

Schedule it weekly with an Apify integration (Slack, Google Sheets, webhooks, n8n, Make, Zapier) to catch new competitor ads as they launch.

### FAQ

**Which ads does Google show here?**
Ads from verified advertisers across Google Search, YouTube, Display and Shopping, as published in Google's Ads Transparency Center. Spend and targeting aren't public outside political ads.

**Name, domain or ID: which should I use?**
A domain (`nike.com`) returns every ad that links to that website, whichever advertiser account runs it (for example Nike, Inc. and Nike's regional companies), newest first. A name picks the closest-named advertiser: one based in your chosen region if there is one ("Adidas" with region `us` is Adidas America, Inc), otherwise the brand's main home-market account ("Apple" is Apple Inc, not a smaller advertiser that's also called Apple). The run summary lists the other matches with their IDs, so you can pass an exact advertiser ID (`AR…`) next time.

**Why do some text ads have no text?**
Google serves some text ads only as a rendered image; you get it in `previewImageUrl`.

**How many ads can I get?**
Up to 10,000 per advertiser per run, newest first.

**Is it legal?**
The Ads Transparency Center is a public tool Google provides so anyone can see who advertises. Use the data in line with the laws that apply to you.

**Guides:** [How to see a competitor's Google ads](https://retracn.github.io/automationnation-actors/guides/google-ads-transparency-center-data/) · [Side-by-side comparison](https://retracn.github.io/automationnation-actors/compare/google-ads-transparency-scrapers/) · [Code examples (Python, JavaScript, MCP)](https://retracn.github.io/automationnation-actors/google-ads-transparency-scraper/)

### More from AutomationNation

- **[AI Visibility Tracker](https://apify.com/automationnation/ai-visibility-tracker)**: whether Google AI Overviews, Gemini and Claude mention and cite your brand.
- **[Google AI Overview Tracker](https://apify.com/automationnation/aeo-auditor)**: AI Overview citations for your keywords.
- **[Google Shopping Scraper](https://apify.com/automationnation/google-shopping-scraper)**: prices, stores and reviews for any product search.
- **[Google News Scraper](https://apify.com/automationnation/google-news-scraper)**: headlines, sources and article URLs.

Questions or a missing field? Open an issue on the **Issues** tab; fixes usually ship within a day.

# Changelog

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

# Actor input Schema

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

Advertiser names (Nike), website domains (nike.com), Ads Transparency Center URLs or advertiser IDs (AR…), one per line. A name picks the closest-named advertiser, preferring one based in your chosen region, otherwise the brand's main home-market account (so "Apple" is Apple Inc); other matches are listed in the run summary.

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

Big brands run thousands of ads; the newest come first.

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

Two-letter country code (us, gb or uk, de, fr, in, br, au…) to see only ads shown there, or "anywhere". Unknown codes fall back to anywhere with a warning.

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

Only ads of this format.

## `includeAdContent` (type: `boolean`):

Open each ad's preview to add its headline, texts, image URLs, landing page and YouTube video. Slower; switch off for dates and IDs only.

## `onlyNewAds` (type: `boolean`):

Skip ads that earlier runs already returned for the same advertiser, region and format, so a scheduled run saves, and charges, only new ads. Each run checks the advertiser's most recent ads, up to Max ads per advertiser. The first run returns everything and starts the history (kept 180 days after an ad was last seen).

## `monitorName` (type: `string`):

Optional. Keeps a separate history under this name, e.g. one per client watching the same advertisers.

## Actor input object example

```json
{
  "advertisers": [
    "nike.com"
  ],
  "maxAdsPerAdvertiser": 40,
  "region": "anywhere",
  "format": "all",
  "includeAdContent": true,
  "onlyNewAds": false
}
```

# Actor output Schema

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

One row per ad.

## `allData` (type: `string`):

No description

## `summary` (type: `string`):

Per advertiser: the advertiser matched, total ads Google reports and ads returned.

# 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"
    ],
    "maxAdsPerAdvertiser": 40,
    "region": "anywhere"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automationnation/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"],
    "maxAdsPerAdvertiser": 40,
    "region": "anywhere",
}

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

```

## MCP server setup

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