# Google Ads Transparency Center Scraper (`67-labs/google-ads-transparency-center-scraper`) Actor

Get every ad of any advertiser from the Google Ads Transparency Center. Format, dates, regions. Export to CSV or Sheets.

- **URL**: https://apify.com/67-labs/google-ads-transparency-center-scraper.md
- **Developed by:** [Mokksh Bhatt](https://apify.com/67-labs) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result (one ad)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Center Scraper — all ads of any advertiser

Get every ad an advertiser is running on Google, from the Google Ads Transparency Center. Enter an advertiser name, its Transparency Center URL, its ID, or a website domain. Get a clean table: ad ID, format, first shown, last shown, regions and a preview link. Export to CSV, JSON, Excel or Google Sheets.

**Who uses this:** PPC managers checking competitors, agencies preparing pitches, researchers tracking political or brand ads, AI agents that need current ad data.

### What you get per ad

| Field | What it is |
|---|---|
| `adId` | The creative ID, for example `CR15481450763665801217` |
| `advertiserId`, `advertiserName` | Who runs the ad |
| `format` | `text`, `image` or `video` |
| `firstShown`, `lastShown` | Dates, `YYYY-MM-DD` |
| `regions` | List of country codes where the ad was shown, for example `["US","CA"]` |
| `regionsText` | The same list as one cell, `US, CA`, ready for a spreadsheet |
| `previewUrl` | Link to the ad on the Transparency Center |
| `imageUrl` | Direct link to the ad picture, when Google gives one (mostly text ads) |
| `scrapedAt` | When the row was collected |

### Price

**$0.01 per run + $2 per 1,000 ads.** That is two pay-per-event charges: `actor-start` ($0.01) once per run and `result` ($0.002) per ad. You pay nothing else, no compute fees. The free Apify plan ($5 per month credit) covers about 2,400 ads a month at no cost. A run that Google blocks before it returns any data is not charged.

### How to use

1. Open the Input tab and type an advertiser in **Advertisers**. A name, a URL such as `https://adstransparency.google.com/advertiser/AR16735076323512287233`, an ID such as `AR16735076323512287233`, or a domain such as `nike.com` all work. Add as many as you like.
2. Set **Max ads per advertiser**. This is also your cost cap. Optionally pick a region, a format or a date range.
3. Click Start. When the run is done, open the Output tab and export the table as CSV, JSON, Excel or send it to Google Sheets with Apify's Google Sheets integration.

**Which advertiser does a name pick?** Among the advertisers whose name contains your text, the one with the most ads. The log lists the other matches with their IDs. Paste an ID to choose exactly.

**Domain search** returns ads for that website from every advertiser that runs them. Resellers and affiliates show up here.

### Input example

```json
{
    "advertisers": ["Nike, Inc.", "https://adstransparency.google.com/advertiser/AR04119126533128323073"],
    "maxAds": 100,
    "region": "US",
    "format": "any",
    "startDate": "2026-08-01",
    "endDate": "2026-09-26",
    "includeRegions": true
}
```

Filters come from the input fields, not from a pasted URL. With a date range, you get ads that were shown at some point inside it.

### Output example

```json
{
    "adId": "CR17461921438674976769",
    "advertiserId": "AR16735076323512287233",
    "advertiserName": "Nike, Inc.",
    "format": "text",
    "firstShown": "2022-11-30",
    "lastShown": "2026-09-26",
    "previewUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR17461921438674976769",
    "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/2973731857683905257",
    "regions": ["US"],
    "regionsText": "US",
    "scrapedAt": "2026-09-26T04:11:37.372Z"
}
```

### Limits

- **No ad text and no landing page.** Google shows text and video ads as pictures or players, not as data, so the headline, description and landing domain are not available. Open `previewUrl` to see the ad.
- You get what the Transparency Center shows. An ad Google does not list there is not returned.
- **Google slows down fast callers.** The actor keeps to about 4 requests a second and retries with a pause. If a run still fails with 429, turn on **Proxy** and choose Residential.
- Getting regions needs one extra request per ad, about 200 ads a minute. Turn off **Get regions for each ad** for a much faster list.
- Region and date filters are applied by Google. A region with no ads gives an empty result, not an error.

### FAQ

**Can I track one competitor every week?** Yes. Schedule the actor in Apify with the same input, and compare `lastShown` and new `adId` values between runs.

**Can I use this from an AI agent?** Yes. The actor works through Apify's API and MCP server. Give it an advertiser name and a `maxAds` limit.

**Is the data public?** Yes. Everything comes from the public Google Ads Transparency Center. No login, no personal data.

**Something is missing or wrong. What now?** Open an issue on the Issues tab with the advertiser and the input you used. Field requests are welcome.

### Changelog

- **0.1** First release: name, URL, ID and domain search; region, format and date filters; regions per ad; pay per event.

# Actor input Schema

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

One entry per advertiser: a name (Nike, Inc.), a Transparency Center advertiser URL, an advertiser ID (AR followed by digits), or a website domain (nike.com) to find every ad that points to it. A name picks the match with the most ads. Paste the advertiser URL or ID to be exact.

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

Stop after this many ads for each entry above. You pay per ad, so this is also your cost cap.

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

Only ads shown in this country. Leave on Anywhere for all countries.

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

Only ads of this format.

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

Only ads shown on or after this date. Use with Shown until.

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

Only ads shown on or before this date. Leave empty for today.

## `includeRegions` (type: `boolean`):

Adds the list of countries where each ad was shown. Needs one extra request per ad, so runs are slower. Turn off for a fast list.

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

Google shows a CAPTCHA to servers that ask too fast. If runs fail with 429, turn on Apify Proxy and pick Residential.

## Actor input object example

```json
{
  "advertisers": [
    "Nike, Inc.",
    "https://adstransparency.google.com/advertiser/AR16735076323512287233",
    "nike.com"
  ],
  "maxAds": 20,
  "region": "anywhere",
  "format": "any",
  "includeRegions": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per ad: adId, advertiserId, advertiserName, format, firstShown, lastShown, regions, previewUrl, imageUrl, scrapedAt.

## `adsCsv` (type: `string`):

Same rows as CSV for Google Sheets or Excel.

# 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, Inc."
    ],
    "maxAds": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("67-labs/google-ads-transparency-center-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, Inc."],
    "maxAds": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("67-labs/google-ads-transparency-center-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, Inc."
  ],
  "maxAds": 20
}' |
apify call 67-labs/google-ads-transparency-center-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,67-labs/google-ads-transparency-center-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/aA1gSX925EPVvQA6c/builds/27PEpVwpLyL466ZvY/openapi.json
