# Google Ads Transparency Scraper · No Login · $0.5/1k (`alfalfa/google-ads-transparency-scraper`) Actor

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

## Pricing

from $0.35 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Ads Transparency Scraper: every ad of any advertiser or website, no login

Google's Ads Transparency Center shows the ads every advertiser has run on Search, YouTube, Maps, Shopping and Play, but only 40 at a time in a browser and with no export. This Actor turns it into a table: give it advertiser names, website domains, advertiser IDs or Transparency Center URLs and get **one row per ad** with the advertiser, format, first and last shown dates, the regions it ran in, the preview, and for video ads the YouTube video. Export to Excel, CSV or JSON, or read it through the API.

**$0.50 per 1,000 ads**, no start fee, platform usage and proxies included.

### What you get

| Field | Example |
|---|---|
| `advertiserId`, `advertiserName`, `advertiserLegalName`, `advertiserCountry`, `advertiserVerified` | `AR16735076323512287233`, `Nike, Inc.`, `Nike, Inc.`, `US`, `true` |
| `creativeId`, `url` | `CR00654803575712514049`, the ad's page in the Transparency Center |
| `format` | `TEXT`, `IMAGE` or `VIDEO` |
| `firstShown`, `lastShown` | `2026-04-09`, `2026-09-14` |
| `regions` | `[{"region": "US", "lastShown": "2026-09-01"}, …]` (details on) |
| `previewImageUrl` | screenshot of the ad as Google renders it (text ads) |
| `previewUrl`, `previewUrls`, `variantsCount` | Google's preview pages of the ad and its variants |
| `videoId`, `videoUrl`, `thumbnailUrl` | the YouTube video behind a video ad (media on) |
| `imageUrls`, `texts` | image assets and texts of shopping and local ads: product titles, store names (media on) |
| `inputUrl` | which advertiser, domain or URL the ad came from |

Three levels of detail, all included in the price:

- **Listing only** (details off): advertiser, format, dates and one preview per ad. Fastest, hundreds of ads a second.
- **Details** (default): plus every region with its last-shown date, all preview variants and the exact last-shown date. One small request per ad.
- **Media and texts** (option): reads the preview pages for the YouTube video id and thumbnail of video ads, image assets, and the texts of shopping and local ads. One larger request per preview.

Classic text ads are delivered by Google as a rendered screenshot, not as text. That is how the Transparency Center itself works; every scraper of it has the same limit. Video, shopping and local ads carry their texts, product titles and video ids in the preview, and those are extracted.

### Sources

- **Advertiser names**: `Nike`, `Airbnb`, `Coca-Cola`. The Actor asks Google's own suggestion box and takes the best matching advertiser account (exact name first, then by ad count). Several accounts can share a name; set **Max advertisers per name** to include more.
- **Website domains**: `nike.com`, `booking.com`. Every advertiser sending ads to that domain.
- **Advertiser IDs**: `AR` followed by digits, from the advertiser page URL.
- **URLs**: advertiser pages and single ad pages copied from `adstransparency.google.com`.

Filters: **region** (country the ads were shown in, two-letter code, or anywhere), **platforms** (Search, YouTube, Maps, Play, Shopping), **formats** (text, image, video), **shown after / before** dates. **Max ads per source** caps each advertiser account or domain; Google pages 40 ads at a time and big advertisers have thousands. The same ad reached through two sources (a name and its ID, or a domain) is saved and charged once.

### Use cases

- **Competitor research**: all ads a rival ran this quarter, by platform and format, with the dates each one was live. Long-running ads are the ones that work.
- **Creative inspiration**: the video ads of the top brands in your niche, straight to YouTube links.
- **Agency prospecting**: which advertisers send traffic to a domain, how many ads, since when, verified or not.
- **Monitoring**: a weekly run per advertiser into Google Sheets; new creative IDs are new ads.
- **Brand protection**: who advertises on your brand's domain or name.

### Examples

Every ad Nike ran in the US in the last 30 days, with video ids:

```json
{ "advertisers": ["Nike"], "region": "US", "startDate": "2026-08-15", "includeMedia": true, "maxAds": 500 }
```

Everyone advertising booking.com, listing only, worldwide:

```json
{ "domains": ["booking.com"], "region": "", "scrapeDetails": false, "maxAds": 1000 }
```

Only YouTube video ads of an advertiser ID:

```json
{ "advertiserIds": ["AR16735076323512287233"], "platforms": ["youtube"], "formats": ["video"], "maxAds": 200 }
```

Output row (shortened):

```json
{
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "advertiserCountry": "US",
  "advertiserVerified": true,
  "creativeId": "CR10652972250883424257",
  "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR10652972250883424257?region=US",
  "format": "VIDEO",
  "firstShown": "2026-09-13",
  "lastShown": "2026-09-14",
  "regions": [{ "region": "US", "lastShown": "2026-09-14" }, { "region": "CA", "lastShown": "2026-09-14" }],
  "videoId": "vXMxDt7mYlw",
  "videoUrl": "https://www.youtube.com/watch?v=vXMxDt7mYlw",
  "thumbnailUrl": "https://i.ytimg.com/vi/vXMxDt7mYlw/hqdefault.jpg"
}
```

### Use it from code, n8n, Make, Zapier or an AI agent

- **API**: `POST https://api.apify.com/v2/acts/alfalfa~google-ads-transparency-scraper/run-sync-get-dataset-items?token=…` with the JSON input above returns the rows directly (runs up to 5 minutes). Longer jobs: start the run, poll, read the dataset. Any Apify client library works.
- **n8n, Make, Zapier**: add the Apify node, pick `alfalfa/google-ads-transparency-scraper`, paste the same JSON input and read the run's dataset in the next step. See the [Apify integrations docs](https://docs.apify.com/platform/integrations).
- **AI agents and MCP (Claude, Cursor, VS Code, ChatGPT)**: connect the Apify MCP server with this Actor as a tool, `https://mcp.apify.com/?tools=alfalfa/google-ads-transparency-scraper`, and the agent can pull an advertiser's ads by describing what it wants. See [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).

### Pricing

| Event | Price |
|---|---|
| Ad | $0.50 per 1,000 ($0.45 / $0.40 / $0.35 on Starter / Scale / Business plans) |
| Details, media, start fee, platform usage, proxies | none, included |

A run's **Maximum total charge** is honoured: the Actor stops before the budget, so the bill never exceeds it.

### Limits and honesty

- The Transparency Center lists ads shown since May 2018 for verified advertisers, and only the ads Google chooses to publish. Political ads outside the countries with election-ad verification are not in it.
- Ad copy of text ads comes as a screenshot image. No OCR is done; the screenshot URL is in `previewImageUrl`.
- Search is by advertiser or domain, as on Google's site. There is no search by keyword inside the ad text.
- Counts of ads per advertiser are Google's approximations ("~9K"); the Actor collects what the pages return.
- Impressions, spend and targeting are shown by Google only for political ads and are not included in this version.

### FAQ

**Is there a Google Ads Transparency API?** No public one. The Center is a website; this Actor reads its public pages without a login and returns the fields as a table.

**How current is the data?** The same as the website: ads appear a few days after they start running and `lastShown` moves as they keep running.

**Can I get the landing page URL?** The preview links Google exposes go through its click tracker, so the final destination is not part of the public data. Shopping and local ads carry product and store names in `texts`.

**Is this legal?** The Transparency Center exists to be looked at. The Actor reads public pages without an account and stores nothing but the results in your dataset. Respect the advertisers' copyright when you reuse creatives.

### Related Actors by the same author

| Actor | What it does | Price |
|---|---|---|
| [Google Maps Scraper](https://apify.com/alfalfa/google-maps-scraper) | places from any search and location with address, phone, website, rating and hours, plus reviews and website emails | $0.07 per 1,000 places |
| [Amazon Product Scraper](https://apify.com/alfalfa/amazon-product-scraper) | products from searches, Best Sellers lists and ASINs in 22 Amazon stores with price, rating, BSR and details | $0.28 per 1,000 products |
| [Facebook Ads Library Scraper](https://apify.com/alfalfa/facebook-ads-library-scraper) | ads from the Meta Ad Library by keyword, advertiser page or URL, with creatives, dates, platforms and EU reach | $0.50 per 1,000 ads |
| [YouTube Scraper](https://apify.com/alfalfa/youtube-scraper) | videos of a search, channel, playlist or URL list with views, likes, date, tags, plus transcripts and comments | $0.50 per 1,000 rows |
| [LinkedIn Jobs Scraper](https://apify.com/alfalfa/linkedin-jobs-scraper) | public LinkedIn job postings by keyword, location, date, company or URL | $0.50 per 1,000 jobs |
| [Facebook Posts Scraper](https://apify.com/alfalfa/facebook-posts-scraper) | posts of any public page or profile with reactions, comment counts, media, optional video transcripts | $2 per 1,000 posts |
| [Facebook Comments Scraper](https://apify.com/alfalfa/facebook-comments-scraper) | comments and replies of any public post | $0.50 per 1,000 comments |
| [Facebook Pages Scraper](https://apify.com/alfalfa/facebook-pages-scraper) | page details with email, phone, address, followers, rating, About text | from $3.50 per 1,000 pages |
| [Facebook Events Scraper](https://apify.com/alfalfa/facebook-events-scraper) | events by search, page or URL with dates, venue, tickets and organizer email | $5 per 1,000 events |

Not affiliated with, endorsed by or connected to Google LLC or Apify.

# Actor input Schema

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

Advertiser names as you would type them into the Ads Transparency Center search box, one per line: <code>Nike</code>, <code>Airbnb</code>. The best matching advertiser account is used (set <b>Max advertisers per name</b> for more). Advertiser IDs (<code>AR...</code>) are accepted here too.

## `domains` (type: `array`):

Websites whose ads to collect, one per line: <code>nike.com</code>, <code>booking.com</code>. Matches every advertiser sending traffic to that domain.

## `advertiserIds` (type: `array`):

Ads Transparency Center advertiser IDs, <code>AR</code> followed by digits, from the advertiser page URL.

## `startUrls` (type: `array`):

Advertiser pages (<code>adstransparency.google.com/advertiser/AR...</code>) or single ad pages (<code>.../advertiser/AR.../creative/CR...</code>) copied from the browser.

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

Country whose viewers the ads were shown to, as a two-letter code (<code>US</code>, <code>DE</code>, <code>GB</code>). Empty = anywhere in the world.

## `maxAds` (type: `integer`):

Maximum ads per advertiser or domain. Google pages 40 ads at a time; big advertisers have thousands.

## `scrapeDetails` (type: `boolean`):

Open every ad for its regions with last-shown dates, all preview variants and the exact last-shown date. One small request per ad, no surcharge. Off = listing fields only (format, first and last shown, one preview), about twice as fast.

## `includeMedia` (type: `boolean`):

Read the ad previews for the YouTube video id and thumbnail of video ads, image URLs, and the texts of shopping and local ads (product titles, store names). One larger request per preview (see <b>Max previews per ad</b>), no surcharge. Classic text ads come as a screenshot image either way, as on Google's site.

## `maxPreviews` (type: `integer`):

Preview variants to read per ad when media is on. Most ads have 1-6 variants.

## `platforms` (type: `array`):

Only ads shown on these Google surfaces. Empty = all.

## `formats` (type: `array`):

Only text, image or video ads. Empty = all. The filter is applied to the results as they come in, so a run with a format filter reads more pages for the same number of ads; the scan stops after 10,000 ads per source.

## `startDate` (type: `string`):

Only ads shown on or after this date, <code>YYYY-MM-DD</code>.

## `endDate` (type: `string`):

Only ads shown on or before this date, <code>YYYY-MM-DD</code>.

## `maxAdvertisers` (type: `integer`):

How many advertiser accounts to take for one name when several match (Google shows up to 10). Exact name matches come first, then the rest by ad count.

## `maxConcurrency` (type: `integer`):

Sources processed in parallel (default 5).

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

Residential proxies are included in the price. Leave the default unless you want your own proxy servers.

## Actor input object example

```json
{
  "advertisers": [
    "Nike"
  ],
  "region": "US",
  "maxAds": 100,
  "scrapeDetails": true,
  "includeMedia": false,
  "maxPreviews": 3,
  "maxAdvertisers": 1,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All scraped ads as JSON. Append ?format=csv for CSV.

# 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"
    ],
    "region": "US",
    "maxAds": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alfalfa/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"],
    "region": "US",
    "maxAds": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("alfalfa/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"
  ],
  "region": "US",
  "maxAds": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call alfalfa/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

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