# Google and YouTube Ads Transparency Scraper (`mrdoe/google-ads-transparency-scraper`) Actor

Returns every ad an advertiser is running across Google Search, Display, Shopping, Maps and YouTube, straight from Google's own Ads Transparency Center.

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

## Pricing

from $2.00 / 1,000 ad returneds

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 & YouTube Ads Transparency Scraper — see every ad an advertiser is running on Search, Shopping, Maps and YouTube](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-ads-transparency-scraper--hero.png)

### What does Google & YouTube Ads Transparency Scraper do?

Google & YouTube Ads Transparency Scraper returns every ad an advertiser is currently running
across Google's ad network - Search, Shopping, Maps, Google Play, and YouTube - as clean
structured data. For each ad you get its creative preview, its format, which platform it ran
on, and when it was first and last shown. No login, no Google account needed.

### Why use Google & YouTube Ads Transparency Scraper?

- **No Google account needed** - works fully logged out, every run.
- **Covers YouTube specifically** - filter down to just the ads an advertiser runs on
  YouTube, or see every Google surface at once.
- **Look up by domain or by a specific advertiser** - search by the website an advertiser's
  ads point to, or target one exact advertiser account when a brand name is shared by several.
- **Creative preview included** - an image or an embeddable preview for every ad, not just a
  text description.
- **Activity dates on every ad** - know exactly when an ad started running and when it was
  most recently shown.

### What makes this different

Most "ad transparency" lookups stop at a single advertiser page you have to click through by
hand. This Actor pulls every one of an advertiser's ads - across every Google surface, or
narrowed to YouTube alone - directly into structured rows, so you can review a competitor's
or a brand's entire current ad activity in a spreadsheet in one pass.

### Who uses Google & YouTube Ads Transparency Scraper?

- **Performance marketers and ad agencies** - see exactly what a competitor's current Google
  and YouTube ads look like before planning new creative.
- **Brand and PR teams** - monitor what messaging a competitor or partner brand is running
  across Google's ad surfaces right now.
- **Market researchers and consultants** - pull a structured record of an industry's current
  Google advertising activity for a client report.
- **Media buyers** - compare how many ad formats and how long a competitor has kept specific
  creative running as a signal of what's working for them.

### How it works

![How Google & YouTube Ads Transparency Scraper turns your input into ad data](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-ads-transparency-scraper--how-it-works.png)

1. **Your input** - an advertiser's website domain, or a specific advertiser ID, plus a
   country and (optionally) a platform to narrow to.
2. **The Actor collects it** - it reads Google's own Ads Transparency Center for that
   advertiser, works fully logged out, and keeps going until it has every ad, up to your limit.
3. **Your output** - one structured record per ad, with its creative preview and activity
   dates, ready for a spreadsheet, dashboard or report.

### What data can you extract?

| Field | Description |
|---|---|
| `advertiserId` / `advertiserName` | The advertiser's ID and display name on Google's Ads Transparency Center |
| `domain` | The website domain this ad links to |
| `country` | The market/region this result applies to |
| `platform` | Which Google surface you filtered to (`all`, `youtube`, `search`, `shopping`, `maps`, `play`) |
| `displayFormat` | The ad's format: `Text`, `Image` or `Video` |
| `firstShown` / `lastShown` | When Google's own records show this ad as first and most recently shown |
| `previewType` | `"image"` for a static preview, `"iframe"` for a rich/interactive preview |
| `imageUrl` | The ad's preview image, when available |
| `iframeUrl` | An embeddable preview URL for rich/interactive ad formats |
| `adDetailUrl` | Direct link to view this exact ad on Google's own Ads Transparency Center |
| `scrapedAt` | When this record was collected (ISO timestamp) |

### How to use Google & YouTube Ads Transparency Scraper

1. Open the Actor and go to the **Input** tab.
2. Enter an **Advertiser's website domain** (e.g. `nike.com`), or leave it empty and use
   **Advertiser ID** instead (see the screenshot below).
3. Set **Country** and, optionally, **Platform** (e.g. YouTube).
4. Optionally set **Max results**.
5. Click **Start**.
6. Open the **Dataset** tab, or pull results via the API, once the run finishes.

![Google & YouTube Ads Transparency Scraper input form with domain, country and platform](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-ads-transparency-scraper--input.png)

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `domain` | String | No\* | `"nike.com"` | A website domain the advertiser's ads link to |
| `advertiserId` | String | No\* | - | A specific advertiser ID, takes priority over `domain` |
| `country` | String | No | `"US"` | A 2-letter country code |
| `platform` | String | No | `"all"` | `"all"`, `"youtube"`, `"search"`, `"shopping"`, `"maps"` or `"play"` |
| `maxItems` | Integer | No | `30` | Maximum number of ads to return |
| `proxyConfiguration` | Object | No | Apify Proxy | Advanced - leave as default unless you have a reason to change it |

\*Provide either `domain` or `advertiserId` - if both are empty the run has nothing to search for.

### Output Data

Each ad produces one dataset record. Example:

```json
{
    "advertiserId": "AR16735076323512287233",
    "creativeId": "CR12839449348618059777",
    "advertiserName": "Nike, Inc.",
    "domain": "nike.com",
    "country": "US",
    "platform": "youtube",
    "displayFormat": "Image",
    "firstShown": "2023-11-16T22:25:33.000Z",
    "lastShown": "2026-10-21T08:54:51.000Z",
    "previewType": "image",
    "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/10441197431905793477",
    "iframeUrl": null,
    "adDetailUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR12839449348618059777?region=US&hl=en",
    "scrapedAt": "2026-10-21T09:20:13.913Z"
}
```

![Sample dataset table from Google & YouTube Ads Transparency Scraper](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-ads-transparency-scraper--output.png)
![Every output field labelled on one example record](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-ads-transparency-scraper--fields.png)

### Usage Examples

- **YouTube-only competitor check** - set `domain` and `platform: "youtube"` to see exactly
  what a competitor is running on YouTube right now.
- **Full-surface audit** - leave `platform` as `"all"` to see a competitor's complete current
  ad activity across Search, Shopping, Maps and YouTube in one run.
- **Multi-market comparison** - run the same `domain` across a few `country` values to see
  how a brand's ad activity differs by market.
- **Precise advertiser targeting** - use `advertiserId` instead of `domain` when a brand name
  is shared by multiple regional entities (e.g. several country-specific "Adidas" accounts).

### Tips for Best Results

- Use `advertiserId` whenever you have it - a domain can match several advertiser accounts at
  once (common for large brands with regional entities), while an advertiser ID is exact.
- `platform: "youtube"` doesn't mean every result is a video ad - advertisers also run text
  and image ads alongside YouTube content, and `displayFormat` tells you which.
- Run the same `domain`/`advertiserId` on a schedule to catch new creative as it launches.

### Known Limitations

- Returns the ads Google's own Ads Transparency Center currently discloses for the given
  advertiser, market and platform - not every ad ever run historically.
- This Actor cannot surface view/impression/spend numbers for ordinary ads - Google itself
  does not publish those figures outside its separate political-ads transparency report.
- Preview image/iframe URLs are served from Google's own ad-serving infrastructure and may
  change over time; download or re-host them promptly if you need to keep a copy.

### Integrations

Connect Google & YouTube Ads Transparency Scraper to the rest of your stack via the [Apify API](https://docs.apify.com/api/v2),
[webhooks](https://docs.apify.com/platform/integrations/webhooks), scheduled runs, or directly
to Google Sheets, Make, and Zapier through Apify's built-in integrations.

### Export Formats

Download results as **JSON, CSV, Excel, or XML** from the Dataset tab, or fetch them
programmatically via the Apify API.

### Frequently Asked Questions

#### Do I need a Google account or to log in?

No. Every run works fully logged out.

#### What's the difference between `domain` and `advertiserId`?

`domain` finds ads from every advertiser account linking to that website, which can include
more than one entity for a large brand. `advertiserId` targets one exact advertiser account.

#### Can I see only YouTube ads?

Yes - set `platform` to `"youtube"`. Set it to `"all"` to see every Google surface at once.

#### Why don't I see view counts or spend figures?

Google only discloses those figures for political/issue ads in a separate transparency
report. For ordinary commercial ads, Google itself doesn't publish that data.

#### Can I schedule this to run automatically?

Yes, use Apify's built-in [Scheduler](https://docs.apify.com/platform/schedules) to re-check
an advertiser on any interval you choose.

### Support

Found an issue or have a request? Open it on the Actor's **Issues** tab in the Apify Console.

### Legal / Responsible Use

You're responsible for using this Actor in compliance with applicable laws and the target
platform's terms of service. This Actor retrieves publicly viewable ad information only; it
does not collect personal data.

# Actor input Schema

## `domain` (type: `string`):

A website domain the advertiser's ads link to (e.g. "nike.com"). Returns ads from every advertiser account linking to that domain. Leave empty to use Advertiser ID instead.

## `advertiserId` (type: `string`):

A specific advertiser's ID from the Ads Transparency Center (e.g. "AR16735076323512287233") - more precise than a domain when several advertisers share a brand name. Takes priority over Domain when both are given.

## `country` (type: `string`):

A 2-letter country code for which market's ads to return (e.g. "US", "GB").

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

Limit results to ads shown on one Google surface, or leave as "All" for every surface.

## `maxItems` (type: `integer`):

Maximum number of ads to return.

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

Google's Ads Transparency Center works fine, and more reliably, without a proxy - only turn this on if you specifically need a different exit region.

## Actor input object example

```json
{
  "domain": "nike.com",
  "country": "US",
  "platform": "all",
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "domain": "nike.com",
    "country": "US",
    "platform": "all",
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/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 = {
    "domain": "nike.com",
    "country": "US",
    "platform": "all",
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/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 '{
  "domain": "nike.com",
  "country": "US",
  "platform": "all",
  "maxItems": 30
}' |
apify call mrdoe/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

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