# Google Ads Transparency Center Scraper + Per-Country Details (`engineertsaistudio/google-ads-transparency-scraper-ad-details`) Actor

Export every Google ad a brand runs from the Ads Transparency Center — by brand name, domain or advertiser ID. Per-country first/last shown dates and EU impressions. From $1 per 1,000 ads.

- **URL**: https://apify.com/engineertsaistudio/google-ads-transparency-scraper-ad-details.md
- **Developed by:** [Studio EngineerTsai](https://apify.com/engineertsaistudio) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

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 Center Scraper + Per-Country Details

**See every Google ad a competitor runs** — on Google Search, YouTube, Google Play, Maps and
Shopping — straight from the public **Google Ads Transparency Center**. Search by **brand name,
website domain or advertiser ID** and export to JSON, CSV or Excel.

**Choose this Actor when** you need a brand's full Google ad inventory with *where and how long*
each ad ran: every country, first and last shown date per country, and EU impression counts.

**Not the right fit when** you need ad spend, clicks, keywords or audience targeting — the
Transparency Center does not publish them.

### Use cases

- **Competitor ad research** — which messages, offers and formats a competitor runs, and which ads
  stay live for months (`daysShown`).
- **Agency pitches and audits** — show a prospect every ad their competitors run, country by country.
- **Market entry research** — which brands advertise in a country and on which Google platforms.
- **Lead generation** — find companies actively advertising for a domain or niche.
- **Monitoring** — schedule daily runs and compare `creativeId`s to catch new creatives.

### Quick start

1. Enter a brand in **Advertiser names** (e.g. `HubSpot`) or a website in **Domains**.
2. Optional: pick a country, format, platform or date range.
3. Turn on **Include ad details** if you need per-country dates and EU impressions.
4. Run and export.

A brand name includes all of the brand's verified advertiser accounts (for example "HubSpot",
"Hubspot, Inc." and "HubSpot, Inc."). The run log lists which accounts were matched.

### Input example

```json
{
  "advertiserNames": ["HubSpot"],
  "domains": ["notion.so"],
  "country": "US",
  "format": "VIDEO",
  "platforms": ["YOUTUBE"],
  "dateFrom": "2026-08-01",
  "maxAdsPerTarget": 200,
  "includeDetails": true
}
```

| Input | What it does |
|---|---|
| `advertiserNames` | Brand or company names; all matching verified accounts are included |
| `domains` | Websites the ads point to; returns ads from every advertiser sending traffic there |
| `advertiserIds` | IDs from a Transparency Center URL, e.g. `AR10072600183532683265` |
| `country` | Two-letter ISO code (`US`, `GB`, `DE`, `TW`); empty = all countries |
| `format` | `TEXT`, `IMAGE` or `VIDEO` |
| `platforms` | Google platforms; Google records this only for ads shown since September 2023 |
| `dateFrom`, `dateTo` | `YYYY-MM-DD` |
| `maxAdsPerTarget` | Stop after this many ads per brand / domain / ID (default 100) |
| `includeDetails` | Adds countries, per-country dates, EU impressions and variations (separate event) |

### Output example (one ad)

```json
{
  "advertiserName": "Hubspot, Inc.",
  "advertiserId": "AR10072600183532683265",
  "creativeId": "CR…",
  "adUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR…",
  "format": "IMAGE",
  "imageUrl": "https://…",
  "firstShown": "2024-12-05T03:45:58Z",
  "lastShown": "2026-09-16T16:55:12Z",
  "daysShown": 568,
  "regions": [
    { "country": "US", "lastShown": "2026-09-16" },
    { "country": "ES", "firstShown": "2024-12-12", "impressionsLowerBound": 1000 }
  ],
  "euImpressionsLowerBound": 1000,
  "euFirstShown": "2024-12-12",
  "euLastShown": "2026-09-16",
  "variations": ["https://…"]
}
```

`regions`, `eu…` and `variations` are present only with **Include ad details**. Text ads are
returned as rendered images in `imageUrl` (that is how Google stores them). Image ads also have
`imageWidth` / `imageHeight`; video and rich ads have `previewUrl`; domain searches add
`targetDomain`.

### Pricing

**$1.00 per 1,000 ads** + **$1.00 per 1,000 ads with details** (only when "Include ad details" is on).

Example: 1,000 ads with details = $2.00. Failed searches are never charged.
Platform usage is included. Set a maximum cost per run for a hard cap.

### FAQ

**Are text ads included?** Yes, as rendered images in `imageUrl`.

**Why does the platform filter return fewer ads?** Google only records platforms for ads shown since
September 4, 2023.

**Can I get ad spend or targeting?** No. The Transparency Center does not publish spend, clicks,
keywords or audiences. EU impression lower bounds are the only reach figure Google provides.

**How do I monitor a competitor?** Schedule the Actor daily with the same input and compare
`creativeId`s with the previous run.

**Can I call it from Make, n8n or Zapier?** Yes — use the Apify integration or the
`run-sync-get-dataset-items` API endpoint with the JSON input above.

**Is this data public?** Yes. The Google Ads Transparency Center is a public Google service. The
Actor collects no personal data. You are responsible for using the data in line with applicable
laws and Google's terms.

**Need a feature?** Open an issue on the Issues tab — include your run ID.

# Actor input Schema

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

Brand or company names, e.g. HubSpot. All matching verified advertiser accounts are included.

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

Websites the ads point to, e.g. notion.so. Returns ads from every advertiser that sends traffic to the domain.

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

Advertiser IDs from the Ads Transparency Center URL, e.g. AR10072600183532683265.

## `maxAdsPerTarget` (type: `integer`):

Stop after this many ads for each target.

## `includeDetails` (type: `boolean`):

Also get every country the ad ran in with first/last shown dates, EU impression counts and all creative variations. Charged as a separate event.

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

Two-letter ISO country code (e.g. US, GB, DE, TW). Leave empty for all countries.

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

Only return ads of this format.

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

Only return ads shown on these Google platforms. Google only supports this filter for ads shown since September 2023.

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

Only ads shown on or after this date (YYYY-MM-DD).

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

Only ads shown on or before this date (YYYY-MM-DD).

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

Apify Proxy helps avoid rate limits on large runs.

## Actor input object example

```json
{
  "advertiserNames": [
    "HubSpot"
  ],
  "maxAdsPerTarget": 100,
  "includeDetails": false,
  "country": "",
  "format": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "advertiserNames": [
        "HubSpot"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("engineertsaistudio/google-ads-transparency-scraper-ad-details").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 = {
    "advertiserNames": ["HubSpot"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("engineertsaistudio/google-ads-transparency-scraper-ad-details").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 '{
  "advertiserNames": [
    "HubSpot"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call engineertsaistudio/google-ads-transparency-scraper-ad-details --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,engineertsaistudio/google-ads-transparency-scraper-ad-details"
        }
    }
}
```

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/2aKSA17zYHnzNR8bu/builds/wEgCDEVEukzH35SPZ/openapi.json
