# Google Ads Transparency Scraper - Competitor Ads (`scrapewise/google-ads-transparency`) Actor

Every ad an advertiser or domain runs on Google Search, YouTube, Shopping, Maps and Play, from the Ads Transparency Center: format, first and last shown, days running, countries, image and preview. Filter by country, platform, format and date. HTTP only.

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

## Pricing

from $1.28 / 1,000 ad delivereds

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?

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 / Anúncios do Google

Every ad an advertiser or website runs on Google Search, YouTube, Shopping, Maps and Play, straight from Google's public Ads Transparency Center, as clean rows ready for a spreadsheet or your own tool.

### Use cases

- **Competitive intelligence:** list every creative a competitor is running in your country, with when it started and how long it has been live.
- **Lead generation:** check which companies from a list of domains are actively spending on Google Ads right now.
- **Creative research:** collect image and video ads of a whole market by format and platform to see what messaging is running.

### Input example

```json
{
  "searchQuery": "magazineluiza.com.br",
  "region": "BR",
  "maxItems": 50
}
```

`searchQuery` accepts:

| You type | The Actor searches |
|---|---|
| a domain: `nike.com` | every advertiser whose ads point to that domain |
| an advertiser ID: `AR16735076323512287233` | that advertiser account |
| a Transparency Center URL | the advertiser or domain in the URL |
| a brand name: `Magazine Luiza` | its top matching advertiser accounts (`maxAdvertisersPerQuery`, default 3) |

Optional filters: `region` (two-letter country code), `platform` (`google_search`, `youtube`, `google_shopping`, `google_maps`, `google_play`), `format` (`text`, `image`, `video`), `dateRange` (last 7, 30, 90 or 365 days) or `dateFrom` / `dateTo`. Use `queries` for several targets in one run.

**Already using another Google Ads Transparency Actor?** The input accepts the field names of the two most used ones (`searchQuery`, `maxResults`, `platform`, `dateFrom`, `dateTo`, `queries`, `domains`, `advertiserIds`, `adFormat`, `startDate`, `endDate`, `includeDetails`) and the output keeps the common names (`advertiserName`, `adFormat`, `firstShown`, `lastShown`, `approxDaysShown`, `imageUrl`, `previewUrl`, `adUrl`), so you can switch without changing your integration.

### Output example

Real run on 11/09/2026 with the input above (3 of 50 rows, `coletado_em` and `url_origem` omitted):

```json
{"creativeId": "CR05235089887102763009", "advertiserId": "AR14248386603834671105", "advertiserName": "MAGAZINE LUIZA S/A", "domain": "magazineluiza.com.br", "adFormat": "TEXT", "firstShown": "2024-10-02", "lastShown": "2026-09-11", "approxDaysShown": 707, "regions": ["BR"], "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/10534189306558596115", "adUrl": "https://adstransparency.google.com/advertiser/AR14248386603834671105/creative/CR05235089887102763009?region=BR"}
{"creativeId": "CR15077073820311355393", "advertiserId": "AR14248386603834671105", "advertiserName": "MAGAZINE LUIZA S/A", "domain": "magazineluiza.com.br", "adFormat": "IMAGE", "firstShown": "2026-02-26", "lastShown": "2026-09-11", "approxDaysShown": 198, "regions": ["BR"], "imageUrl": null, "adUrl": "https://adstransparency.google.com/advertiser/AR14248386603834671105/creative/CR15077073820311355393?region=BR"}
{"creativeId": "CR13983666681092767745", "advertiserId": "AR14248386603834671105", "advertiserName": "MAGAZINE LUIZA S/A", "domain": "magazineluiza.com.br", "adFormat": "VIDEO", "firstShown": "2026-02-26", "lastShown": "2026-09-11", "approxDaysShown": 198, "regions": ["BR"], "imageUrl": null, "adUrl": "https://adstransparency.google.com/advertiser/AR14248386603834671105/creative/CR13983666681092767745?region=BR"}
```

With `"includeDetails": true` each row also gets every country the ad ran in, with the last date shown there, and the number of variations:

```json
{"creativeId": "CR13983666681092767745", "adFormat": "VIDEO", "regionsDetail": [{"region": "BR", "lastShown": "2026-09-11"}], "regions": ["BR"], "variations": 3, "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&..."}
```

`imageUrl` is the static file Google archived for the ad, when there is one. HTML5 and video ads come with `previewUrl`, the script Google uses to render the ad on the Transparency Center page.

### Price

**US$ 1.50 per 1,000 ads, no monthly fee.** Country details are included at the same price.

### How to use

- **API**: call the Actor's `run-sync-get-dataset-items` endpoint with the input above and get the ads back as JSON or CSV.
- **Schedule**: run it weekly on a list of competitor domains with `dateRange: "last_7_days"` to see only what they launched that week.
- **Integrations**: n8n, Make or Zapier through the official Apify app, to push new ads into Google Sheets, Slack or a CRM.

### Limitations

- Data is what Google publishes in the Transparency Center: no spend, impressions or clicks (Google only shows those for political ads).
- `domain` is filled when you search by domain; searches by advertiser return the advertiser's ads without it.
- Google applies the platform filter only to ads shown from 2023-09-04 on.
- Google shows a captcha to some IPs. The Actor switches IP automatically (datacenter first, residential only when needed), so a run may take a few extra seconds, but it does not fail for that.
- If Google changes the Transparency Center, the run fails with a clear error instead of returning an empty dataset. Open an issue and it will be fixed.

This Actor collects only public data that Google publishes in the Ads Transparency Center and respects the site's terms. Independent tool, not affiliated with Google.

***

### Em português

Todos os anúncios que um anunciante ou site roda no Google (Pesquisa, YouTube, Shopping, Maps e Play), direto da Central de Transparência de Anúncios. Busca por domínio, id do anunciante ou nome da marca, com filtro de país, plataforma, formato e data. Serve para acompanhar os anúncios do concorrente no Brasil, descobrir quais empresas de uma lista estão anunciando agora e montar referência de criativos por formato.

**Preço: US$ 1,50 por 1.000 anúncios, sem mensalidade.**

# Actor input Schema

## `searchQuery` (type: `string`):

A domain (nike.com), an advertiser ID (AR16735076323512287233), a Transparency Center URL, or a brand name (Nike). A brand name is resolved to its top matching advertisers. Same field name as solidcode/ads-transparency-scraper.

## `queries` (type: `array`):

Optional list, one per line, same rules as the field above. Also accepts `domains` and `advertiserIds` lists via API.

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

Only ads shown in this country. Leave empty for worldwide.

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

Only ads shown on this Google platform. Google applies this filter to ads shown from 2023-09-04 on.

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

Only ads of this format.

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

Quick date filter. Ignored when 'Shown from' is set.

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

Only ads shown on or after this date. Leave empty for no start limit.

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

Only ads shown on or before this date. Leave empty for no end limit.

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

Maximum number of ad creatives to return across all searches.

## `maxAdvertisersPerQuery` (type: `integer`):

When you search a brand name, how many matching advertiser accounts to scrape (best match first, then by ad volume).

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

One extra request per ad to add every country the ad ran in (with the last date shown in each) and the number of creative variations. Slower, same price.

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

Apify datacenter proxy by default. The Actor switches IP automatically when Google asks for a captcha.

## Actor input object example

```json
{
  "searchQuery": "nike.com",
  "region": "",
  "platform": "",
  "format": "",
  "dateRange": "",
  "maxItems": 30,
  "maxAdvertisersPerQuery": 3,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "searchQuery": "nike.com",
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/google-ads-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 = {
    "searchQuery": "nike.com",
    "maxItems": 30,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/google-ads-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/Td37aMt6xgPiheMk4/builds/6PeDJXl7FXsemWFWl/openapi.json
