# Google Ads Transparency Analyzer (`amernas/google-ads-transparency-analyzer`) Actor

Google Ads Transparency Analyzer
Apify actor that extracts competitor ad data from Google Ads Transparency Center. Features batch processing, FULL/LITE modes, date/region filtering, and proxy support. Automates competitive intelligence gathering for marketers and analysts. Outputs to Apify datasets.

- **URL**: https://apify.com/amernas/google-ads-transparency-analyzer.md
- **Developed by:** [Traffic Architect](https://apify.com/amernas) (community)
- **Categories:** Lead generation, SEO tools, Automation
- **Stats:** 254 total users, 10 monthly users, 100.0% runs succeeded, 6 bookmarks
- **User rating**: 1.61 out of 5 stars

## Pricing

$5.00 / 1,000 results

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/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 Scraper - Extract Ads, Impressions & Targeting Data

Scrape and extract ad data from the [Google Ads Transparency Center](https://adstransparency.google.com/) by domain name. This Google Ads transparency scraper returns impression stats, targeting info, platform breakdowns, and advertiser details - ideal for competitor ad analysis, ad monitoring, and market research.

> **Need ad copy text (headlines, descriptions, CTAs)?** Check out [amernas/google-ads-analyzer](https://apify.com/amernas/google-ads-analyzer) which includes OCR-based text extraction from ad creatives.

### What data does this Google Ads scraper return?

- **Impression ranges** (min/max) per region and per platform
- **Platform breakdown** - Google Search, YouTube, Maps, Shopping, Display
- **Targeting info** - demographics, locations, contextual signals, customer lists, topics of interest
- **Advertiser details** - legal name, region code, verification info
- **Ad metadata** - format (TEXT/IMAGE/VIDEO), topic category, first/last shown dates

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `keywords` | string | Yes | - | Domain name (e.g. `clay.com`) or full Google Ads Transparency URL |
| `runMode` | string | No | `FULL` | `FULL` for detailed ads, `LITE` for format counts only |
| `dateRangePreset` | string | No | `ANYTIME` | `ANYTIME`, `LAST_7_DAYS`, `LAST_30_DAYS`, or `CUSTOM_RANGE` |
| `customStartDate` | string | No | - | Start date `YYYY-MM-DD` (only with `CUSTOM_RANGE`) |
| `customEndDate` | string | No | - | End date `YYYY-MM-DD` (only with `CUSTOM_RANGE`) |
| `count` | integer | No | `10` | Max number of ad creatives to retrieve |
| `region` | string | No | `anywhere` | Region code to filter by (e.g. `US`, `GB`, `DE`) |
| `proxyConfig` | object | No | Apify Proxy | Proxy configuration |

#### Example input

```json
{
  "keywords": "clay.com",
  "runMode": "FULL",
  "dateRangePreset": "LAST_30_DAYS",
  "count": 10,
  "region": "US"
}
```

### Output

#### FULL mode - ad details with impression data

Each item in the dataset represents one ad creative with full stats:

```json
{
  "url": "https://adstransparency.google.com/advertiser/AR04896.../creative/CR03301...?region=anywhere",
  "advertiserId": "AR04896179704312102913",
  "creativeId": "CR03301252824532254721",
  "type": "VIDEO",
  "lastShown": "2026-04-02T19:36:54.000Z",
  "topic": 10005,
  "targeting": {
    "demographics": { "including": true, "excluding": false },
    "locations": { "including": true, "excluding": false },
    "contextualSignals": { "including": true, "excluding": true },
    "customerLists": { "including": true, "excluding": false },
    "topicsOfInterest": { "including": true, "excluding": false }
  },
  "stats": {
    "byRegion": [
      {
        "name": "Greece",
        "shortCode": "GR",
        "firstShown": "2024-06-15",
        "lastShown": "2026-04-02",
        "impression": { "min": 350000, "max": 400000 },
        "byPlatform": [
          { "name": "Youtube", "impression": { "min": 350000, "max": 400000 } }
        ]
      }
    ],
    "byPlatform": [
      { "name": "Youtube", "impression": { "min": 350000, "max": 400000 } }
    ]
  },
  "advertiser": {
    "id": "AR04896179704312102913",
    "name": "Michalakou Panagiota-Nikoletta",
    "regionCode": "GR",
    "legalName": "Michalakou Panagiota-Nikoletta"
  },
  "variants": [],
  "originalKeyword": "pharm16.gr"
}
```

#### LITE mode - quick ad format counts

Returns format counts per domain without fetching individual ad details:

```json
{
  "originalKeyword": "clay.com",
  "keyword": "clay.com",
  "advertisersFound": { "AR123...": "Clay Inc." },
  "textCreativeCount": 15,
  "imageCreativeCount": 8,
  "videoCreativeCount": 3,
  "unknownFormatCount": 0,
  "regionSearched": "US",
  "totalCreativesCountedFromSearch": 26
}
```

### Use cases

- **Competitor ad spy** - see what ads competitors are running, where, and how many impressions they get
- **Google Ads market research** - discover which platforms and regions a brand focuses on
- **Ad monitoring and tracking** - track when ads appear and disappear across regions
- **Advertiser compliance audit** - verify advertiser identity, legal name, and targeting practices

### FAQ

#### How do I scrape Google Ads for a competitor's domain?

Set the `keywords` field to the competitor's domain (e.g. `competitor.com`). The scraper searches the Google Ads Transparency Center and returns all active ad creatives, impression counts, and targeting details for that domain.

#### What is the Google Ads Transparency Center?

The [Google Ads Transparency Center](https://adstransparency.google.com/) is Google's public database of all ads running across Google Search, YouTube, Maps, Shopping, and Display. Anyone can look up ads by advertiser or domain. This scraper automates that lookup and extracts structured data.

#### Can I get exact impression counts?

Google reports impressions as ranges (e.g. 350,000-400,000), not exact numbers. This is how the Transparency Center works - the scraper returns the min/max range as reported by Google.

#### Can I extract ad copy text (headlines, descriptions)?

This actor does not include ad copy extraction. For OCR-based text extraction from ad creatives (headlines, descriptions, CTAs), use [amernas/google-ads-analyzer](https://apify.com/amernas/google-ads-analyzer).

#### What platforms are covered?

Google Search, YouTube, Google Maps, Google Shopping, and Google Display Network. The scraper returns impression breakdowns per platform for each ad creative.

#### Can I filter ads by country or region?

Yes - set the `region` field to a country code like `US`, `GB`, `DE`, `FR`, etc. Use `anywhere` (default) to see ads across all regions.

#### How is this different from google-ads-analyzer?

This actor is a lighter image without OCR. If you need ad copy text extraction, use [amernas/google-ads-analyzer](https://apify.com/amernas/google-ads-analyzer). Otherwise, this actor returns the same impression data, targeting info, and advertiser details.

#### Can I scrape ads for multiple domains?

Currently the actor accepts one domain per run. To scrape multiple domains, trigger separate runs or use the Apify API to orchestrate batch runs.

### Limitations

- **Ad copy text** (headlines, descriptions, CTAs) is not available through the Transparency Center API. Use [amernas/google-ads-analyzer](https://apify.com/amernas/google-ads-analyzer) for OCR-based text extraction.
- **Video URLs** are not directly exposed by the Google Ads Transparency Center.
- Impression data is provided as ranges (min/max), not exact numbers - this is how Google reports it.

### Feedback

If you have any issues or feature requests, please reach out through the Apify console.

# Actor input Schema

## `keywords` (type: `string`):

A single domain name (e.g., 'clay.com', 'apify.com') or Google Ads Transparency Center URL (e.g., 'https://adstransparency.google.com/?region=anywhere\&domain=clay.com') to search for ads.

## `runMode` (type: `string`):

Select the run mode. 'FULL' fetches detailed ad information. 'LITE' fetches only counts of ad creatives per format for each advertiser.

## `dateRangePreset` (type: `string`):

Select a preset date range for filtering ads, or choose 'Custom Range' to specify start and end dates.

## `customStartDate` (type: `string`):

Specify the start date for the custom date range (e.g., 2023-01-01). Used only if 'Date Range Preset' is 'Custom Range'.

## `customEndDate` (type: `string`):

Specify the end date for the custom date range (e.g., 2023-01-31). Used only if 'Date Range Preset' is 'Custom Range'.

## `count` (type: `integer`):

The maximum number of ad creatives to retrieve for each keyword/found advertiser when in FULL mode. For LITE mode, the actor attempts to count all relevant creatives.

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

The region code to filter ads by (e.g., 'US', 'GB'). Use 'anywhere' for no specific region. Refer to README.md or script's show\_regions\_list() for available codes.

## `proxyConfig` (type: `object`):

Select proxies to be used by the scraper. Uses Apify Proxy or custom proxy URLs.

## Actor input object example

```json
{
  "runMode": "FULL",
  "dateRangePreset": "ANYTIME",
  "count": 10,
  "region": "anywhere",
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

## `resultDataset` (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 = {
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("amernas/google-ads-transparency-analyzer").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 = { "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    } }

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7VhhpbSGgLeUBqklh/builds/R0c7z0CeGk6xYZTjF/openapi.json
