# Google Ads Transparency Scraper — Competitor Ad Library (`datasmithhq/google-ads-transparency-scraper`) Actor

See every ad a competitor runs on Google Search, YouTube and Display. Search by advertiser name, ID or website domain. Filter by country and format. Ad images, dates, variations and countries shown.

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

## Pricing

from $2.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?

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 Ads Transparency Scraper — Competitor Ad Library

See **every ad a competitor runs on Google** — Search, YouTube, Display, Shopping and more —
straight from Google's official Ads Transparency Center. Search by **advertiser name**,
**advertiser ID** or **website domain**, filter by country and format, and export to JSON,
CSV, Excel or Google Sheets.

### Why use this Google Ads scraper?

- **Search the way you think.** Type `nike.com`, `Nike, Inc.` or an advertiser ID — mix them in one run.
- **Domain search finds every advertiser** promoting a website, including resellers and agencies.
- **Country, format and date filters.** Only US ads, only video ads, only ads shown in the last 7 days — or everything, worldwide.
- **Optional deep details.** Every variation of an ad plus the countries where it ran, with last-shown dates.
- **Fast.** In our tests: 312 ads from 4 searches in about 30 seconds.
- **Built for reliability.** Automatic retries with fresh IPs when Google rate-limits.
- **Pay only for ads you get.** No subscription, no charge for empty searches.

### What data do you get?

| Field | Example |
|---|---|
| advertiserName | Nike, Inc. |
| advertiserId | AR16735076323512287233 |
| format | TEXT / IMAGE / VIDEO |
| firstShown / lastShown | 2026-07-27 / 2026-10-23 |
| imageUrl | Preview image of the ad |
| previewUrl | Google's preview for video and dynamic ads |
| adUrl | Link to the ad in Google's Ads Transparency Center |
| variationCount, variations, regionsShown | With **Include ad details** on |

### How to use

1. Enter one or more **advertisers or domains** (e.g. `nike.com`, `Adidas`, `AR16735076323512287233`).
2. Optionally set a **country** (`US`, `GB`, `IN`, …), an **ad format**, and **only ads shown in the last N days** (e.g. `7` for what's live this week).
3. Set **max ads per advertiser/domain** and click **Start**.

### Output example

```json
{
  "searchTerm": "Nike, Inc.",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR01810358754265268225",
  "format": "TEXT",
  "firstShown": "2026-07-27",
  "lastShown": "2026-10-23",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/2851071087865252306",
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR01810358754265268225?region=US"
}
```

With **Include ad details**:

```json
{
  "variationCount": 5,
  "regionsShown": [
    { "region": "US", "lastShown": "2026-09-30" },
    { "region": "CA", "lastShown": "2026-07-12" }
  ]
}
```

### Use cases

- **Competitor research** — see which messages, offers and formats rivals are running right now
- **Creative inspiration** — collect ad examples for your niche
- **Agency pitches** — show prospects what their competitors spend effort on
- **Brand protection** — find who else is advertising your domain or brand
- **Market monitoring** — schedule weekly runs and track new ads over time

### Pricing

**$0.002 per ad ($2 per 1,000 ads)**, plus a start fee of under $0.0001 per run.
Example: the latest 100 ads of one competitor = **$0.20**.
No subscription. Proxy and platform costs are included, and empty searches are never charged.

### Use via API

Call the Actor from any language with the Apify API or client libraries. Example input:

```json
{
  "searchTerms": ["nike.com", "Adidas", "AR16735076323512287233"],
  "region": "US",
  "adFormat": "ALL",
  "shownInLastDays": 30,
  "maxAdsPerSearch": 100,
  "includeDetails": false
}
```

### FAQ

**Does this show ad spend or impressions?** No — Google's Ads Transparency Center doesn't publish
spend for commercial ads, so no tool can get it from there.

**Searching a big brand by name finds the wrong account?** Big brands often advertise under
legal names (e.g. "Samsung Electronics America, Inc.") or several country accounts. Search by
**domain** (`samsung.com`) to get every advertiser promoting the site, or copy the exact
advertiser ID from the run log, which lists the other matches it found.

**How do I get only ads that are running now?** Set **Only ads shown in the last N days** to `1` (shown today) or `7`. It uses the same date filter as Google's site, in Pacific Time, and Google keeps about a year of dates, so the maximum is 365. You only pay for the ads that match.

**Why does an advertiser show 0 ads?** The advertiser may not run ads in the selected country.
Try leaving **Country** empty.

**Is it legal?** It collects data Google publishes publicly for ad transparency.

**Something broke?** Open an issue on the Issues tab and it will be fixed quickly.

# Actor input Schema

## `searchTerms` (type: `array`):

Advertiser names (e.g. Nike), advertiser IDs (e.g. AR06641858037806006273) or website domains (e.g. nike.com). Mix freely.

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

Two-letter country code (US, GB, IN, DE, ...) to see only ads shown there. Leave empty for all countries.

## `adFormat` (type: `string`):

Only return ads of this format.

## `shownInLastDays` (type: `integer`):

Only return ads that were shown at some point in the last N days, today included (Pacific Time, like Google's own date filter). 1 = shown today, 7 = the past week, 30 = the past month. Google keeps about a year, so the maximum is 365. Leave empty for any time.

## `maxAdsPerSearch` (type: `integer`):

Stop after this many ads for each search term (and each matched advertiser). Keeps cost predictable.

## `maxAdvertisersPerName` (type: `integer`):

When you search by name, how many matching advertisers to include. Exact name matches are preferred.

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

Also fetch every variation of each ad and the countries where it ran (with last-shown dates). Slower: one extra request per ad.

## `maxRetries` (type: `integer`):

How many times to retry a request Google rate-limits before giving up.

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

Apify Proxy keeps runs reliable by switching IPs when Google rate-limits.

## Actor input object example

```json
{
  "searchTerms": [
    "nike.com"
  ],
  "region": "",
  "adFormat": "ALL",
  "maxAdsPerSearch": 100,
  "maxAdvertisersPerName": 1,
  "includeDetails": false,
  "maxRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One item per ad: advertiser, format, first/last shown dates, preview and link.

# 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 = {
    "searchTerms": [
        "nike.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasmithhq/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 = {
    "searchTerms": ["nike.com"],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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