# Google Ads Transparency Scraper: Every Ad by Site (`luzivanlt/google-ads-transparency-scraper`) Actor

Google Ads Transparency Center ads by website, advertiser or name, to the last page, in 216 regions. $1 per 1,000 ads. Format, dates shown, image, ids.

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

## Pricing

from $0.70 / 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: Every Ad by Site

Get every ad the Google Ads Transparency Center lists for a website, an
advertiser or a brand name, read to the last page, in any of 216 regions,
with its format, the days it was first and last shown, how long it ran, its
image or preview, and Google's own ids for it. One row per ad. No Google
account or cookies needed.

Tested daily. Latest check: 100 nike.com ads shown in the United States in 6
seconds; 10,591 ads from three searches in 5 minutes, one advertiser read to
the end of its 591 ads in Germany.

### What does this Actor do?

You give it websites, advertiser ids, advertiser names or Transparency
Center links. For each one it reads the ads the Transparency Center lists,
100 at a time, and saves one row per ad until it reaches your limit or the
list ends.

Each ad comes with:

- its creative id and its advertiser: id, name, and the website it points to
- its format: text, image or video
- when it was first shown and last shown, and how many days it ran
- its picture (with width and height) when the Center shows one, or the
  link to its preview
- Google's ids for it: the creative, the customer account, the ad group and
  the version, when the Center gives them
- links to the ad and to the advertiser on the Transparency Center
- for a name search: the advertiser's country and how many ads Google says
  it has
- the search it was found in, and how many ads Google says that search
  matches

### Why use it?

- **Every ad, not the first page.** A search is read page after page to the
  end of what the Center lists, up to 50,000 ads a search.
- **Three ways in.** A website finds every advertiser that ran ads for it; an
  advertiser id reads one advertiser; a name finds the advertisers with the
  most ads under it.
- **216 regions, platform, format and dates.** The same filters the
  Transparency Center offers, for every search in the run.
- **Google's ids on every row.** Creative, customer, ad group and version
  ids, ready to join with your own records.
- **Use the data anywhere.** Download as JSON, CSV or Excel, or send it to
  your own tools through Apify's API and integrations.

### How to use it

1. Type one or more **Websites**, **Advertiser ids** or **Advertiser names**,
   or paste **Transparency Center links**, or mix them.
2. Optionally, pick a **Region**, a **Platform**, an **Ad format**, a date
   range (**Shown from**, **Shown until**) and **Max ads per search**.
3. Click **Start**. When the run ends, open the **Output** tab to view the
   ads or download them.

Run it with no input to see a sample: up to 100 ads for nike.com shown in the
United States, charged as usual.

#### Links that work

An advertiser page, such as
`https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US`,
or a website search, such as
`https://adstransparency.google.com/?region=US&domain=nike.com`. The link's
region is used; platform, format and dates come from the form. A single
ad's page and other links stop the run before anything is read, naming the link.

### Input

| Field                                                  | What it does                                                                     | Default    |
| ------------------------------------------------------ | -------------------------------------------------------------------------------- | ---------- |
| **Websites** (`domains`)                               | Websites whose ads you want, one search each                                     | —          |
| **Advertiser ids** (`advertiserIds`)                   | Advertiser ids, AR and 20 digits, one search each                                | —          |
| **Advertiser names** (`advertiserNames`)               | Names to look up, one search each                                                | —          |
| **Transparency Center links** (`startUrls`)            | Advertiser pages or website searches                                             | —          |
| **Region** (`region`)                                  | `anywhere`, or a country code (`US`, `GB`, `DE`…) from the 216 the Center offers | `anywhere` |
| **Platform** (`platform`)                              | `any`, `SEARCH`, `YOUTUBE`, `SHOPPING`, `MAPS`, `PLAY`                           | `any`      |
| **Ad format** (`adFormat`)                             | `any`, `TEXT`, `IMAGE`, `VIDEO`                                                  | `any`      |
| **Shown from** (`startDate`)                           | Only ads shown on or after this day, YYYY-MM-DD                                  | —          |
| **Shown until** (`endDate`)                            | Only ads shown on or before this day, YYYY-MM-DD                                 | —          |
| **Max ads per search** (`maxAdsPerSearch`)             | Stop each search after this many ads, 1 to 50,000                                | `100`      |
| **Max advertisers per name** (`maxAdvertisersPerName`) | For a name, how many matching advertisers to read, most ads first, 1 to 10       | `1`        |

Give at least one website, id, name or link. Example input:

```json
{
  "domains": ["nike.com", "adidas.com"],
  "advertiserNames": ["Supercell"],
  "region": "US",
  "adFormat": "VIDEO",
  "startDate": "2026-09-01",
  "endDate": "2026-09-30",
  "maxAdsPerSearch": 2000
}
```

### Output

One row per ad. An example, with made-up values:

```json
{
  "creative_id": "CR01234567890123456789",
  "advertiser_id": "AR01234567890123456789",
  "advertiser_name": "Example Brand, Inc.",
  "domain": "example.com",
  "format": "IMAGE",
  "first_shown": "2025-11-16T22:35:09.000Z",
  "last_shown": "2026-10-20T04:11:47.000Z",
  "days_shown": 339,
  "image_url": "https://tpc.googlesyndication.com/archive/simgad/1234567890",
  "image_width": 348,
  "image_height": 247,
  "preview_url": null,
  "google_creative_id": null,
  "google_customer_id": null,
  "ad_group_id": null,
  "version_id": null,
  "ad_url": "https://adstransparency.google.com/advertiser/AR01234567890123456789/creative/CR01234567890123456789?region=US",
  "advertiser_url": "https://adstransparency.google.com/advertiser/AR01234567890123456789?region=US",
  "advertiser_country": null,
  "advertiser_ads_count_low": null,
  "advertiser_ads_count_high": null,
  "search_ads_count_low": 8000,
  "search_ads_count_high": 9000,
  "search_type": "domain",
  "search_query": "example.com",
  "search_region": "US",
  "search_platform": null,
  "search_format": null,
  "search_start_date": null,
  "search_end_date": null
}
```

| Field                                                   | What it holds                                                                     |
| ------------------------------------------------------- | --------------------------------------------------------------------------------- |
| `creative_id`                                           | The ad's id on the Transparency Center                                            |
| `advertiser_id`                                         | The advertiser's id                                                               |
| `advertiser_name`                                       | The advertiser's name                                                             |
| `domain`                                                | The website the ad points to, when the Center shows one                           |
| `format`                                                | `TEXT`, `IMAGE` or `VIDEO`                                                        |
| `first_shown`                                           | When the ad was first shown                                                       |
| `last_shown`                                            | When it was last shown                                                            |
| `days_shown`                                            | How many days it ran                                                              |
| `image_url`                                             | The ad's picture, when the Center shows one                                       |
| `image_width`, `image_height`                           | Its size in pixels                                                                |
| `preview_url`                                           | The link the Center renders the ad from, when it has no picture                   |
| `google_creative_id`, `google_customer_id`              | Google's own ids for the ad and the advertiser's account, from the preview link   |
| `ad_group_id`                                           | The ad group, when the preview link names it                                      |
| `version_id`                                            | The ad's version, when the preview link names it                                  |
| `ad_url`                                                | The ad on the Transparency Center                                                 |
| `advertiser_url`                                        | The advertiser's page on the Transparency Center                                  |
| `advertiser_country`                                    | The advertiser's country (name searches)                                          |
| `advertiser_ads_count_low`, `advertiser_ads_count_high` | How many ads Google says the advertiser has, as its rounded range (name searches) |
| `search_ads_count_low`, `search_ads_count_high`         | How many ads Google says the search matches, as its rounded range                 |
| `search_type`                                           | `domain`, `advertiser` or `name`                                                  |
| `search_query`                                          | The website, id or name searched                                                  |
| `search_region`                                         | The region searched; empty for anywhere                                           |
| `search_platform`                                       | The platform searched; empty for any                                              |
| `search_format`                                         | The format searched; empty for any                                                |
| `search_start_date`, `search_end_date`                  | The date range searched; empty for any time                                       |

Image ads and many text ads have a picture; the rest have a preview link,
which carries Google's ids. `domain` is empty for ads that point to no
website, such as app and video ads.

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

- **$1 per 1,000 ads** ($0.001 an ad). Each ad is charged once per run, even when two of your searches find it.
- No start fee, and nothing per search.

So 5,000 ads cost $5. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every ad saved so far.

### How long does a run take?

About 100 ads in 6 seconds; 10,591 ads from three searches in about 5
minutes, 5,000 of them from one search.

### Good to know

- **Google decides what matches.** A website search finds every advertiser
  that ran ads pointing to it, and a name finds the advertisers whose name
  matches, as the Transparency Center does.
- **Counts are Google's ranges.** The Center gives ad counts rounded, such as
  8,000 to 9,000, so they are kept as a low and a high.
- **Ad text and per-region details are not included yet.** Rows carry the
  picture or preview link, not the words of a text ad, and not the regions,
  reach or audience the Center shows on an ad's own page.
- **One ad, one row.** An ad found again in the same run, under the same or
  another search, is saved and charged once.
- **A search that cannot be read** is reported in the run's status; the other
  searches carry on.

### More Actors from us

- [Google News Scraper: By Date](https://apify.com/luzivanlt/google-news-scraper): Google News read day by day past the usual 100 per search: 4,440 articles from two keywords over 30 days.
- [Google Play Reviews Scraper: Device, Star Filter & Replies](https://apify.com/luzivanlt/google-play-reviews-scraper): Google Play reviews with the device each was written on, a star filter and the developer's reply.
- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Woolworths Coles ALDI Scraper: AU Grocery Prices](https://apify.com/luzivanlt/au-supermarkets-scraper): Woolworths, Coles and ALDI products for any search in one run, every results page to the end.
- [Bilibili Video Scraper: Search & Channel Videos](https://apify.com/luzivanlt/bilibili-videos-scraper): Bilibili videos from searches or whole channels, each with its full detail page's data.
- [Career Site Jobs Scraper: Workday, Greenhouse, Lever](https://apify.com/luzivanlt/career-site-jobs-scraper): Every job on Greenhouse, Lever, Ashby, SmartRecruiters and Workday boards, checked against each board's count.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~google-ads-transparency-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

```json
{
  "domains": ["nike.com"],
  "region": "US",
  "platform": "any",
  "adFormat": "any",
  "maxAdsPerSearch": 100,
  "maxAdvertisersPerName": 1
}
```

Its inputs, in the order of the input form:

| Input                                              | What it takes                                                                                                                                                                                                                               | Default      |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| `domains` (Websites)                               | Websites whose ads you want, as the Transparency Center searches them: every advertiser that ran ads for the site and its subdomains (e.g. "nike.com").                                                                                     | —            |
| `advertiserIds` (Advertiser ids)                   | Advertiser ids from the Transparency Center, AR and 20 digits, as in an advertiser page link (e.g. "AR16735076323512287233").                                                                                                               | —            |
| `advertiserNames` (Advertiser names)               | Names to look up, as you would type them in the Transparency Center search box (e.g. "Nike").                                                                                                                                               | —            |
| `startUrls` (Transparency Center links)            | Links copied from adstransparency.google.com: an advertiser page (e.g. https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US) or a website search (https://adstransparency.google.com/?region=US\&domain=nike.com). | —            |
| `region` (Region)                                  | Only ads shown in this country, from the 216 regions the Transparency Center offers.                                                                                                                                                        | `"anywhere"` |
| `platform` (Platform)                              | Only ads shown on this Google platform: Search, YouTube, Shopping, Maps or Play.                                                                                                                                                            | `"any"`      |
| `adFormat` (Ad format)                             | Only ads of this format: text, image or video.                                                                                                                                                                                              | `"any"`      |
| `startDate` (Shown from)                           | Only ads shown on or after this day, as YYYY-MM-DD (e.g. 2026-09-01).                                                                                                                                                                       | —            |
| `endDate` (Shown until)                            | Only ads shown on or before this day, as YYYY-MM-DD (e.g. 2026-09-30).                                                                                                                                                                      | —            |
| `maxAdsPerSearch` (Max ads per search)             | Stop each website, id, name or link after this many ads, from 1 to 50,000.                                                                                                                                                                  | `100`        |
| `maxAdvertisersPerName` (Max advertisers per name) | For each name, how many matching advertisers to read, those with the most ads first, from 1 to 10.                                                                                                                                          | `1`          |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/google-ads-transparency-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=luzivanlt/google-ads-transparency-scraper"
    }
  }
}
```

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

Charged per ad delivered; the sample input above costs at most $0.10.

### FAQ

**Do I need a Google account?** No.

**Can I get ads shown in one country only?** Yes: pick it as the Region. The
ad and advertiser links on each row open in that region.

**Can I watch an advertiser over time?** Yes: schedule the Actor daily with
a Shown from date, and remove repeats by `creative_id`.

### Is it legal to scrape the Ads Transparency Center?

The Transparency Center is a public site that Google built so anyone can
see who runs ads. This Actor reads only what it shows to every visitor. You
are responsible for how you use the data; check the terms of the site and
the laws that apply to you.

### Support

Found a problem or need a field? Open an issue on the Actor's Issues tab
and we will look at it.

# Changelog

This Actor's version history is a separate document: https://apify.com/luzivanlt/google-ads-transparency-scraper/changelog.md

# Actor input Schema

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

Websites whose ads you want, as the Transparency Center searches them: every advertiser that ran ads for the site and its subdomains (e.g. "nike.com"). A full link such as https://www.nike.com/ is read as nike.com. One search per website, using the Region and filters below.

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

Advertiser ids from the Transparency Center, AR and 20 digits, as in an advertiser page link (e.g. "AR16735076323512287233"). One search per id: every ad that advertiser ran in the Region, with the filters below.

## `advertiserNames` (type: `array`):

Names to look up, as you would type them in the Transparency Center search box (e.g. "Nike"). Each name reads the matching advertisers with the most ads, up to Max advertisers per name, with each advertiser's country and ad count on its rows.

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

Links copied from adstransparency.google.com: an advertiser page (e.g. https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US) or a website search (https://adstransparency.google.com/?region=US\&domain=nike.com). A link's region is used; the other filters come from this form. Other links stop the run before anything is read, naming the link.

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

Only ads shown in this country, from the 216 regions the Transparency Center offers. Anywhere = ads shown in any region. Applies to every website, id and name; a link keeps its own region. Default: Anywhere. Example: US for the United States.

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

Only ads shown on this Google platform: Search, YouTube, Shopping, Maps or Play. Any = every platform. The platform is a filter only: rows do not name it, so run one search per platform to tell them apart. Default: Any platform. Example: YOUTUBE.

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

Only ads of this format: text, image or video. Any = every format. The format is on every row either way, so you can also keep every format and sort later. Default: Any format. Example: VIDEO for video ads only.

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

Only ads shown on or after this day, as YYYY-MM-DD (e.g. 2026-09-01). With no Shown until, the range ends today. Leave both empty for ads from any time. An ad shown before and during the range is included.

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

Only ads shown on or before this day, as YYYY-MM-DD (e.g. 2026-09-30). With no Shown from, the range starts on 2018-01-01. Leave both empty for ads from any time. Must not be before Shown from.

## `maxAdsPerSearch` (type: `integer`):

Stop each website, id, name or link after this many ads, from 1 to 50,000. Default 100. Each ad is charged once, so this caps what one search costs. A name counts the ads of all its advertisers together. Example: 5000.

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

For each name, how many matching advertisers to read, those with the most ads first, from 1 to 10. Default 1: the biggest advertiser of that name. Example: 3, to also get a brand's regional advertisers. Ignored for websites, ids and links.

## Actor input object example

```json
{
  "domains": [
    "nike.com"
  ],
  "region": "US",
  "platform": "any",
  "adFormat": "any",
  "maxAdsPerSearch": 100,
  "maxAdvertisersPerName": 1
}
```

# Actor output Schema

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

Every ad the run saved, one row per ad.

## `allFields` (type: `string`):

The same rows with every field.

# 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 = {
    "domains": [
        "nike.com"
    ],
    "region": "US",
    "maxAdsPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("luzivanlt/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 = {
    "domains": ["nike.com"],
    "region": "US",
    "maxAdsPerSearch": 100,
}

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

```

## MCP server setup

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