# Google Ads Transparency Scraper - Ad Creatives & Advertisers (`sian.agency/google-ads-transparency-scraper`) Actor

Scrape the Google Ads Transparency Center: every ad creative a brand runs, with format, flight dates, days shown and per-country reach. 213 countries.

- **URL**: https://apify.com/sian.agency/google-ads-transparency-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Marketing, Business, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.76 / 1,000 advertiser 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?

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 Transparency Scraper — Competitor Ads & Creatives 📢

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Similarweb Traffic](https://img.shields.io/badge/Store-Similarweb%20Traffic-1AE392)](https://apify.com/sian.agency/similarweb-website-traffic-scraper?fpr=sian) [![Google SERP](https://img.shields.io/badge/Store-Google%20SERP-4285F4)](https://apify.com/sian.agency/google-serp-scraper?fpr=sian) [![Google Trends](https://img.shields.io/badge/Store-Google%20Trends-4285F4)](https://apify.com/sian.agency/google-trends-scraper?fpr=sian)

#### 🎉 Every ad a brand is running on Google, across 213 countries, with no login and no API key

##### Built for PPC teams and agencies who need competitor ad creatives as rows they can filter and export

***

### 🔎 What is the Google Ads Transparency Scraper — and when should you use it?

The **Google Ads Transparency Scraper** turns Google's public Ads Transparency Center into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Google ad creatives for any advertiser: image, text and video ads with the rendered preview, the first and last date each one ran, how many days it was shown, and a link that opens the ad in Google's own viewer. Filter by country across 213 markets and by ad format, both applied before anything is charged. One optional flag adds every creative variation, the full per-country reach list with flight dates, Google's published impression range and the ad category. A separate advertiser search turns a brand name into the advertiser ID behind it and reports how many ads each match is running, and an advertiser profile returns the verified legal name and the country Google verified it in.

**Use something else when:** you need ads from a network Google does not publish. This actor reads Google's Ads Transparency Center only. Meta's Ad Library, Microsoft and Bing ads, TikTok's ad library and LinkedIn are separate disclosure systems with separate data, and no Google tool can reach them.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/google-ads-transparency-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want to see what ads a competitor is running on Google using the Apify Actor `sian.agency/google-ads-transparency-scraper`.

Use it when I need: Google ad creatives for any advertiser: image, text and video ads with the rendered preview, the first and last date each one ran, how many days it was shown, and a link that opens the ad in Google's own viewer. Filter by country across 213 markets and by ad format, both applied before anything is charged. One optional flag adds every creative variation, the full per-country reach list with flight dates, Google's published impression range and the ad category. A separate advertiser search turns a brand name into the advertiser ID behind it and reports how many ads each match is running, and an advertiser profile returns the verified legal name and the country Google verified it in.

Don't use it when: This actor reads Google's Ads Transparency Center only. Meta's Ad Library, Microsoft and Bing ads, TikTok's ad library and LinkedIn are separate disclosure systems with separate data, and no Google tool can reach them.

How to call it: pick one `operation` — `advertiserAds` returns the creatives and is what most runs want, `advertiserSearch` turns a brand name into the advertiser ID and its ad-count range, `advertiserProfile` returns the verified identity for one advertiser ID. Put brand names or `AR` advertiser IDs in `queries`, set `region` to a two-letter country code or `ANYWHERE`, narrow with `adFormat` (`ANY`, `TEXT`, `IMAGE`, `VIDEO`) and `lastShownSince` to keep only ads still running, cap the run with `maxResults`, and set `includeCreativeDetail` to add per-country reach and creative variations.

Start with this input:
{
  "operation": "advertiserAds",
  "queries": [
    "Nike"
  ],
  "region": "US",
  "adFormat": "ANY",
  "maxResults": 100
}

Ask me which brands to look at and which country I care about, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Show me every video ad Nike is running in Germany right now, and how long each one has been live.*
- *Compare the ad creatives of my three biggest competitors and tell me which formats they lean on.*
- *Find every verified advertiser using my brand name and tell me which country each one is registered in.*
- *Pull Booking.com's ads in Spain and flag the creatives that launched in the last month.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/google-ads-transparency-scraper.md](https://apify.com/sian.agency/google-ads-transparency-scraper.md).

### 📋 Overview

**Google publishes every ad it serves, but only one ad at a time, through a viewer you cannot export.** This actor reads that same public record and hands you the whole advertiser in one dataset.

**Why teams use it:**

- ✅ **Creatives you can actually use**: image URLs, video and text ad previews, and a direct link that opens each ad in Google's own viewer
- ⚡ **Fast**: 100 ads per request, so a thousand-ad advertiser is ten requests, not two hundred page loads
- 🎯 **213 countries**: the same brand runs different ads in different markets, and you can pull any of them
- 💰 **Pay per ad that lands**: failed lookups are never charged, and format or date filters run before billing, so a narrowed search costs less
- 💎 **Per-country reach**: one optional flag adds every creative variation, the full country list with first and last shown dates, impression ranges and the ad category
- ✨ **No login anywhere**: no Google account, no API key, no cookie, no OAuth

***

### ✨ Features

- 📢 **Every ad creative** an advertiser has on record, paginated to whatever depth you ask for
- 🔎 **Brand-name resolution**: type "Nike", not an opaque advertiser ID
- 🏢 **Verified identity**: legal name, display name and the country Google verified the advertiser in
- 🌍 **Country filter** across 213 countries, or Anywhere for the global picture
- 🎞️ **Format filter**: text, image or video, applied before you are charged
- 📅 **Recency filter**: keep only ads still running as of a date you choose
- ⏱️ **Days shown** on every ad, so you can tell an evergreen creative from a two-week test
- 🔬 **Per-country reach** with impression ranges and ad category, on request
- 🧩 **Creative variations**: the other sizes and cuts of the same ad
- 📊 **Ad-count ranges** per advertiser, so you can size a competitor before you pull them

***

### 🎬 Quick Start

Pick an operation, name a brand, press Start. The default run needs no configuration at all. It pulls Nike's ads so you can see the shape of the data, and everything after that is one field.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~google-ads-transparency-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"operation": "advertiserAds", "queries": ["Nike"], "region": "US"}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Name the brands

Type one or more brand names into **Who do you want ads for?**. Advertiser IDs starting with `AR` work too, if you already have them.

#### Step 2: Pick a country

Leave it on **Anywhere** for the global view, or choose one of 213 countries to see what that brand runs in that market.

#### Step 3: Press Start

Results stream into the dataset as they arrive. Export to JSON, CSV or Excel whenever you like.

**That's it! In about a minute, you'll have:**

- Every ad creative on record for those brands
- The dates each one ran and how many days it was shown
- A link that opens each ad in Google's own viewer

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `advertiserAds`, `advertiserSearch` or `advertiserProfile` |
| `queries` | array | No | Brand names or advertiser IDs starting with `AR` |
| `region` | string | No | Two-letter country code, or `ANYWHERE` |
| `adFormat` | string | No | `ANY`, `TEXT`, `IMAGE` or `VIDEO` |
| `lastShownSince` | string | No | Keep only ads last shown on or after this date |
| `includeCreativeDetail` | boolean | No | Add per-country reach, variations and category |
| `maxResults` | integer | No | Ads per brand, 1 to 5000 |

**Example: every ad Nike runs in the US**

```json
{
  "operation": "advertiserAds",
  "queries": ["Nike"],
  "region": "US",
  "maxResults": 200
}
```

**Example: video ads still running, with full country reach**

```json
{
  "operation": "advertiserAds",
  "queries": ["Booking.com", "Expedia"],
  "region": "DE",
  "adFormat": "VIDEO",
  "lastShownSince": "2026-08-01",
  "includeCreativeDetail": true,
  "maxResults": 50
}
```

**Example: find the advertiser ID behind a brand name**

```json
{
  "operation": "advertiserSearch",
  "queries": ["Nike"]
}
```

***

### 📤 Output

Every row is one ad, one advertiser match, or one advertiser profile, depending on the operation.

| Field | Type | Description |
|-------|------|-------------|
| `imageUrl` | string | The ad image, when the creative is an image ad |
| `advertiserName` | string | The advertiser running the ad |
| `adFormat` | string | `TEXT`, `IMAGE` or `VIDEO` |
| `adCategory` | string | Google's category for the ad, e.g. Clothing & Accessories |
| `creativeId` | string | Stable ID for this creative |
| `adUrl` | string | Opens this exact ad in the Ads Transparency Center |
| `previewUrl` | string | Rendered preview for text and video ads |
| `firstShown` | string | First date this creative ran |
| `lastShown` | string | Most recent date it ran |
| `daysShown` | integer | Days the creative was shown |
| `impressionsLowerBound` | integer | Bottom of Google's published impression range |
| `impressionsUpperBound` | integer | Top of that range |
| `regionCount` | integer | How many countries this creative ran in |
| `regions` | array | Per-country reach with first and last shown dates |
| `variationCount` | integer | How many variations of this creative exist |
| `advertiserId` | string | The advertiser ID, reusable in later runs |
| `adCountLowerBound` | integer | Fewest ads this advertiser is known to run |
| `adCountUpperBound` | integer | Most ads this advertiser is known to run |
| `legalName` | string | Verified legal entity behind the advertiser |
| `advertiserCountry` | string | Country Google verified the advertiser in |

**Example row:**

```json
{
  "query": "Nike",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR07944289166462812161",
  "adFormat": "IMAGE",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/17551224094686740705",
  "firstShown": "2023-11-16",
  "lastShown": "2026-09-04",
  "daysShown": 856,
  "adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR07944289166462812161?region=anywhere",
  "advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=anywhere",
  "status": "success"
}
```

***

### 💼 Use Cases & Examples

#### 1. Competitor Ad Monitoring

**A PPC manager watching three rivals wants to know the moment a new creative goes live.**

**Input:** the three brand names, on a daily schedule
**Output:** every creative with first shown, last shown and days shown
**Use:** diff two runs and you have the week's launches and the quiet retirements, without opening a browser.

#### 2. Creative Research Before a Launch

**A performance marketer writing new ad copy wants to see what already works in the category.**

**Input:** the four best-funded advertisers in the vertical, format set to `VIDEO`
**Output:** rendered previews and the run dates for each video ad
**Use:** the creatives that have been live for 800 days are the ones paying for themselves. Start there.

#### 3. Market Entry and Country Comparison

**A brand expanding into Germany wants to know what the incumbents run there, not in the US.**

**Input:** the same advertiser, once per country
**Output:** completely different creative sets per market, plus per-country reach
**Use:** Nike runs roughly 10,000 ads globally and around 95 in Germany. That gap tells you how contested the market really is.

#### 4. Agency Pitch Research

**An agency preparing a pitch wants the prospect's whole ad footprint on one slide.**

**Input:** the prospect and its three closest rivals, `advertiserSearch` first for the ad counts
**Output:** ad-count ranges per brand, then every creative for the ones that matter
**Use:** walk in already knowing which formats they lean on and how stale their creative is.

#### 5. Ad Compliance and Brand Protection

**A brand-protection lead is hunting advertisers bidding on their trademark.**

**Input:** the brand name, `advertiserSearch`
**Output:** every verified advertiser matching that name, with its registered country
**Use:** the lookalikes and grey-market resellers surface immediately, each with a verified legal name you can act on.

#### 6. Ad Intelligence for AI Agents

**An analyst wants an agent to answer ad questions on demand.**

**Input:** the MCP prompt above
**Output:** structured rows the agent can summarise, chart or join to other data
**Use:** "what is Expedia running in Spain this month" becomes a question you ask, not a project.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/google-ads-transparency-scraper').call({
  operation: 'advertiserAds',
  queries: ['Nike'],
  region: 'US',
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/google-ads-transparency-scraper').call(
    run_input={
        'operation': 'advertiserAds',
        'queries': ['Nike'],
        'region': 'US',
        'maxResults': 100,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~google-ads-transparency-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "advertiserAds", "queries": ["Nike"], "region": "US"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a weekly schedule, or a webhook from your own tooling
2. **HTTP Request**: call the actor API with your brand list
3. **Process**: compare `creativeId` values against last week's run
4. **Action**: post the new creatives to Slack, or append them to a sheet

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 ads** per run, with every field and every operation unlocked
- No credit card required
- Enough to see exactly what a competitor is running

#### PAID Tier (Production Ready)

- **Unlimited** ads per run, up to 5,000 per brand
- Pay per result: only successful rows are charged
- Format and date filters run before billing, so a narrow search costs less than a wide one

💰 **$2.00 per 1,000 ads** on paid plans, the middle of the market, on an actor that reads 100 ads per request instead of 40.

**What a run costs, in full.** Every billable event is listed here so nothing on your invoice is a surprise. Prices are the paid-plan (Bronze) rate; the Free tier is 4x these, and Gold and above are lower.

| You are charged for | Event | Paid plans |
|---|---|---|
| Each ad creative returned | `ad-creative-result` | $0.002 (**$2.00** per 1,000) |
| Each advertiser found by name | `advertiser-result` | $0.0025 |
| Each advertiser profile | `advertiser-profile-result` | $0.003 |
| Each per-ad detail lookup, only with `includeCreativeDetail` | `creative-detail-result` | $0.003 |
| Starting a run | `apify-actor-start` | $0.005 |

Rows that fail are never charged - an input we could not read costs you the run-start fee and nothing else.

🔗 [View current pricing](https://apify.com/sian.agency/google-ads-transparency-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Do I need a Google account or an API key?**
A: No. The Ads Transparency Center is public, and this actor reads it without any login, key or cookie.

**Q: Can I look up a company by its website?**
A: No, and this is worth understanding before you pick a tool. Google's search matches advertiser *names*, not domains. Passing `nike.com` returns an unrelated company with a similar name, so this actor rejects a bare domain instead of quietly profiling the wrong business. Pass the brand name, or run `advertiserSearch` first and take the advertiser ID.

**Q: A brand name matches several advertisers. Which one do I get?**
A: The one running the most ads, which is almost always the company you meant. Searching "Nike" surfaces a Kenyan advertiser with a single ad before Nike, Inc. with 10,000, so first-match would be wrong. Run `advertiserSearch` if you want to choose yourself.

**Q: Why does an advertiser return no ads?**
A: Usually the country filter. Try Anywhere first. Google also indexes verified advertisers only, so a company that never completed verification has no page at all.

**Q: Are the impression numbers exact?**
A: No. Google publishes ad counts and impressions as ranges, so a creative reads as 1,000 to 2,000 impressions rather than a single figure. Every tool reading this source is bound by the same limit.

**Q: How many ads can I pull for one brand?**
A: Up to 5,000 per brand per run. Large advertisers run thousands, so `maxResults` is the main lever on run cost.

**Q: What output formats are available?**
A: JSON, CSV and Excel, exported straight from the Apify dataset.

**Q: How far back does the data go?**
A: As far as Google keeps it. Creatives first shown in 2021 and 2022 still appear in the results.

***

### 🐛 Troubleshooting

**A brand returns no ads**

- Set the country to Anywhere, since the brand may not advertise in the one you chose
- Run `advertiserSearch` on the same name to confirm the advertiser exists and is verified

**I got the wrong company**

- Run `advertiserSearch`, pick the right `advertiserId` from the results, then pass that ID instead of the name

**A run returns fewer ads than `maxResults`**

- The advertiser has fewer ads than you asked for in that country, or your format and date filters removed the rest. Filtered ads are never charged.

**The run is slower than expected**

- Requests are deliberately paced so Google does not throttle the run. A large `maxResults` takes longer rather than failing.

**A video ad has no image**

- Video and text ads carry `previewUrl` rather than `imageUrl`. Open `adUrl` to see the ad as Google renders it.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

This actor reads Google's Ads Transparency Center, a disclosure system Google publishes deliberately so that anyone can see who is advertising and what they are running.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Google and Google Ads are trademarks of Google LLC. This actor is not affiliated with, endorsed by, or sponsored by Google.

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, use the Issues tab on this Actor's page in Apify Console
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

Pick one operation per run. Advertiser Ads returns one row per ad creative and is the reason most people run this. Advertiser Search returns one row per matching advertiser with its ad-count range, so use it to find the advertiser ID behind a brand name. Advertiser Profile returns a single verified-identity row per advertiser.

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

Brand names (Nike, Booking.com, Samsung) or advertiser IDs that start with AR. A brand name resolves to the advertiser running the most ads, so the well-known company wins over same-named small businesses. A bare domain such as nike.com does not resolve, because the search matches advertiser names rather than websites.

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

Only return ads shown in this country. Anywhere returns the advertiser's ads across every country Google indexes. The same advertiser runs completely different creatives per country, so this changes results, not just their order.

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

Keep only one creative format. Filtering happens before anything is charged, so a narrow format never bills you for the ads it discarded.

## `lastShownSince` (type: `string`):

Drop ads whose last-shown date is older than this, which is how you get 'what is this brand running right now' instead of its whole history. Leave empty for everything. Applied before charging.

## `includeCreativeDetail` (type: `boolean`):

Make one extra lookup per ad to add every creative variation, the full per-country list with impression ranges, and the ad category. Slower and billed per enriched ad.

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

Stop after this many ads for each brand. Big advertisers run thousands, so this is the main control on run size and cost.

## Actor input object example

```json
{
  "operation": "advertiserAds",
  "queries": [
    "Nike"
  ],
  "region": "ANYWHERE",
  "adFormat": "ANY",
  "lastShownSince": "",
  "includeCreativeDetail": false,
  "maxResults": 100
}
```

# Actor output Schema

## `googleAdsTransparencyCenterAds` (type: `string`):

Every ad this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "advertiserAds",
    "queries": [
        "Nike"
    ],
    "region": "ANYWHERE",
    "adFormat": "ANY",
    "lastShownSince": "",
    "includeCreativeDetail": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/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 = {
    "operation": "advertiserAds",
    "queries": ["Nike"],
    "region": "ANYWHERE",
    "adFormat": "ANY",
    "lastShownSince": "",
    "includeCreativeDetail": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/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 '{
  "operation": "advertiserAds",
  "queries": [
    "Nike"
  ],
  "region": "ANYWHERE",
  "adFormat": "ANY",
  "lastShownSince": "",
  "includeCreativeDetail": false,
  "maxResults": 100
}' |
apify call sian.agency/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

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