# Google Ads (`canadesk/googleads-transparency`) Actor

Extract ad creatives, advertiser info, and creative details from adstransparency.google.com.

- **URL**: https://apify.com/canadesk/googleads-transparency.md
- **Developed by:** [Canadesk Support](https://apify.com/canadesk) (community)
- **Categories:** SEO tools, Lead generation, Social media
- **Stats:** 16 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#rental-actors

## 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

A scraper for Google Ads Transparency Center. Extract ad creatives, advertiser info, and creative details from adstransparency.google.com.

ℹ️ This scrapes public Google Ads Transparency data — no authentication required. Optional cookies can be provided for personalized results.

### Features

- **Domain Search**: Find all ads running on a specific domain (e.g. `facebook.com`).
- **Advertiser Search**: Look up ads by advertiser name (auto-resolves via SearchSuggestions API).
- **Details Mode**: Fetch full creative details — ad variants, targeting countries, and text content. Runs in batches of 5 for speed.
- **Image Downloads**: Optionally download preview images to the Apify key-value store (separate from details mode).
- **Date Filtering**: Filter by preset ranges (7/30/90 days) or custom YYYYMMDD range.
- **Region Scoping**: Scope results to any of 240+ supported countries.
- **Pagination**: Automatically pages through results up to your configured limit.
- **Total Estimates**: Returns lower/upper bound of total ads matching your query.
- **Rate Limiting**: Built-in delays between queries (1.5s), pagination (500ms), and detail batches (300ms).

### Input Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `query` | String | Domain(s) or advertiser name(s) to search (comma-separated or new lines). Max 5 per run. |
| `searchType` | String | `domain` (default) or `advertiser`. |
| `region` | String | Country code (e.g. `US`, `DE`, `CA`). Default: `anywhere`. |
| `dateRange` | String | `any` (default), `last7`, `last30`, `last90`, or `custom`. |
| `startDate` | String | Custom start date `YYYYMMDD` (only with `dateRange=custom`). |
| `endDate` | String | Custom end date `YYYYMMDD` (only with `dateRange=custom`). |
| `maxResults` | Integer | Max ads to return per query. Default: `40`, max: `10000`. |
| `details` | Boolean | Fetch full creative details per ad. Default: `false`. |
| `downloadImages` | Boolean | Download preview images to KV store (requires `details=true`). Default: `false`. |
| `cookies` | String | Optional browser cookie string for personalized/authenticated requests. |
| `proxy` | Object | Proxy configuration. |

### Output

Data is stored in the default dataset in JSON format. Images (when enabled) are stored in the default key-value store.

#### Example: Domain Search (details=false)

```json
{
  "id": "CR05264906572273811457",
  "advertiserId": "AR01247602649897893889",
  "creativeId": "CR05264906572273811457",
  "advertiserName": "NBC Universal, Inc.",
  "format": "TEXT",
  "url": "https://adstransparency.google.com/advertiser/AR.../creative/CR...?region=anywhere",
  "previewUrl": "https://tpc.googlesyndication.com/archive/simgad/...",
  "previewStoreKey": null,
  "impressions": null,
  "shownCountries": [],
  "countryStats": [],
  "audienceSelections": [],
  "variants": [],
  "originUrl": "https://adstransparency.google.com/advertiser/AR...?region=anywhere",
  "domain": "facebook.com",
  "total_days_shown": 3,
  "verified": false,
  "searchQuery": "facebook.com",
  "totalEstimateLower": "300000",
  "totalEstimateUpper": "400000"
}
```

#### Example: With Details (details=true, downloadImages=false)

```json
{
  "id": "CR13978511766854828033",
  "advertiserName": "Chi nhánh công ty TNHH...",
  "format": "TEXT",
  "previewUrl": "https://tpc.googlesyndication.com/archive/simgad/...",
  "previewStoreKey": null,
  "shownCountries": ["Vietnam"],
  "variants": [
    {
      "textContent": "Ad headline text",
      "images": ["https://tpc.googlesyndication.com/..."],
      "imageStoreKeys": []
    }
  ],
  "verified": false,
  "totalEstimateLower": "300000",
  "totalEstimateUpper": "400000"
}
```

#### Key-Value Store (Images)

When `downloadImages=true`, preview images are downloaded and stored:

| Key Format | Content |
|---|---|
| `{creativeId}_preview_0.jpg` | Preview image (JPEG) |

Access stored images via the Apify API or console after the run completes.

# Actor input Schema

## `query` (type: `string`):

Domain(s) or advertiser name(s) to search for (comma-separated or new lines).

## `searchType` (type: `string`):

Search by domain or by advertiser name.

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

Region code to scope the search (e.g. US, CA, GB). Use 'anywhere' for global.

## `dateRange` (type: `string`):

Preset date range for filtering ads.

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

Custom start date in YYYYMMDD format (only used when dateRange = custom).

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

Custom end date in YYYYMMDD format (only used when dateRange = custom).

## `maxResults` (type: `integer`):

Maximum number of ads to return per query.

## `details` (type: `boolean`):

If enabled, fetches full creative details for each ad (slower but richer data).

## `downloadImages` (type: `boolean`):

If enabled (requires details=true), downloads preview images to key-value store. Significantly slower.

## `cookies` (type: `string`):

Optional browser cookies for authenticated requests. Paste the full cookie string from your browser (e.g. from DevTools → Network → copy Cookie header value).

## `proxy` (type: `object`):

Select proxies to be used by this actor.

## Actor input object example

```json
{
  "query": "apify.com",
  "searchType": "domain",
  "region": "anywhere",
  "dateRange": "any",
  "maxResults": 10,
  "details": false,
  "downloadImages": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "query": "apify.com",
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("canadesk/googleads-transparency").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 = {
    "query": "apify.com",
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("canadesk/googleads-transparency").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 '{
  "query": "apify.com",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call canadesk/googleads-transparency --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,canadesk/googleads-transparency"
        }
    }
}

```

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/MPBXO5Cm0NHax4l1u/builds/ZDUurdjCu8PvkElVQ/openapi.json
