# Google Ads Transparency Scraper – Ad Text, Videos, Countries (`expensive_marquess/google-ads-transparency-scraper`) Actor

Scrape every Google ad an advertiser runs (Search, YouTube, Display, Maps) from the Google Ads Transparency Center. Get ad text, images, YouTube links, first/last shown dates, days running and countries. No login needed.

- **URL**: https://apify.com/expensive_marquess/google-ads-transparency-scraper.md
- **Developed by:** [Shaig](https://apify.com/expensive_marquess) (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 $1.60 / 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 – Ad Text, Images, Videos & Countries

![Google Ads Transparency Scraper](https://api.apify.com/v2/key-value-stores/zJcuVPqbUFf5yLBhI/records/banner-google-ads-transparency-scraper)

Get **every Google ad a competitor is running** – Search, Shopping, YouTube, Display and Maps – straight from the official [Google Ads Transparency Center](https://adstransparency.google.com). Unlike other scrapers, this one also returns the **actual ad copy** (headlines, descriptions, product titles, prices), **YouTube video links**, how many **days each ad has been running**, and **which countries** it was shown in.

No Google account, cookies or API key needed. Just enter a domain like `nike.com`.

### Why this scraper?

- 📝 **The actual ads, not just metadata** – ad text (headlines, descriptions, product titles and prices), images and YouTube video links.
- 📅 **How long each ad runs** (`totalDaysShown`) – the fastest way to spot a competitor's winning ads.
- 🌍 **Countries each ad ran in** and every creative variation.
- 🔎 **Flexible input** – domains, advertiser IDs, names or Transparency Center URLs in one list.
- 💬 **Clear feedback** – if nothing is found, the run tells you what to try instead of silently succeeding with 0 results.

### What can you use it for?

- 🕵️ **Competitor ad research** – see every ad a competitor runs, which ones they keep running (long-running ads = winning ads), and what messaging they test.
- ✍️ **Ad copy inspiration** – export thousands of real headlines and descriptions from the best advertisers in your niche.
- 🎬 **YouTube ad swipe files** – collect the video ads of any brand with direct YouTube links.
- 🌍 **Market expansion research** – find out which countries a competitor advertises in.
- 🏢 **Agency lead generation** – find businesses that advertise on Google (they have ad budgets) and pitch them.
- 🤖 **AI agents & automations** – structured JSON that works with n8n, Make, Zapier, Claude and ChatGPT via the Apify MCP server.

### What data do you get?

| Field | Description |
|---|---|
| `advertiserName`, `advertiserId` | Verified advertiser account |
| `domain` | Advertiser website |
| `format` | `TEXT`, `IMAGE` or `VIDEO` |
| `adTexts` | Visible ad copy: headlines, descriptions, product names, prices, store locations |
| `youtubeUrls`, `youtubeVideoIds` | Video ads on YouTube |
| `imageUrl`, `imageWidth`, `imageHeight` | Ad image (or rendered ad preview) |
| `firstShown`, `lastShown` | When the ad first and last ran |
| `totalDaysShown` | Number of days the ad has been shown |
| `regionsShown` | Countries the ad ran in, with last-shown date *(Include countries option)* |
| `variations`, `variationCount` | All creative variations *(Include countries option)* |
| `advertiserCountryCode` | Where the advertiser is registered *(Include countries option)* |
| `transparencyUrl` | Link to the ad on Google's site |

### How to use it

1. Add one or more **advertisers**. You can mix:
   - domains: `nike.com`
   - advertiser IDs: `AR16735076323512287233`
   - names: `Adidas` (the best-matching advertiser is picked automatically)
   - Transparency Center URLs: `https://adstransparency.google.com/?region=GB&domain=tesco.com`
2. Optionally pick a **region**, **ad format** and **date range**.
3. Set **Max ads per advertiser** (large brands have 10,000+ ads).
4. Click **Start** and download your data as JSON, CSV, Excel or via API.

#### Input example

```json
{
  "targets": ["nike.com", "Adidas", "AR16735076323512287233"],
  "region": "US",
  "adFormat": "ALL",
  "dateFrom": "2026-09-01",
  "maxAdsPerTarget": 200,
  "extractAdText": true,
  "includeDetails": true
}
```

#### Output example

```json
{
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR16685500065770373121",
  "format": "TEXT",
  "domain": "nike.com",
  "firstShown": "2023-11-17T03:16:55Z",
  "lastShown": "2026-10-03T12:37:20Z",
  "totalDaysShown": 840,
  "adTexts": [
    "Nike",
    "nike.com",
    "Shop Nike® Long Sleeve Shirts",
    "Be comfortable and confident in what you wear. Long sleeve shirts made to move with you."
  ],
  "youtubeUrls": [],
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/60515877974038523",
  "variationCount": 5,
  "regionsShown": [{ "countryCode": "US", "countryName": "United States", "lastShownDate": "2026-10-03" }],
  "advertiserCountryCode": "US",
  "transparencyUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR16685500065770373121?region=US",
  "input": "nike.com",
  "regionSearched": "US",
  "scrapedAt": "2026-10-03T12:40:11Z"
}
```

### How much does it cost?

You pay only for the ads you get: see the **Pricing** tab. Turning on *Include countries and all variations* does not cost extra per ad, it only makes runs slower. You can cap spending with the **Maximum cost per run** setting – the scraper stops cleanly when it is reached.

### Tips

- **Big brands:** search by **domain** (`nike.com`) rather than by name – a domain covers all of the brand's advertiser accounts worldwide.
- **Find winning ads:** sort by `totalDaysShown`. Advertisers keep paying for ads that work.
- **Monitor competitors:** schedule the scraper daily with *Shown from* set to yesterday to get only new and still-running ads.
- Text ads that Google shows only as an image have `imageUrl` but no `adTexts`.

### FAQ

**Is it legal?** The scraper only collects public data that Google publishes for transparency. It does not collect personal data. Check that your use case complies with the laws that apply to you.

**Which platforms are covered?** Everything in the Transparency Center: Google Search, Shopping, YouTube, Display (Google Display Network), Maps and Google Play.

**Something is missing or broken?** Open an issue in the **Issues** tab – I usually reply within a day.

⭐ **If this scraper saved you time, please [leave a review](https://apify.com/expensive_marquess/google-ads-transparency-scraper/reviews) – it helps a lot!**

### More tools from this developer

- [YouTube Channel Email Finder – creator emails & socials by niche](https://apify.com/expensive_marquess/youtube-channel-email-finder)
- [Telegram Channel Scraper – messages, views, reactions, no login](https://apify.com/expensive_marquess/telegram-channel-scraper)
- [TikTok Ads Library Scraper – ads with targeting & impressions](https://apify.com/expensive_marquess/tiktok-ads-library-scraper)
- [LinkedIn Ad Library Scraper – B2B ads, payers & targeting](https://apify.com/expensive_marquess/linkedin-ad-library-scraper)
- [Ad Library All-in-One – Google + TikTok + LinkedIn ads in one format](https://apify.com/expensive_marquess/ad-library-all-in-one)

# Actor input Schema

## `targets` (type: `array`):

Any mix of: advertiser domains (nike.com), advertiser IDs (AR16735076323512287233), advertiser names (Nike) or Google Ads Transparency Center URLs. Names are matched to the best advertiser automatically.

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

Only return ads shown in this country. URLs that contain their own ?region= keep it.

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

Only return ads of this format.

## `dateFrom` (type: `string`):

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

## `dateTo` (type: `string`):

Only ads shown on or before this date (YYYY-MM-DD). Defaults to today when 'Shown from' is set.

## `maxAdsPerTarget` (type: `integer`):

Stop after this many ads for each input. 0 = no limit (large advertisers can have 10,000+ ads).

## `extractAdText` (type: `boolean`):

Pull the visible ad copy (headlines, descriptions, business name, display URL) and YouTube video IDs out of each ad preview. Image ads only have the image URL.

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

Adds the list of countries each ad was shown in (with last-shown date), every creative variation, and the advertiser's country. Makes runs slower.

## `advertisersPerSearchTerm` (type: `integer`):

When you enter a name like 'Nike', how many of the best-matching advertiser accounts to scrape.

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

Datacenter proxies are enough in most cases.

## Actor input object example

```json
{
  "targets": [
    "nike.com",
    "AR16735076323512287233",
    "Adidas"
  ],
  "region": "anywhere",
  "adFormat": "ALL",
  "maxAdsPerTarget": 50,
  "extractAdText": true,
  "includeDetails": false,
  "advertisersPerSearchTerm": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `allResults` (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 = {
    "targets": [
        "nike.com",
        "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US"
    ],
    "maxAdsPerTarget": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("expensive_marquess/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 = {
    "targets": [
        "nike.com",
        "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US",
    ],
    "maxAdsPerTarget": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("expensive_marquess/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 '{
  "targets": [
    "nike.com",
    "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US"
  ],
  "maxAdsPerTarget": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call expensive_marquess/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

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