# Google Ads Transparency Center Scraper - Competitor Ads by Site (`tenfoldfleet/google-ads-transparency-scraper`) Actor

Get all Google ads a competitor runs from the Google Ads Transparency Center, by domain, advertiser name or ID, in bulk. Advertiser, creative ID, format, first/last shown, days shown, preview image, ad link; region, date and format filters. $1 per 1,000 ads; failures free.

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

## Pricing

from $1.00 / 1,000 ad scrapeds

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

### What does Google Ads Transparency Center Scraper do?

**Google Ads Transparency Center Scraper** pulls the ads any advertiser runs on Google from the public [Google Ads Transparency Center](https://adstransparency.google.com/). Give it **competitor domains** (nike.com), **advertiser names** ("Nike, Inc.") or **advertiser IDs** (AR16735076323512287233), and it returns every **text, image and video ad** with its first and last shown dates, days shown, preview image URL and a direct link to the ad. Use it as a **Google Ads Transparency API**: run it from the Apify API, a schedule, Make, Zapier or an AI agent.

It works over plain HTTP against the same endpoints the Transparency Center website uses, so it is fast and cheap: no browser, no login, no cookies.

### Why use it?

- **Competitor ad research**: see which ads your competitors run on Google Search, YouTube and Display, and for how long.
- **Ad creative inspiration**: collect long-running ads (a high `daysShown` usually means the ad performs).
- **Scheduled monitoring**: run it daily or weekly on a list of competitor domains and spot new creatives by `creativeId` and `firstShown`.
- **Agency prospecting**: check whether a prospect advertises on Google at all, and in which countries.
- **Bulk input**: paste hundreds of domains at once; each one is searched separately and duplicate ads are removed.

### What data can it extract?

| Field | Description |
|---|---|
| `advertiserName`, `advertiserId` | Verified advertiser behind the ad |
| `creativeId` | Unique ad ID (stable across runs, good for monitoring) |
| `format` | TEXT, IMAGE or VIDEO |
| `targetDomain` | Domain the ad points to (domain searches) |
| `firstShown`, `lastShown` | ISO timestamps of the first and last time the ad was shown |
| `daysShown` | Number of days the ad has run |
| `previewImageUrl` | Image of the ad (text ads and many image ads) |
| `previewUrl` | Image URL or Google's preview script for the ad |
| `adUrl` | Link to the ad in the Transparency Center |
| `regions`, `variations` | Countries where the ad ran and all ad variations (with **Fetch ad details**) |
| `totalAdsEstimate` | Google's estimate of the total number of ads for the input |

### How to scrape Google Ads Transparency Center

1. Open the Actor and add one or more **domains**, **advertiser names** or **advertiser IDs**.
2. Optionally pick a **region** (US, GB, DE ...), a **date range** and an **ad format**.
3. Set **Max ads per input** (default 200). Big brands have more than 100,000 ads.
4. Click **Start** and download the ads as JSON, CSV or Excel, or read them through the API.

### How much does it cost?

Pay per result: **$1 per 1,000 ads** ($0.001 per ad), plus a tiny $0.00005 start fee per run. Inputs with no ads, advertiser names that match nothing, invalid input and failed requests are written to the dataset as error rows and are **free**. Set a maximum cost per run in Apify and the Actor stops cleanly when it is reached.

### Input

```json
{
    "domains": ["nike.com", "hubspot.com"],
    "advertiserQueries": ["Nike, Inc."],
    "advertiserIds": ["AR16735076323512287233"],
    "region": "US",
    "dateFrom": "2026-09-01",
    "dateTo": "2026-10-01",
    "format": "all",
    "maxAdsPerInput": 200,
    "fetchDetails": false
}
```

### Output

```json
{
    "input": "nike.com",
    "inputType": "domain",
    "region": "US",
    "advertiserId": "AR16735076323512287233",
    "advertiserName": "Nike, Inc.",
    "creativeId": "CR08881034040665178113",
    "format": "TEXT",
    "targetDomain": "nike.com",
    "firstShown": "2023-11-17T00:21:35.000Z",
    "lastShown": "2026-10-04T13:31:29.000Z",
    "daysShown": 887,
    "previewImageUrl": "https://tpc.googlesyndication.com/archive/simgad/16508221996607692898",
    "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR08881034040665178113?region=US"
}
```

If Google blocks several requests in a row, the remaining inputs are skipped at once as free error rows, so a blocked scheduled run ends quickly. Failed inputs look like `{"error": "no ads found for this input and filters", "input": "example.com", "reason": "..."}`. You can download the dataset as JSON, CSV, Excel, XML or HTML.

### Tips

- A **domain** search returns ads from every advertiser that points to that domain, including resellers and affiliates. Use an **advertiser ID** for one advertiser only.
- Advertiser names are matched to the best advertiser by whole words: exact name first, then the one with the most ads. Check `resolvedAdvertiserName` in the output.
- Inputs that lead to the same search (`www.nike.com` and `nike.com`, or a name and the ID it resolves to) are searched once. The second one gets a free `duplicate input` row that names the input its ads are listed under.
- For monitoring, schedule the Actor and compare `creativeId` values between runs.
- **Fetch ad details** makes one extra request per ad; leave it off for large runs.

### FAQ

#### Is it legal to scrape the Google Ads Transparency Center?

The Transparency Center is public data that Google publishes so anyone can see who advertises. The Actor only reads public pages, uses no login and respects rate limits. Check your local laws and Google's terms for your use case.

#### Does it need a proxy?

It uses Apify datacenter proxy by default and switches to residential proxy automatically if Google rate-limits a datacenter IP.

#### Why do some ads have no image?

Some image and video ads are only available as Google's preview script (`previewType: "script"`), not as a static image.

#### Can I get ads from a specific country?

Yes. Set **region** to a 2-letter country code. "anywhere" returns ads from all countries.

### Disclaimer

This Actor is not affiliated with or endorsed by Google. Google Ads is a trademark of Google LLC. It extracts only publicly available advertising data.

### More tools from Tenfold Fleet

| Actor | Price |
|---|---|
| [ATS Jobs Scraper - Greenhouse, Lever, Ashby & 5 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | $2 per 1,000 (job posting) |
| [Website Contact Scraper - Emails, Phones & Socials](https://apify.com/tenfoldfleet/company-contact-finder) | $8 per 1,000 (website with contacts) |
| [Google News Scraper - Articles, Real URLs & Full Text](https://apify.com/tenfoldfleet/google-news-scraper) | $2 per 1,000 (article) |
| [Keyword Search Volume, CPC & Difficulty Checker (Bulk)](https://apify.com/tenfoldfleet/keyword-search-volume) | $5 per 1,000 (keyword with data) |
| [Remote Jobs Aggregator - RemoteOK, WWR, Himalayas & 4 more](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | $1.2 per 1,000 (unique remote job) |
| [SEO Audit Tool - Technical On-Page SEO Checker & Score](https://apify.com/tenfoldfleet/seo-audit-tool) | $20 per 1,000 (page audited) |
| [Shopify Products Scraper - Prices, Variants & Stock](https://apify.com/tenfoldfleet/shopify-products-scraper) | $0.8 per 1,000 (product) |
| [Shopify App & Theme Detector - Store Analyzer & Contacts](https://apify.com/tenfoldfleet/shopify-store-analyzer) | $8 per 1,000 (shopify store analyzed) |
| [Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt](https://apify.com/tenfoldfleet/sitemap-url-extractor) | $0.4 per 1,000 (url extracted) |
| [Technology Detector - Wappalyzer & BuiltWith Alternative](https://apify.com/tenfoldfleet/tech-stack-detector) | $10 per 1,000 (website analyzed) |
| [URL to Markdown - Web Page to LLM-Ready Text for AI Agents](https://apify.com/tenfoldfleet/url-to-markdown) | $1 per 1,000 (page converted) |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | $1.5 per 1,000 (job posting) |
| [YouTube Comments Scraper - Replies, Likes & Sort by Newest](https://apify.com/tenfoldfleet/youtube-comments-scraper) | $0.6 per 1,000 (comment scraped) |
| [YouTube Transcript Scraper - Captions & Subtitles API](https://apify.com/tenfoldfleet/youtube-transcript-scraper) | $3 per 1,000 (transcript extracted) |

# Actor input Schema

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

Websites whose Google ads you want, e.g. nike.com. URLs are fine (https://www.nike.com/us becomes nike.com). Returns every ad Google shows that points to the domain.

## `advertiserQueries` (type: `array`):

Advertiser names as shown in the Transparency Center, e.g. "Nike, Inc.". Each name is matched to the best advertiser (exact name first, then most ads). Names that match no advertiser are returned as free error rows.

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

Transparency Center advertiser IDs (AR followed by 20 digits) or advertiser page URLs. Most precise input.

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

Where the ads were shown: "anywhere" or a 2-letter country code (US, GB, DE, FR, IN, ...).

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

Only ads shown on or after this date (YYYY-MM-DD). Leave empty for all time.

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

Only ads shown on or before this date (YYYY-MM-DD). Leave empty for today.

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

Only ads of this format.

## `maxAdsPerInput` (type: `integer`):

Stop after this many ads for each domain, name or ID. Big brands have 100,000+ ads.

## `fetchDetails` (type: `boolean`):

Also fetch each ad's detail page: all variations (preview URLs) and the countries where it ran, with the last date shown in each. One extra request per ad, so slower; same price.

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

Stop the whole run after this many ads. 0 = no limit.

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

Apify datacenter proxy by default. If Google blocks datacenter IPs, the run retries through residential proxy automatically.

## Actor input object example

```json
{
  "domains": [
    "nike.com",
    "hubspot.com"
  ],
  "region": "anywhere",
  "format": "all",
  "maxAdsPerInput": 200,
  "fetchDetails": false,
  "maxItems": 0,
  "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 = {
    "domains": [
        "nike.com",
        "hubspot.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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