# Google Ads Transparency Center Scraper & API (`parsebird/google-ads-transparency-scraper`) Actor

\[💰 $0.79 / 1K] Scrape Google Ads Transparency Center by domain, keyword, or advertiser ID. Get advertiser, format, first/last shown dates, and ad/preview URLs for any brand's Search, YouTube, Shopping, Maps, and Play ads.

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

## Pricing

from $0.79 / 1,000 ad scrapeds

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/platform/actors/running/actors-in-store#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 Center Scraper

Scrape [Google Ads Transparency Center](https://adstransparency.google.com/) by domain, keyword, or advertiser ID — get every ad an advertiser is running across Search, YouTube, Shopping, Maps, and Play as clean, structured data instead of manually paging through Google's ad library.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search by domain, brand keyword, or advertiser ID and get advertiser identity, creative ID, ad format, first/last shown dates, and direct ad links for every matching creative — filterable by region and date range.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
parsebird/google-ads-transparency-scraper on Apify. Call: ApifyClient("TOKEN").actor("parsebird/google-ads-transparency-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: searchQuery (string, default "nike.com" — a domain like "nike.com", a free-text keyword/brand name like "cloud hosting", or an advertiser ID like "AR16735076323512287233"; type is auto-detected), maxResults (integer, default 100, 0=unlimited), platform (string, default "All", one of "All"/"Google Search"/"YouTube"/"Google Shopping"/"Google Maps"/"Google Play" — Maps/Play are accepted but not enforced, see FAQ), region (string, default "Worldwide", 190+ countries), dateFrom/dateTo (string, "YYYY-MM-DD", empty = no bound). Output fields: advertiserId, advertiserName, creativeId, adFormat ("image"/"video"/"text"), firstShown, lastShown (ISO 8601 UTC), approxDaysShown, adUrl, imageUrl, previewUrl. Full actor spec: fetch build via GET https://api.apify.com/v2/acts/parsebird~google-ads-transparency-scraper (Bearer TOKEN). Get token: https://console.apify.com/account/integrations
```

### What does Google Ads Transparency Center Scraper do?

This Actor scrapes [Google Ads Transparency Center](https://adstransparency.google.com/), Google's public ad library, by calling its internal search API directly — no browser rendering, no manual clicking through result pages.

- 🔎 **Three search modes, auto-detected** — enter a **domain** (`nike.com`) to find every ad linking to that site, a **keyword or brand name** (`cloud hosting`) for a free-text advertiser search, or a Google Ads Transparency **advertiser ID** (`AR16735076323512287233`) to go straight to one advertiser's full ad history
- 🌍 **Region filter** — narrow results to any of 190+ countries, or leave it worldwide
- 📅 **Date range filter** — only include ads that were active within a `dateFrom`/`dateTo` window
- 🖼️ **Format detection** — every ad is classified as image, video, or text based on its actual rendered content, not a guessed label
- ⏱️ **Scheduling** — run this Actor daily or weekly via Apify Scheduler to monitor a competitor's ad activity over time
- 🔌 **API access** — trigger runs and pull results programmatically via the Apify API or client libraries
- 📊 **Flexible export** — download results as JSON, CSV, or Excel, or query them via API

### What data can you extract from Google Ads Transparency Center?

| Field | Description |
|-------|-------------|
| `advertiserId` / `advertiserName` | The advertiser's Google Ads Transparency ID and display name |
| `creativeId` | Unique ID for this specific ad creative |
| `adFormat` | `image`, `video`, or `text` |
| `firstShown` / `lastShown` | When the ad first and most recently appeared, ISO 8601 UTC |
| `approxDaysShown` | Approximate number of days the ad has been running |
| `adUrl` | Direct link to the ad's page on Google Ads Transparency Center |
| `imageUrl` | Direct image/creative preview URL, for image-format ads |
| `previewUrl` | Video playback URL, for video-format ads |

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQuery` | string | No | `nike.com` | A domain, keyword/brand name, or advertiser ID. Type is auto-detected |
| `maxResults` | integer | No | `100` | Maximum ads to return. `0` = unlimited (bounded by a safety cap) |
| `platform` | string | No | `All` | `All`, `Google Search`, `YouTube`, `Google Shopping`, `Google Maps`, or `Google Play` |
| `region` | string | No | `Worldwide` | Restrict to ads that ran in a specific country (190+ options) |
| `dateFrom` | string | No | *(none)* | Only include ads shown on or after this date (`YYYY-MM-DD`) |
| `dateTo` | string | No | *(none)* | Only include ads shown on or before this date (`YYYY-MM-DD`) |
| `proxyConfiguration` | object | No | Residential proxy | Apify Proxy settings. Residential proxies are recommended since Google applies bot-detection to unusual traffic |

### Output example

```json
{
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR10593697579030020097",
  "adFormat": "video",
  "firstShown": "2026-07-13T15:36:24.000Z",
  "lastShown": "2026-08-03T11:50:48.000Z",
  "approxDaysShown": 21,
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR10593697579030020097?region=anywhere",
  "imageUrl": null,
  "previewUrl": "https://r4---sn-uphxqvujvh-2xo6.googlevideo.com/videoplayback?..."
}
```

```json
{
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR05453620898319826945",
  "adFormat": "image",
  "firstShown": "2025-12-30T20:09:23.000Z",
  "lastShown": "2026-08-03T11:50:52.000Z",
  "approxDaysShown": 216,
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR05453620898319826945?region=anywhere",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/193901290632874964",
  "previewUrl": null
}
```

Download results in **JSON, CSV, or Excel** directly from the Apify Console, or pull them programmatically via the API.

### Use cases

- **Competitor ad monitoring** — track which ads a competitor is running, on which platforms, and for how long
- **Creative research** — pull real, currently-running ad creatives for a brand or category before building your own campaigns
- **Ad longevity analysis** — use `approxDaysShown` and `firstShown`/`lastShown` to see which creatives a competitor keeps running (a signal they're performing well)
- **Market surveillance** — schedule recurring runs against a list of competitor domains to catch new campaigns as they launch
- **Agency reporting** — build client-facing competitive ad reports without manually browsing Google's ad library

### How to scrape Google Ads Transparency Center with this Actor

1. Go to the [Google Ads Transparency Center Scraper](https://apify.com/parsebird/google-ads-transparency-scraper) page on Apify Store
2. Click **Try for free** — new users get a free trial to test the Actor before paying
3. Enter a **domain**, **keyword/brand name**, or **advertiser ID** in `searchQuery`
4. Optionally set a **region**, **date range**, and **platform** filter
5. Set `maxResults` to cap the run size (or `0` for unlimited)
6. Click **Start** — the Actor searches Google Ads Transparency Center and normalizes every matching ad
7. When the run finishes, download your data as **JSON, CSV, or Excel**, or fetch it via the API

### Use with the Apify API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/google-ads-transparency-scraper").call(run_input={
    "searchQuery": "nike.com",
    "maxResults": 100,
    "region": "United States",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['advertiserName']} - {item['adFormat']} - {item['lastShown']}")
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('parsebird/google-ads-transparency-scraper').call({
    searchQuery: 'nike.com',
    maxResults: 100,
    region: 'United States',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.advertiserName} - ${item.adFormat} - ${item.lastShown}`);
});
```

See the [Apify API documentation](https://docs.apify.com/api/v2) for full reference, or the Actor's **API** tab for ready-to-run request snippets in more languages.

### How much does it cost to scrape Google Ads Transparency Center?

This Actor uses **Pay-per-event** pricing — you only pay for ads actually returned, with no separate platform rental fee.

| Plan | Price per event | Price per 1,000 |
|------|-----------------|-----------------|
| Free | $0.00149 | $1.49 |
| Bronze | $0.00099 | $0.99 |
| Silver | $0.00089 | $0.89 |
| Gold | $0.00079 | $0.79 |

One `ad-scraped` event is charged for each ad successfully normalized and pushed to the dataset. A 1,000-ad run costs about $1.49 on the Free plan or $0.79 on Gold. Start with the free trial and a low `maxResults` to preview results before scaling up.

### FAQ

**How does `searchQuery` auto-detection work?**
Advertiser IDs match Google's own `AR` + digits format and go straight to that advertiser's ad history. Anything shaped like a domain (contains a dot, no spaces) runs a domain search — every ad linking to that site, which can span multiple related advertiser accounts. Anything else runs a free-text search that resolves to the best-matching advertiser or domain.

**Why does a domain search sometimes return more than one `advertiserId`?**
Google's own domain search matches every advertiser account whose ads link to that domain, not a single canonical account — this can include resellers, regional entities, or affiliated accounts. This is Google's own search behavior, not a bug.

**Why aren't `Google Maps` and `Google Play` platform filters enforced?**
Google Ads Transparency Center's public API exposes no reliable signal to distinguish Maps or Play placements from Search/Display in the data it returns. Selecting either option is accepted but currently returns unfiltered results with a logged warning, rather than silently guessing. `Google Search`, `YouTube`, and `Google Shopping` are enforced using evidence-based classification (confirmed video playback URLs, product-catalog asset patterns, and static image markers).

**Why is `imageUrl` or `previewUrl` sometimes null?**
Only one of the two is populated per ad, based on `adFormat`: `imageUrl` for image ads, `previewUrl` for video ads. Text-format ads have neither.

**Can I schedule recurring runs?**
Yes. Use Apify's [Scheduler](https://docs.apify.com/platform/schedules) to run this Actor daily or weekly and catch new competitor campaigns as they launch.

**Is it legal to scrape Google Ads Transparency Center?**
Google Ads Transparency Center is a public ad-transparency tool — its data is published by Google specifically so anyone can look up an advertiser's active ads without logging in. You're responsible for complying with Google's Terms of Service for your specific use case. See Apify's [blog post on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for general background.

**Can I access results via API?**
Yes. Every run's dataset is available through the [Apify API](https://docs.apify.com/api/v2) and client libraries (Python, JavaScript) — see the Actor's **API** tab for ready-made snippets.

**Something not working?**
Open an issue on the Actor's **Issues** tab in Apify Console — the ParseBird team monitors it directly.

### Related Actors

Other lead-gen and competitive-intelligence Actors from ParseBird:

- [Shopify Store Leads Scraper](https://apify.com/parsebird/shopify-store-leads-scraper) — find and qualify Shopify stores as sales leads
- [Website Contact Finder](https://apify.com/parsebird/website-contact-finder) — extract emails, phone numbers, and social links from any website
- [Product Hunt Scraper](https://apify.com/parsebird/product-hunt-scraper) — track new product launches and competitor activity

# Actor input Schema

## `searchQuery` (type: `string`):

A domain (e.g. nike.com), a free-text keyword/brand name (e.g. cloud hosting), or a Google Ads Transparency advertiser ID (e.g. AR16735076323512287233). The type is auto-detected.

## `maxResults` (type: `integer`):

Maximum number of ads to return. 0 = unlimited (bounded by a safety cap).

## `platform` (type: `string`):

Restrict results to ads shown on a specific platform. 'Google Maps' and 'Google Play' are accepted but not enforced -- see the README FAQ for why.

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

Restrict results to ads that ran in a specific country. Default is worldwide.

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

Only include ads still shown on or after this date (YYYY-MM-DD). Leave empty for no lower bound.

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

Only include ads first shown on or before this date (YYYY-MM-DD). Leave empty for no upper bound.

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

Google's Ads Transparency Center applies bot-detection to unusual traffic patterns; residential proxies are recommended for high-volume runs.

## Actor input object example

```json
{
  "searchQuery": "nike.com",
  "maxResults": 100,
  "platform": "All",
  "region": "Worldwide",
  "dateFrom": "",
  "dateTo": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQuery": "nike.com",
    "maxResults": 100,
    "platform": "All",
    "region": "Worldwide",
    "dateFrom": "",
    "dateTo": "",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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 = {
    "searchQuery": "nike.com",
    "maxResults": 100,
    "platform": "All",
    "region": "Worldwide",
    "dateFrom": "",
    "dateTo": "",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/google-ads-transparency-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "nike.com",
  "maxResults": 100,
  "platform": "All",
  "region": "Worldwide",
  "dateFrom": "",
  "dateTo": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parsebird/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parsebird/google-ads-transparency-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KQIrfEDgaic1DzywS/builds/RFU2Tf8lwqhu2Bhf1/openapi.json
