# Google Ads Transparency Scraper: Competitor Ads Library (`scrape-lads/google-ads-transparency-scraper`) Actor

Google Ads Transparency Scraper for every ad an advertiser or website runs on Search, YouTube, Display, Shopping, Maps and Play. Get format, first and last shown dates, regions, image and video URLs, headline, description and landing page. Filter by region, date and format. $1.50 per 1,000 ads.

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

## Pricing

from $1.40 / 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

### What does Google Ads Transparency Scraper do?

**Google Ads Transparency Scraper** collects every ad an advertiser or website runs on Google, straight from the [Google Ads Transparency Center](https://adstransparency.google.com). It works as a **Google ad library** scraper and a **competitor ads** spy tool: give it advertiser names, advertiser IDs (`AR...`) or domains such as `nike.com`, and it returns one row per ad creative with **format, first and last shown dates, regions, headline, description, landing page, image URLs and the YouTube video**.

It reads the same data the Transparency Center web app uses, over plain HTTP, so there is no browser and no login. Think of it as a **Google Ads Transparency Center API** you can call from the Apify API, schedule daily, or plug into Make, Zapier, Google Sheets and webhooks. Apify adds proxy rotation, retries and monitoring.

### Why use this Google ad library scraper?

- **Competitor ad research:** see every Search, YouTube, Display, Shopping, Maps and Play ad a competitor runs, and how long each has been live.
- **Creative inspiration:** download image and video assets and copy for a whole category.
- **Brand protection:** search a domain to find every advertiser pointing ads at your site.
- **Market monitoring:** schedule a run with "last N days" to catch new ads as they appear.
- **EU reach data:** for EU regions Google publishes a "times shown" range, plus who paid for the ad and its audience targeting.

### How to scrape Google ads from the Transparency Center

1. Open the **Input** tab.
2. Add **advertisers or websites**: a name, an `AR...` ID, a Transparency Center URL, or a domain.
3. Pick a **region**, **ad format**, **platform** and a date range (or "last N days").
4. Set **max ads per advertiser** and **max ads in total**.
5. Click **Start** and download the dataset as JSON, CSV, Excel or HTML.

### Input

```json
{
    "targets": ["nike.com", "AR09597646619583447041", "Samsung Electronics"],
    "region": "US",
    "adFormat": "video",
    "platform": "youtube",
    "lastDays": 90,
    "maxAdsPerTarget": 200,
    "maxResults": 1000,
    "includeCreativeDetails": true,
    "includeAdvertiserSummary": true
}
```

- **Names** are looked up like the site's search box. A name can match several accounts, so the best match is used (raise "Advertisers per name" for more). For a specific account use its `AR...` ID.
- **Domains** return every advertiser's ads that point to that site.
- **Include creative details** adds regions, copy and assets. Turn it off for a faster list of IDs, dates and formats (cheaper: no details fee).

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "type": "ad",
    "creativeId": "CR07320027051652546561",
    "advertiserId": "AR16735076323512287233",
    "advertiserName": "Nike, Inc.",
    "verified": true,
    "format": "video",
    "firstShown": "2026-07-07T14:21:15.000Z",
    "lastShown": "2026-10-15T13:17:02.000Z",
    "daysShown": 85,
    "regions": ["CA", "US"],
    "headline": "Nike Factory Store - Halton Hills",
    "description": "Explore the latest running footwear and apparel at your local Nike Factory Store.",
    "callToAction": "Visit site",
    "landingUrl": "https://www.nike.com/ca/retail",
    "imageUrl": "https://tpc.googlesyndication.com/simgad/6916328398620481038",
    "videoUrl": "https://www.youtube.com/watch?v=grj7FyOMWh8",
    "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR07320027051652546561?region=US"
}
```

#### Data table

| Field | Description |
| --- | --- |
| advertiserId, advertiserName | Advertiser account |
| advertiserLegalName, advertiserCountry, verified | Verified identity details |
| creativeId, adUrl | Ad ID and Transparency Center link |
| format | text, image or video |
| firstShown, lastShown, daysShown | Run dates |
| regions, regionStats | Countries shown, with per-region dates |
| platforms, timesShownMin/Max | Google products and EU reach range |
| topic, fundedBy, audienceSelection | Topic, payer, targeting categories |
| headline, description, callToAction, displayUrl, landingUrl | Ad copy and destination |
| imageUrl, imageUrls, videoUrl, videoThumbnailUrl | Creative assets |

### How much does it cost to scrape Google ads?

**$1.40 per 1,000 ads** for the ad list (IDs, dates, format, preview image), plus **$2.10 per 1,000** for rows with full creative details (regions, copy, landing page, assets, reach and targeting). A complete row is **$3.50 per 1,000**. Advertiser summary rows are free. Example: 5,000 complete ads cost about $17.50. With "Include creative details" off you pay only the $1.40 rate.

### Tips

- Use **last N days** with a schedule to get only new ads.
- Many text ads are stored by Google as a screenshot only. Those rows have the image but no headline text.
- Platform filters only cover ads shown since 4 Sep 2023.
- "Times shown" appears for EU regions only; Google publishes it nowhere else.

### FAQ, disclaimers and support

**Is it legal?** The Transparency Center is a public site and this Actor reads only public ad data. You are responsible for using the data in line with applicable laws and Google's terms.

**Not affiliated with Google.** Found a problem or need a field added? Open an issue on the Issues tab. Custom solutions are available on request.

# Actor input Schema

## `targets` (type: `array`):

One per line. Accepts an advertiser name (looked up like the site's search box), an advertiser ID such as AR16735076323512287233, a Transparency Center advertiser URL, or a website domain such as nike.com (returns every advertiser's ads that point to that site).

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

Only ads shown in this country. Anywhere returns ads from every region.

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

Text = Search ads, Image = display and Shopping images, Video = YouTube and video ads.

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

Only ads shown on this Google product. Google only tracks platforms for ads shown since 4 Sep 2023, so older ads drop out when a platform is picked.

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

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

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

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

## `lastDays` (type: `integer`):

Shortcut for a rolling window, ideal for scheduled runs. Overrides the dates above when set. 0 = off.

## `maxAdsPerTarget` (type: `integer`):

Stop each target after this many ads. Big brands run thousands of ads; the newest are returned first.

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

Hard cap for the whole run, across all targets.

## `includeCreativeDetails` (type: `boolean`):

Read each ad's regions and rendered preview: headline, description, call to action, landing page, image URLs and YouTube video. Turn off for a faster list of IDs, dates and formats only (cheaper: no details fee).

## `includeAdvertiserSummary` (type: `boolean`):

One extra free row per advertiser or website: Google's estimated total ad count, formats and regions seen, verification, legal name and country.

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

A name like "Nike" matches several advertiser accounts (Nike, Inc., Nike Retail BV...). The best match is used by default; raise this to scrape the top N matches.

## `maxConcurrency` (type: `integer`):

Parallel requests. The default is fast and polite.

## Actor input object example

```json
{
  "targets": [
    "nike.com",
    "AR16735076323512287233"
  ],
  "region": "anywhere",
  "adFormat": "all",
  "platform": "all",
  "lastDays": 0,
  "maxAdsPerTarget": 100,
  "maxResults": 1000,
  "includeCreativeDetails": true,
  "includeAdvertiserSummary": false,
  "maxAdvertisersPerName": 1,
  "maxConcurrency": 8
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "targets": [
        "nike.com",
        "AR16735076323512287233"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrape-lads/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 = { "targets": [
        "nike.com",
        "AR16735076323512287233",
    ] }

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

```

## MCP server setup

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