# Google Ads Transparency Scraper — Competitor Ads, Text & Videos (`neronbaez/google-ads-transparency-scraper`) Actor

Get every ad a competitor runs on Google Search, YouTube, Shopping, Display & Maps from the Google Ads Transparency Center. Search by brand name, domain or advertiser ID. Extracts ad text, YouTube video links, images, landing pages, countries and dates.

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

## Pricing

from $3.00 / 1,000 ad with details

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

### What does Google Ads Transparency Scraper do?

It pulls **every ad your competitors run on Google**, including Search, YouTube, Shopping, Display, Maps and Play, from the official [Google Ads Transparency Center](https://adstransparency.google.com/). You don't need a login or an API key.

Unlike basic scrapers that only return a preview link, this Actor **opens each ad and extracts what's inside**:

- ✍️ **Ad copy**: headlines, descriptions and call-to-action text
- 🎬 **YouTube video links** for video ads
- 🖼️ **Image URLs** for image and display ads
- 🔗 **Landing pages**: where the ad sends people (website, App Store, Play Store)
- 🌍 **Countries** where the ad ran, with the last date shown in each
- 📅 **First shown, last shown and days running**: long-running ads are usually the winners
- 💳 **Paid by**: the agency or company paying for the ads

### Use cases

- **Competitor ad research**: see every creative a competitor has tested and which ones they keep running
- **Ad creative inspiration**: collect proven ad copy and video ads in your niche
- **Agency prospecting**: find brands advertising in a country and see who manages their ads
- **Brand monitoring**: detect resellers or impostors running ads with your brand
- **Market research**: track ad activity by country and format

### How to use it

1. Add brands, domains or advertiser IDs to **Advertisers or domains**:
   - `nike.com`: all ads that lead to this domain, from every advertiser account (most complete)
   - `Nike`: the brand's verified advertiser account
   - `AR06641858037806006273` or an Ads Transparency URL
2. Optionally pick a **country** (`US`, `GB`, `DE`, `BR`, `MX`…) and **format** (text, image, video).
3. Run it and download the results as JSON, CSV, Excel or via API.

#### Input example

```json
{
  "queries": ["nike.com", "adidas.com"],
  "region": "US",
  "adFormat": "video",
  "maxAdsPerQuery": 200,
  "includeAdDetails": true
}
```

#### Output example

```json
{
  "advertiserId": "AR18378488041124659201",
  "advertiserName": "Nike Retail BV",
  "creativeId": "CR02364365752552652801",
  "format": "TEXT",
  "firstShown": "2021-10-25T07:00:00+00:00",
  "lastShown": "2026-10-16T07:56:41+00:00",
  "daysShown": 1777,
  "domain": "nike.com",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/4832233884008604101",
  "adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR02364365752552652801?region=US",
  "regions": [
    {
      "country": "DK",
      "lastShownDate": "2026-10-14"
    },
    {
      "country": "MA",
      "lastShownDate": "2026-10-15"
    },
    {
      "country": "SE",
      "lastShownDate": "2026-10-14"
    },
    {
      "...": "37 more countries"
    }
  ],
  "paidBy": "Nike Retail BV",
  "adTexts": [
    "Sponsored",
    "nike.com",
    "Nike - Online Store",
    "<Rating (Reviews)> · <Distance> · København",
    "<Open Hours>",
    "Copenhagen",
    "Any Place. Any Time. Any Condition. Be Your Best Every Time With Nike Shoes And Clothing.",
    "website",
    "call",
    "directions"
  ],
  "imageUrls": [
    "https://tpc.googlesyndication.com/archive/simgad/4832233884008604101"
  ],
  "variantsCount": 2
}
```

### Pricing

You pay per ad and nothing else.

| Result | Price per ad |
|

### Related Actors

- [Google Maps Scraper](https://apify.com/neronbaez/google-maps-scraper) — Local business leads with emails
- [Instagram & TikTok Scraper](https://apify.com/neronbaez/instagram-tiktok-scraper) — Social media profiles
- [LinkedIn Profile Scraper](https://apify.com/neronbaez/linkedin-profile-scraper) — B2B profiles with emails
- [Facebook Ads Library Scraper](https://apify.com/neronbaez/facebook-ads-library-scraper) — Competitor ad intelligence

\---|

### Related Actors

- [Google Maps Scraper](https://apify.com/neronbaez/google-maps-scraper) — Local business leads with emails
- [Instagram & TikTok Scraper](https://apify.com/neronbaez/instagram-tiktok-scraper) — Social media profiles
- [LinkedIn Profile Scraper](https://apify.com/neronbaez/linkedin-profile-scraper) — B2B profiles with emails
- [Facebook Ads Library Scraper](https://apify.com/neronbaez/facebook-ads-library-scraper) — Competitor ad intelligence

\---|
| Ad (basic: format, dates, image, link) | $0.001 |
| Ad with full details (text, video, landing page, countries, payer) | $0.003 |

🆓 **On Apify's Free plan you can try it practically free** (about $0.01 per 1,000 results). The prices above apply to paid plans.

For example, 1,000 competitor ads with full copy and videos cost **$3**.

### Tips

- Google archives many **text ads as screenshots**: for those, the copy is inside `imageUrls` and `adTexts` may be empty.
- Search by **domain** to catch every advertiser account a brand uses. Big brands have one per country.
- **Days shown** is the best proxy for ad performance. Advertisers don't keep paying for losing ads.
- Set **Max total ads** to cap your spend.

### Is it legal?

The Google Ads Transparency Center is a public database that Google publishes so anyone can see who is advertising. This Actor only reads that public data.

### Feedback

Missing a field? Open an issue in the **Issues** tab and it will be added.

# Actor input Schema

## `queries` (type: `array`):

Brand names (e.g. Nike), domains (e.g. nike.com), advertiser IDs (AR...) or Ads Transparency URLs.

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

Two-letter country code (US, GB, DE, BR, MX...) or 'anywhere'.

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

Ad format.

## `maxAdsPerQuery` (type: `integer`):

Max ads per advertiser/domain.

## `includeAdDetails` (type: `boolean`):

Opens each ad to extract headlines/descriptions, YouTube video links, images, landing URLs, countries where it ran and who paid. Recommended.

## `maxVariantsPerAd` (type: `integer`):

Some ads have many text/image variations. More variants = more text, slower run.

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

Brands often have several advertiser accounts (one per country). Searching by domain covers all of them.

## `maxTotalItems` (type: `integer`):

Max total ads (0 = no limit).

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

Google rate-limits single IPs. Apify Proxy is recommended; the scraper rotates IPs automatically when blocked.

## Actor input object example

```json
{
  "queries": [
    "nike.com"
  ],
  "region": "anywhere",
  "adFormat": "all",
  "maxAdsPerQuery": 100,
  "includeAdDetails": true,
  "maxVariantsPerAd": 3,
  "maxAdvertisersPerName": 1,
  "maxTotalItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped items as JSON. Add ?format=csv or ?format=xlsx for other formats.

## `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 = {
    "queries": [
        "nike.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neronbaez/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 = { "queries": ["nike.com"] }

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

```

## MCP server setup

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