# Google Ads Scraper (`maximedupre/google-ads-scraper`) Actor

Scrape Google Ads Transparency Center creatives from domains, keywords, advertiser IDs, or URLs. Export dates, formats, media URLs, copy, targeting, impressions, and platform filters for competitor research.

- **URL**: https://apify.com/maximedupre/google-ads-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Marketing, Business, Lead generation
- **Stats:** 35 total users, 14 monthly users, 98.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.70 / 1,000 scraped 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/platform/actors/running/actors-in-store#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 library scraper for Transparency Center creatives

Google Ads Scraper extracts public ad creatives from the Google Ads Transparency Center. Add a domain, keyword, advertiser ID, creative ID, or Transparency Center URL, then export structured ad rows with advertiser IDs, creative IDs, formats, shown dates, media URLs, source URLs, and optional full ad details.

- [Google Ads library research](https://apify.com/maximedupre/google-ads-scraper/examples/google-ads-library-research): build a clean archive of public ad creatives by brand, domain, keyword, or advertiser ID.
- [Google Ads Transparency data exporter](https://apify.com/maximedupre/google-ads-scraper/examples/google-ads-transparency-data-exporter): export ad IDs, dates, formats, preview URLs, and source links to CSV, JSON, Excel, API workflows, or BI tools.
- [Competitor ad monitoring](https://apify.com/maximedupre/google-ads-scraper/examples/competitor-ad-monitoring): track when brands launch new Search, YouTube, Shopping, Maps, or Play creatives.
- [PPC creative analysis](https://apify.com/maximedupre/google-ads-scraper/examples/ppc-creative-analysis): collect ad copy, image URLs, video URLs, targeting flags, impression bounds, and variants when Google exposes them.
- [Known creative refresh](https://apify.com/maximedupre/google-ads-scraper/examples/known-creative-refresh): re-run advertiser ID and creative ID pairs to refresh details for saved Google Ads records.

#### 📦 Data you can export

Each item represents one Google Ads Transparency Center creative. Base rows and full-detail rows use the same shape, so downstream systems can read one stable schema.

Common fields include:

- `submittedTarget`
- `advertiserId`
- `advertiserName`
- `advertiserLegalName`
- `advertiserRegionCode`
- `creativeId`
- `format`
- `adUrl`
- `creativePreviewUrl`
- `firstShown`
- `lastShown`
- `totalDaysShown`
- `headline`
- `body`
- `displayUrl`
- `destinationUrl`
- `imageUrls`
- `videoUrls`
- `storedMedia`
- `impressions`
- `targeting`
- `regionStats`
- `platformStats`
- `variants`

Base rows include the monitoring fields that are available from search results. Full ad details try to add source-extractable copy, media arrays, targeting, impression bounds, variants, and region or platform stats when Google exposes them. Missing source fields stay `null` or empty arrays instead of being guessed.

#### 🚀 How to run it

1. Add one or more values in **Targets**. You can use domains such as `nike.com`, keywords, advertiser IDs, creative IDs with advertiser IDs, or Google Ads Transparency Center URLs.
2. Set **Maximum ads** to cap saved creatives across all targets.
3. Choose a **Region** or leave it worldwide.
4. Optionally choose a **Platform**, **Ad format**, **Start date**, or **End date**.
5. Keep **Data to return** set to **Base rows** for broad monitoring, or switch to **Full ad details** when you need copy, media, targeting, impressions, and variants.
6. Leave **Save media files** off unless you need Apify-hosted copies of discovered images or videos.
7. Run the Actor and export the dataset or use the results through the Apify API.

For a simple first run, keep the default `nike.com` target, region `US`, and **Data to return** set to **Base rows**.

#### ⚙️ Input options

**Targets** is the only required input. Accepted values include:

```json
[
  "nike.com",
  "AR16735076323512287233",
  "AR16735076323512287233 CR03144551174665928705",
  "https://adstransparency.google.com/?region=US&domain=nike.com"
]
```

**Maximum ads** limits the number of creative rows saved across the whole run.

**Region** filters ads by where Google reports they were shown. The default is `US`, and worldwide is also available.

**Platform** filters source results to all platforms, Google Search, YouTube, Google Shopping, Google Maps, or Google Play.

**Ad format** filters results to text, image, video, or shopping formats when the source distinguishes them.

**Start date** and **End date** keep ads whose shown date range overlaps your selected window.

**Data to return** controls cost and detail level. Base rows are for broad monitoring. Full ad details add an enrichment charge per creative when details are added.

**Save media files** stores discovered ad images and videos in Apify storage and returns stored links in `storedMedia`. Keep it off when source URLs are enough.

#### 🧾 Output example

```json
{
  "submittedTarget": "nike.com",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "advertiserLegalName": "Nike, Inc.",
  "advertiserRegionCode": "US",
  "creativeId": "CR06922336513384513537",
  "format": "video",
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR06922336513384513537",
  "creativePreviewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.html",
  "firstShown": "2026-04-10",
  "lastShown": "2026-06-17",
  "totalDaysShown": 69,
  "headline": "Nike summer running shoes",
  "body": "Built for warm-weather miles.",
  "displayUrl": "nike.com",
  "destinationUrl": "https://www.nike.com/running",
  "imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/123456789"],
  "videoUrls": ["https://rr1---sn.googlevideo.com/videoplayback/example"],
  "storedMedia": [],
  "impressions": {
    "lowerBound": 1000,
    "upperBound": 2000
  },
  "targeting": null,
  "regionStats": [],
  "platformStats": [],
  "variants": []
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing.

- **Scraped ad**: charged for each Google Ads creative saved from the run.
- **Added ad detail**: charged only when **Data to return** is set to **Full ad details** and enrichment is added for a creative.

Base rows are useful for broad monitoring. Full details are better when you need deeper analysis fields such as copy, media arrays, targeting, impressions, and variants.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

- Use the Apify API to send Google Ads creative rows to your own app or data warehouse.
- Schedule recurring runs to monitor brands, domains, or advertiser IDs.
- Export results as JSON, CSV, Excel, XML, RSS, or HTML.
- Connect webhooks to alert your team when a run finishes.
- Send rows to BI tools, spreadsheets, CRM workflows, or internal reporting systems.

#### ❓ FAQ

**Do I need a Google Ads account?**

No. The Actor works with public Google Ads Transparency Center data and does not need a Google Ads account, Google cookies, or a Google API key.

**Is this a Google Ads library scraper?**

Yes. It scrapes the public Google Ads Transparency Center, which many users call the Google Ads library. It does not scrape private Google Ads account data.

**Can I search by advertiser ID or creative ID?**

Yes. Add an advertiser ID such as `AR16735076323512287233`, or add an advertiser ID and creative ID pair when you know both IDs.

**What is the difference between base rows and full ad details?**

Base rows return monitoring fields such as IDs, advertiser name, format, shown dates, source URL, and preview or media URLs when available. Full ad details try to add source-extractable copy, richer media arrays, variants, targeting, impressions, and region or platform stats.

**Are media files saved by default?**

No. By default, the Actor returns source media URLs. Turn on **Save media files** only when you want discovered images or videos copied to Apify storage for the run.

**Why are some fields empty?**

Google Ads Transparency Center does not expose every field for every creative. Text copy, destination URLs, impression bounds, targeting, region stats, platform stats, and media links can be missing on some ads.

**Can it scrape live Google Search ads?**

No. This Actor scrapes the Google Ads Transparency Center archive. For live paid Shopping ads on Google Search result pages, use Google Shopping Ads Scraper from the related actors below.

**Why not use the Google Ads API?**

The Google Ads API is for account and campaign data you are authorized to access. This Actor is for public Transparency Center creative research across domains, advertisers, keywords, and Google Ads Transparency URLs.

**What are Google Ads Transparency Center alternatives?**

For live Shopping ads, use a Google Shopping ads scraper. For other ad libraries, use source-specific tools such as Facebook, TikTok, or LinkedIn ad scrapers when those sources match your research goal.

### 📝 Changelog

- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~google-ads-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Google Shopping Ads Scraper ↗](https://apify.com/maximedupre/google-shopping-ads-scraper) - Scrape live paid Shopping ads from Google Search results.
- [Google Play Store Scraper ↗](https://apify.com/maximedupre/google-play-store-scraper) - Extract Google Play app listings, ratings, installs, developers, and reviews.
- [Facebook Reviews Scraper ↗](https://apify.com/maximedupre/facebook-reviews-scraper) - Export public Facebook Page reviews and recommendations for reputation research.
- [Web Images Scraper ↗](https://apify.com/maximedupre/web-images-scraper) - Extract image URLs and optional saved image files from public webpages.
- [Website URL Crawler ↗](https://apify.com/maximedupre/website-url-crawler) - Crawl rendered websites and export discovered links for audits and monitoring.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Enter domains, keywords, advertiser IDs, creative IDs, or Google Ads Transparency Center URLs.

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

Limit the number of ad rows returned across all targets.

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

Filter ads shown in a country or use worldwide results.

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

Collect ads from all Google platforms or one platform.

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

Collect all formats or focus on one creative format.

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

Return ads shown on or after this date.

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

Return ads shown on or before this date.

## `detailLevel` (type: `string`):

Choose base monitoring rows or full ad details with copy, media, targeting, and impression fields.

## `downloadMedia` (type: `boolean`):

Store ad images and videos in Apify storage and return stored asset links.

## Actor input object example

```json
{
  "targets": [
    "nike.com"
  ],
  "maxResults": 1000,
  "region": "US",
  "platform": "",
  "adFormat": "",
  "detailLevel": "base",
  "downloadMedia": false
}
```

# Actor output Schema

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

Google Ads creative rows. Base rows include advertiser IDs, creative IDs, dates, formats, and source URLs. Full-detail rows also include copy, media arrays, variants, targeting, and impression data when available.

# 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"
    ],
    "maxResults": 1000,
    "region": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/google-ads-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"],
    "maxResults": 1000,
    "region": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/google-ads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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"
  ],
  "maxResults": 1000,
  "region": "US"
}' |
apify call maximedupre/google-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/google-ads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/4ePpxmgcxtoj3WueA/builds/16inpm23f1qaLioHu/openapi.json
