# Google Ads Transparency Scraper: Ads, Text & Videos (`tindacloud/google-ads-transparency`) Actor

Scrape Google Ads Transparency Center: all Search, Display and YouTube ads of any advertiser or domain with headline and ad copy, images, YouTube video IDs, first and last shown dates and countries. Filter by region, format and date.

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

## Pricing

from $1.50 / 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: Ads, Text & Videos

Scrape the **Google Ads Transparency Center**: every Search, Display, Shopping and YouTube ad an advertiser has run. Search by **brand name, domain or advertiser ID**, filter by **country, format and date**, and get each ad's **headline and ad copy, image, YouTube video ID, first and last shown dates and countries**.

### Why this scraper

- **Ad content, not just preview links.** Many scrapers return only Google's preview script URL. This one reads each preview and extracts:
  - headline and ad texts
  - call to action
  - product title and image for Shopping ads
  - YouTube video ID and URL for video ads
- **Three ways in:**
  - brand search: picks the matching advertisers with the most ads
  - domain: all ads linking to e.g. hubspot.com, from any advertiser
  - advertiser ID or URL
- **Countries per ad.** Where each ad was shown and when it was last shown there.
- **Filters:** country (any ISO code), format (text / image / video), date range.
- **Advertiser size.** The total ad count range for each advertiser is included.
- **No browser, no login.** Fast HTTP requests; 20 video ads in about 4 seconds in testing.

### Input example

```json
{
  "searchTerms": ["nike"],
  "advertisersPerSearchTerm": 2,
  "domains": ["hubspot.com"],
  "advertiserIds": ["AR16735076323512287233"],
  "region": "US",
  "format": "all",
  "dateFrom": "2026-08-01",
  "includeAdContent": true,
  "includeDetails": true,
  "maxAdsPerAdvertiser": 200
}
```

### Output example

```json
{
  "advertiserId": "AR10072600183532683265",
  "advertiserName": "Hubspot, Inc.",
  "creativeId": "CR07622365527788224513",
  "format": "IMAGE",
  "firstShown": "2021-10-25T07:00:00.000Z",
  "lastShown": "2026-09-17T12:57:49.000Z",
  "daysShown": 1789,
  "domain": "hubspot.com",
  "headline": null,
  "adTexts": null,
  "callToAction": null,
  "youtubeVideoId": null,
  "youtubeUrl": null,
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/18000376030814354930",
  "regions": [
    {
      "region": "CA",
      "lastShownDate": "2026-09-17"
    },
    {
      "region": "US",
      "lastShownDate": "2026-09-17"
    },
    {
      "region": "FR",
      "lastShownDate": "2026-09-17"
    },
    {
      "region": "IE",
      "lastShownDate": "2026-08-14"
    },
    {
      "region": "IT",
      "lastShownDate": "2026-09-02"
    },
    {
      "region": "RO",
      "lastShownDate": "2025-06-18"
    },
    {
      "region": "DE",
      "lastShownDate": "2026-08-26"
    },
    {
      "region": "ES",
      "lastShownDate": "2026-07-13"
    },
    {
      "region": "PL",
      "lastShownDate": "2026-07-12"
    },
    {
      "region": "IN",
      "lastShownDate": "2026-08-25"
    },
    {
      "region": "PT",
      "lastShownDate": "2026-08-11"
    },
    {
      "region": "MX",
      "lastShownDate": "2026-09-16"
    },
    {
      "region": "GR",
      "lastShownDate": "2026-09-11"
    },
    {
      "region": "NL",
      "lastShownDate": "2026-03-24"
    },
    {
      "region": "BE",
      "lastShownDate": "2025-11-09"
    },
    {
      "region": "SE",
      "lastShownDate": "2025-11-12"
    },
    {
      "region": "NO",
      "lastShownDate": "2024-04-23"
    },
    {
      "region": "AT",
      "lastShownDate": "2025-12-23"
    }
  ],
  "variationsCount": 1,
  "adUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR07622365527788224513",
  "advertiserTotalAdsMin": 3000,
  "advertiserTotalAdsMax": 4000,
  "searchTarget": "hubspot.com",
  "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?…"
}
```

### Use cases

- **Competitive intelligence:** see every ad competitors run, where, since when, and with what message.
- **Creative research:** collect headlines, offers and YouTube creatives for inspiration and testing.
- **Agencies & PPC teams:** audit clients' and prospects' ad activity by country and format.
- **Brand protection:** find advertisers bidding on or linking to your domain.
- **Market research & AI analysis:** large ad copy datasets for trend and messaging analysis.

### Pricing

Pay per ad returned, with ad content extraction and regions included, plus a negligible start fee per run.

### Monitoring mode

Turn on `onlyNewAds` and the Actor remembers which ads it already returned. On the next run you get **only ads that appeared since** — the fastest way to see a competitor launch a campaign. Ads you already have are skipped before the slow detail lookup, so a daily check is cheap.

### Notes

- Data comes from Google's public Ads Transparency Center. Some ads show no text (e.g. image-only creatives) or limited detail.
- `daysShown` is Google's count of days the creative was served.
- If something breaks after a Google change, open an issue and it will be fixed quickly.

### Related Actors

Other scrapers from the same maker, built the same way — no browser where it isn't needed, one flat price per result:

- [Website to Markdown for AI & RAG](https://apify.com/tindacloud/website-to-markdown)
- [Website Contact & Email Scraper](https://apify.com/tindacloud/website-contact-scraper)

# Actor input Schema

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

Brand or company names. The top matching advertisers (by number of ads) are scraped.

## `advertisersPerSearchTerm` (type: `integer`):

How many matching advertiser accounts to take for each search term.

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

Get all ads that link to these domains, from any advertiser (e.g. nike.com).

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

AR… IDs or adstransparency.google.com advertiser URLs.

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

Two-letter country code where ads were shown (US, GB, DE, KR…), or 'anywhere'.

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

Filter by creative format.

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

Only ads shown on or after this date.

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

Only ads shown on or before this date.

## `includeAdContent` (type: `boolean`):

Read each ad preview to extract headline and ad copy, call to action, image URL and YouTube video ID. Same price.

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

Adds the countries where each ad was shown (with last shown date) and number of variations.

## `maxAdsPerAdvertiser` (type: `integer`):

Newest ads first.

## `onlyNewAds` (type: `boolean`):

Monitoring mode. Remembers which ads you already pulled and returns only ads that appeared since the last run. Put it on a daily schedule to watch a competitor's new campaigns — you pay only for new ads.

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

Stop after this many ads. You are charged per ad.

## `proxy` (type: `object`):

Apify datacenter proxy works for the Ads Transparency Center.

## Actor input object example

```json
{
  "searchTerms": [
    "nike"
  ],
  "advertisersPerSearchTerm": 3,
  "region": "anywhere",
  "format": "all",
  "includeAdContent": true,
  "includeDetails": true,
  "maxAdsPerAdvertiser": 100,
  "onlyNewAds": false,
  "maxResults": 1000,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `ads` (type: `string`):

All ads in a table view.

# 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"
    ]
};

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

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

```

## MCP server setup

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