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

Scrape the Google Ads Transparency Center: every ad a brand runs on Search, YouTube, Shopping, Maps and Play, with images, videos, countries, EU reach and audience targeting. Search by website, brand or advertiser ID.

- **URL**: https://apify.com/vero-api/google-ads-transparency-scraper.md
- **Developed by:** [VeroAPIs](https://apify.com/vero-api) (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.60 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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: Google's ad library for any brand

Scrape the Google Ads Transparency Center and see every ad a brand or competitor runs on Google, across Search, YouTube, Shopping, Maps and Play. Get each ad's image or YouTube video, its headline and ad text, the countries it ran in, how many times it was shown in the EU and who it targeted, as one clean dataset.

### Why people choose it

- **Search the way you think.** Type a website (`nike.com`), a brand name (`HelloFresh`), an advertiser ID or paste a link from the Ads Transparency Center.
- **The whole picture.** A website search catches every ad that sends people there, from every advertiser account the brand runs.
- **The right site for your country.** A brand name is matched to the brand's website with the most ads in the country you pick, so `HelloFresh` in the US gets hellofresh.com and in Germany gets hellofresh.de.
- **Full details on every ad, included.** Every country the ad ran in with its dates, EU reach per country and platform, and the audience the advertiser chose. No add-ons to switch on, no extra charge.
- **The real creative.** Direct YouTube links for video ads, the ad image or product photo for image ads, and the headline, ad text and web address of ads Google publishes as text.
- **Thousands of ads per run.** Collect a handful or every ad a brand has, up to the number you choose.
- **Filters that matter.** Narrow by country, Google platform, ad format and the dates the ads ran.
- **Built for monitoring.** Turn on **New ads only**, set **Shown after** to `14 days` and schedule a weekly run: each run returns the new ads you don't have yet, and skips the ones earlier runs already delivered.
- **Fair pricing.** You pay per ad delivered. An ad found by two of your searches is delivered and charged once, and the run stops right at the spending limit you set.

### Popular uses

- **Competitor research**: see which ads rivals run, where, and how long each one has lasted.
- **New-ad alerts**: get a competitor's new ads week after week, without paying again for the ones you already have.
- **Creative inspiration**: build a swipe file of long-running ads and the headlines that keep them running.
- **Market mapping**: check which brands in a category advertise on Google, and in which countries.
- **Agency pitches**: show a prospect their competitors' current ads in minutes.
- **Lead generation**: find businesses that actively spend on Google Ads.

### How to use it

1. Add the websites, brand names or advertiser IDs you want.
2. Optionally pick a country, platform, format or date range.
3. Click **Start**.
4. Browse the ads in the Output tab, or download them as JSON, CSV or Excel.

### What you get

One row per ad:

```json
{
  "query": "shopify.com",
  "adId": "CR01927607444435894273",
  "adUrl": "https://adstransparency.google.com/advertiser/AR01625195283841286145/creative/CR01927607444435894273?region=DE",
  "advertiserId": "AR01625195283841286145",
  "advertiserName": "Shopify Inc.",
  "website": "shopify.com",
  "format": "video",
  "headline": null,
  "description": null,
  "displayUrl": null,
  "firstShown": "2026-02-20T22:55:07.000Z",
  "lastShown": "2026-10-24T15:29:00.000Z",
  "daysShown": 247,
  "imageUrl": "https://i.ytimg.com/vi/1j0tZlKOLPc/hqdefault.jpg",
  "videoUrl": "https://www.youtube.com/watch?v=1j0tZlKOLPc",
  "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&creativeId=…",
  "impressionsMin": 10000,
  "impressionsMax": 15000,
  "regions": [
    {
      "country": "DE",
      "firstShown": "2026-02-20",
      "lastShown": "2026-10-24",
      "impressionsMin": 10000,
      "impressionsMax": 15000,
      "platforms": [
        { "platform": "youtube", "impressionsMin": 10000, "impressionsMax": 15000 },
        { "platform": "search", "impressionsMin": 0, "impressionsMax": 1000 }
      ]
    }
  ],
  "audience": {
    "demographics": { "included": true, "excluded": false },
    "locations": { "included": true, "excluded": false },
    "contextualSignals": { "included": true, "excluded": true }
  }
}
```

A text ad that Google publishes as text adds its words:

```json
{
  "query": "hellofresh.com",
  "format": "text",
  "headline": "HelloFresh Official Website",
  "description": "Get HelloFresh meal kits with pre-portioned ingredients and easy recipe instructions.",
  "displayUrl": "www.hellofresh.com/"
}
```

| Field | What it tells you |
|---|---|
| `imageUrl` | The ad's image: the picture people saw, the product photo, or the video's thumbnail |
| `videoUrl` | The YouTube video of a video ad |
| `headline` / `description` / `displayUrl` | The headline, ad text and web address of ads Google publishes as text, and the product name of Shopping ads |
| `daysShown` | How many days the ad has run. Long runners are usually the winners. |
| `impressionsMin` / `impressionsMax` | How many times the ad was shown across the EU |
| `regions` | Every country the ad ran in. EU countries add dates and times shown on each Google platform. |
| `audience` | Whether the advertiser targeted or excluded people by demographics, location or context |
| `adUrl` | Opens the ad on Google's Ads Transparency Center |

### Run it from your code

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('vero-api/google-ads-transparency-scraper').call({
  queries: ['nike.com', 'HelloFresh'],
  region: 'US',
  format: 'video',
  maxAdsPerQuery: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((ad) => `${ad.advertiserName}: ${ad.adUrl}`));
```

Works the same from Python, Make, Zapier, n8n, or any tool that can call the Apify API.

### Use it from your AI assistant (MCP)

Ask Claude, Cursor, VS Code, or any assistant that supports MCP about a brand's ads in plain words. Add this server to its MCP settings:

```json
{
  "mcpServers": {
    "google-ads-transparency-scraper": {
      "url": "https://mcp.apify.com?tools=vero-api/google-ads-transparency-scraper"
    }
  }
}
```

Then just ask, for example:

- *"Which YouTube ads has Shopify run in Germany this month?"*
- *"Show me nike.com's longest-running Google Search ads in the US."*
- *"What new Google ads did HelloFresh launch in the last 7 days?"*

### Pricing

You pay only for the ads you get: no subscriptions, no surprises.

| What you get | Price |
|---|---|
| Ads, with countries, EU reach, audience, images, videos and ad text included | $2.00 per 1,000 ads |

The run stops right at the spending limit you set, so you always know your maximum cost.

### FAQ

**Should I search by website or by brand name?** Website gives the fullest results, because it covers every advertiser account that points to the site. A brand name is matched to the brand's website with the most ads in the country, platform, format and dates you chose. When the brand has no website with matching ads, it is matched to its advertiser account with the most ads.

**Where do I find an advertiser ID?** Open the advertiser on [adstransparency.google.com](https://adstransparency.google.com). The ID starts with `AR` and appears in the page address. You can also paste that whole link.

**Can I track new ads over time?** Yes. Turn on **New ads only**, set **Shown after** to `14 days`, and create a weekly schedule in Apify Console. Each run returns the ads first shown since that date that earlier **New ads only** runs of the same search haven't delivered yet, so you never pay twice for an ad you already have. A window twice as long as your schedule also catches ads that Google adds to its library a few days after they start. An ad counts as new from the first day Google showed it in any country. Without **New ads only**, **Shown after** returns every ad shown in that window, long-running ones included.

**Why did a New ads only run return fewer ads the second time?** It remembers the new ads it already delivered for each search (the same website, brand or advertiser with the same country, platform and format), and skips them on later runs. The run's status tells you how many it skipped. To get them again, turn **New ads only** off.

**What does "Shown after" do on its own?** It keeps ads that were shown on or after that date, including older ads that are still running. Use `firstShown` and `daysShown` to see how long each one has been live.

**Why do some ads have a headline and others don't?** Google publishes most text ads as a picture of the ad, so their words are in `imageUrl`. Ads Google publishes as text, such as many store and Search ads, come with their `headline`, `description` and `displayUrl`. Many Shopping ads add the product name as `headline`.

**Will I pay twice for the same ad?** No. When two of your searches find the same ad, it is delivered and charged once, under the first search that found it.

**Why do some ads have reach numbers and others don't?** Google publishes how many times an ad was shown, its first shown date per country, and its audience only for ads shown in the EU. Every ad still lists each country it ran in and when it was last shown there. When Google reports more than 10 million views, `impressionsMax` is empty.

**Which countries are covered?** Every country Google's Ads Transparency Center covers. Pick one under **Country**, or leave it on **Anywhere**.

**How many ads can I get?** As many as a brand runs. Set **Max ads per search** to the number you want; a run collects thousands of ads in minutes.

**Is this an official Google tool?** No. Google Ads Transparency Scraper is an independent tool. It is not affiliated with, endorsed by, or sponsored by Google. It collects the public ad information anyone can see in Google's Ads Transparency Center.

### More tools from us

- [YouTube Transcript Scraper](https://apify.com/vero-api/youtube-transcript-scraper): the full script of any YouTube video, including a competitor's video ads.
- [Website Screenshot Generator](https://apify.com/vero-api/website-screenshot): screenshots of the landing pages behind the ads.
- [Instagram Posts Scraper](https://apify.com/vero-api/instagram-posts-scraper): posts, captions and engagement from a brand's Instagram.
- [Threads Scraper](https://apify.com/vero-api/threads-scraper): posts, replies and profiles from Threads.
- [Google Maps Reviews Scraper](https://apify.com/vero-api/google-maps-reviews-scraper): what customers say about a business on Google Maps.
- [DNS Tools](https://apify.com/vero-api/dns-tools): WHOIS, domain age and DNS records for the websites a brand advertises.

# Actor input Schema

## `queries` (type: `array`):

Add a website (nike.com), a brand name (HelloFresh), an advertiser ID (AR16735076323512287233) or a link from Google's Ads Transparency Center. A website gives the fullest picture: every ad that sends people there, from every account the brand runs. A brand name is matched to the brand's website with the most ads in your chosen country.

## `maxAdsPerQuery` (type: `integer`):

How many ads to collect for each website, brand or advertiser. Each search delivers different ads: an ad found by an earlier search is not repeated or charged again.

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

Only ads shown in this country.

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

Only ads shown on this Google platform.

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

Only text, image or video ads.

## `shownAfter` (type: `string`):

Only ads shown on or after this date, including older ads still running then. Pick a date (2026-09-01) or a span back from today (30 days) to keep scheduled runs current.

## `shownBefore` (type: `string`):

Only ads shown on or before this date. Pick a date (2026-10-01) or a span back from today (7 days).

## `newAdsOnly` (type: `boolean`):

Turn on to get only ads first shown on or after the "Shown after" date, leaving out older ads that are still running. Ads that earlier New ads only runs of the same search already delivered are skipped, so you never pay for an ad twice. For a weekly schedule, set "Shown after" to 14 days.

## Actor input object example

```json
{
  "queries": [
    "nike.com"
  ],
  "maxAdsPerQuery": 100,
  "region": "anywhere",
  "platform": "all",
  "format": "all",
  "newAdsOnly": false
}
```

# Actor output Schema

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

One row per ad: advertiser, website, format, headline and ad text, first and last shown dates, days shown, image and YouTube video links, the ad's Transparency Center link, every country it ran in, EU reach and audience targeting.

# 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 = {
    "queries": [
        "nike.com"
    ]
};

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

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

```

## MCP server setup

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