# Google Ads Transparency Scraper & Ad Monitor (`koivu-data/google-ads-transparency-scraper`) Actor

Get competitors' Google ads from the Ads Transparency Center by domain, advertiser name or ID: formats, first/last shown dates, previews, and optionally ad text, landing pages, countries and impressions. Monitoring mode returns only new ads on each scheduled run. No login, no proxies.

- **URL**: https://apify.com/koivu-data/google-ads-transparency-scraper.md
- **Developed by:** [Koivu Data](https://apify.com/koivu-data) (community)
- **Categories:** SEO tools, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 96.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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 & Ad Monitor by Koivu Data: competitors' Google ads by domain, name or advertiser ID](https://api.apify.com/v2/key-value-stores/K8VcTIOdr2cTj8fA7/records/google-ads-hero.png?signature=1NmrbPiXYqjz6CCPy0iIt)

**Google Ads Transparency Scraper & Ad Monitor** shows which Google ads a company runs, without a Google account, API key or proxies. It reads Google's public **Ads Transparency Center** (adstransparency.google.com) and returns one clean JSON row per ad: advertiser, format, first and last shown date, how long it has been running, a preview image and a link to the ad. Download the results as JSON, CSV or Excel.

Built for **competitor monitoring**: turn on *Only new ads*, put the Actor on a schedule, and every run returns just the ads your competitors launched since the previous run. A run that finds nothing new costs only the $0.002 start fee.

**Try it now:** the prefilled input fetches the 20 most recently shown ads for nike.com and for one advertiser ID, in a few seconds, for about $0.04.

- Search by **domain** (`nike.com`), **advertiser name**, **advertiser ID** or a link copied from the Transparency Center
- Filters: country, format (text, image, video), platform (Search, YouTube, Shopping, Maps, Play) and date range
- **Only new ads** mode for scheduled competitor monitoring (the memory is kept per saved task)
- Optional **ad details**: headline and description when Google provides them as text, landing page, YouTube video, product title for Shopping ads, all image variations, countries with first/last shown dates and impression ranges per platform, EU audience targeting and the paying entity
- No browser and no proxies
- Clear errors for unknown advertisers, empty domains and invalid links. Failed targets cost nothing

### What data can you get from the Google Ads Transparency Center?

![Example output in table view: advertiser, format, headline or video, first and last shown, days and countries](https://api.apify.com/v2/key-value-stores/K8VcTIOdr2cTj8fA7/records/google-ads-output.png?signature=P93kh0plUljVZSNAP9V3)

| Field | Example | Notes |
|---|---|---|
| `advertiserName`, `advertiserId` | `Elisa Oyj`, `AR15140697052062679041` | The advertiser account that paid for the ad |
| `advertiserCountry`, `advertiserLegalName`, `advertiserVerified` | `FI`, `Elisa Oyj`, `true` | From the advertiser's Transparency Center profile |
| `creativeId`, `url` | `CR13279419012371972097`, link | Stable ad ID and the ad's page in the Transparency Center |
| `format` | `TEXT`, `IMAGE`, `VIDEO` | |
| `firstShown`, `lastShown`, `daysShown` | `2025-10-28T22:09:32Z`, `2026-10-05T15:27:27Z`, `333` | UTC. `daysShown` is Google's count of days the ad ran |
| `previewImageUrl` | `https://tpc.googlesyndication.com/archive/simgad/...` | Rendered preview or the image of the ad |
| `matchedDomain` | `elisa.fi` | For domain searches |
| **With ad details:** `headline`, `description`, `displayUrl` | `Honor Pad 20 5G - price €` | When Google provides the ad as text (see Limitations) |
| `landingUrl`, `landingDomain` | `https://www.nike.com/retail/` | Click-through URL when it appears in the preview |
| `youtubeVideoId`, `youtubeUrl` | `RZ1MLoOdWcc` | Video ads hosted on YouTube |
| `productTitle`, `merchant` | `Electrolux LYB1AE8W0 kaappipakastin`, `Verkkokauppa.com` | Shopping ads |
| `adType` | `SEARCH_TEXT`, `LOCAL`, `SHOPPING_PRODUCT`, `VIDEO`, `OTHER` | Type of the rendered preview; `null` when Google only shows an image |
| `adTexts` | `["elisa.fi", "Edullinen ja kattava valikoima", ...]` | All visible text of the preview, in order |
| `imageUrls`, `variationCount` | | All image variations (A/B versions) of the ad |
| `regions` | `[{"region": "FI", "firstShown": "2025-10-28", "impressionsMin": 100000, "impressionsMax": 125000, "platforms": [...]}]` | Countries where the ad ran. Impression ranges are published by Google mainly for the EU/EEA |
| `eeaImpressionsMin`, `eeaImpressionsMax` | `100000`, `125000` | Total EU/EEA impressions (Digital Services Act data) |
| `targeting` | `{"demographics": {"included": true, "excluded": false}, ...}` | Which targeting categories were used (EU ads) |
| `payerName` | `Elisa Oyj` | Who paid for the ad |

The dataset has three ready-made views: **Ads**, **Ad copy** and **Countries and reach**.

#### Ad text, landing pages and EU impressions (Include ad details)

Switch on **Include ad details** and the Actor opens every ad. You get the ad text when Google provides it as text, the landing page, the YouTube video, Shopping product titles, all image variations, and for ads shown in the EU/EEA Google's own impression ranges per country and platform, the targeting categories used and who paid.

![One real ad with Include ad details: ad text, advertiser, payer, impressions per platform and targeting](https://api.apify.com/v2/key-value-stores/K8VcTIOdr2cTj8fA7/records/google-ads-details.png?signature=A8aPvDvL0v8gUwch6LLN)

In a cloud test with 100 ads from five targets, details gave countries for all 100 ads, a landing page for 32, a YouTube video for 26 and a text headline for 19.

### How to scrape the Google Ads Transparency Center

1. Add one or more targets: a domain (`nike.com`), an advertiser name (`Zalando SE`), an advertiser ID (`AR16735076323512287233`) or a link copied from adstransparency.google.com.
2. Set **Max ads per target**. The most recently shown ads come first.
3. Optional: choose a country, format, platform or date range, and switch on **Include ad details**.
4. Click **Start**.
5. Download the results as JSON, CSV, Excel or HTML from the run's **Output** or **Storage** tab, or read them through the API.

#### Which target type should I use?

A **domain** returns ads of every advertiser account that promotes that website, including agencies and resellers. An **advertiser ID** returns exactly one account. A **name** is resolved with the Transparency Center's own search; by default the matching account with the most ads is used, and the run summary lists the other matches with their IDs. A pasted **link** keeps its filters, such as the country.

### How to monitor competitors' Google ads

1. Save your input as a **task** and enable **Only new ads since the last run**.
2. Create a **schedule** for the task, for example daily.
3. Connect an integration (Slack, Google Sheets, Zapier, Make, n8n or a webhook) to receive each new batch.

![How Only new ads monitoring works: a saved task, a schedule, and two real runs, the second of which found no new ads](https://api.apify.com/v2/key-value-stores/K8VcTIOdr2cTj8fA7/records/google-ads-monitoring.png?signature=lbN7ikbLx2zcuGRs0qB5)

The first run returns the most recently launched ads (up to your limit) and remembers every ad that is currently running, so old ads are never reported as new. Later runs return only ads that appeared after that, including ads that Google publishes in the Transparency Center a few days late. If more new ads exist than your limit allows, the rest come in the next run. Each saved task keeps its own memory.

#### Can I see how much competitors spend on Google Ads?

Not directly. For regular commercial ads the Transparency Center does not publish spend, bids or budgets, so a spend figure cannot be read from it. What you can get: how many ads a competitor runs, how long each one has been running (`daysShown`), on which platforms, and for ads shown in the EU/EEA, Google's impression ranges per country and platform. Those are useful signals of effort, not spend.

#### Can I see which keywords competitors bid on?

No. Google does not publish targeted keywords in the Transparency Center. With ad details you get the ad text when Google provides it as text, which often hints at the keywords, but not a keyword list.

### How much does it cost to scrape the Google Ads Transparency Center?

This Actor uses **pay per event** pricing. Apify platform usage is included in these prices.

| Event | Price |
|---|---|
| Actor start | $0.002 per run |
| Ad saved | $0.001 per ad ($1.00 per 1,000 ads) |
| Ad details (only with *Include ad details*) | +$0.001 per ad (+$1.00 per 1,000 ads) |

Examples:

- **The prefilled run** (2 targets × 20 ads, no details): 40 ads + start = about **$0.04**.
- **1,000 ads** cost about **$1.00**, or **$2.00** with details.
- **Monitoring 10 competitors daily** with *Only new ads*, about 3 new ads per competitor per day, with details: 30 runs × $0.002 = $0.06, plus 900 ads × $0.002 = $1.80, so about **$1.86 per month**. Without details about **$0.96 per month**.

Never charged: targets that fail and ads removed by your filters. A run with nothing new costs only the start fee. You can cap any run with **Maximum cost per run** in the run options; the Actor stops cleanly at the cap.

#### Is there a free Google Ads Transparency scraper?

The Transparency Center website itself is free to browse by hand. This Actor is not free, but Apify's Free plan includes $5 of usage credit every month. With this Actor that covers about 4,800 ads per month without details (for example 100 runs of 48 ads), or about 2,400 with details.

### Limitations

We prefer to tell you up front:

- **Ad text is not available for every ad.** For many text ads, especially older ones, Google's Transparency Center shows only a rendered image of the ad. Those rows have `previewImageUrl` and `imageUrls` but no `headline`. The Actor does not run OCR on images.
- **Impression numbers** are published by Google mainly for ads shown in the EU/EEA (and for election ads). For other countries the `regions` list shows dates but no impressions.
- **Landing pages** are returned when they appear in Google's preview of the ad. Many video ads include them; many search ads do not.
- **Video ads**: with ad details, ads hosted on YouTube come with the video ID and URL, not the video file.
- **Date filters** work for roughly the last 12 months. Ads themselves can be older: `firstShown` can go back years.
- **Counts are estimates.** `totalAdsEstimate` in the summary is the range Google shows (for example 6,000–7,000).
- **Name search** depends on Google's suggestions. If a name matches several companies, check `resolvedAdvertisers` in the summary or use the advertiser ID.
- The Actor relies on the Transparency Center's web interface, which Google can change. Apify test-runs the Actor every day and a breakage is fixed before new features, but a change can cause a short outage.

### Input

```json
{
  "targets": ["elisa.fi", "Zalando SE", "AR16735076323512287233"],
  "maxAdsPerTarget": 50,
  "region": "FI",
  "adFormat": "ALL",
  "platform": "ALL",
  "dateFrom": "30 days",
  "includeAdDetails": true,
  "onlyNewAds": false
}
```

| Input | Description |
|---|---|
| `targets` | Domains, advertiser names, advertiser IDs or Transparency Center links. Required. Filters inside a pasted link (`region`, `format`, `platform`, dates) are applied to that line. |
| `maxAdsPerTarget` | Maximum ads saved per target, most recently shown first (default 100). |
| `includeAdDetails` | Open every ad and add ad text, landing page, video, countries, impressions and targeting. Slower and charged per ad. |
| `onlyNewAds` | Return only ads that are new since the previous run of the same task. |
| `region` | Two-letter country code (`US`, `GB`, `DE`, `FI`, ...). Empty means all regions. |
| `adFormat` | `ALL`, `TEXT`, `IMAGE` or `VIDEO`. |
| `platform` | `ALL`, `SEARCH`, `YOUTUBE`, `SHOPPING`, `MAPS` or `PLAY`. |
| `dateFrom`, `dateTo` | Ads shown at least once in the range. Absolute (`2026-09-01`) or relative (`30 days`, `3 months`). |
| `maxAdvertisersPerName` | For name searches: how many matching accounts to include (default 1, largest first). |
| `stateKey` | Advanced: name of the monitoring memory slot (defaults to the task ID). |
| `proxyConfiguration` | Not needed normally. |

### Output

One ad, with details:

```json
{
  "target": "elisa.fi",
  "advertiserId": "AR15140697052062679041",
  "advertiserName": "Elisa Oyj",
  "creativeId": "CR13279419012371972097",
  "format": "TEXT",
  "firstShown": "2025-10-28T22:09:32Z",
  "lastShown": "2026-10-05T15:27:27Z",
  "daysShown": 333,
  "url": "https://adstransparency.google.com/advertiser/AR15140697052062679041/creative/CR13279419012371972097?region=anywhere",
  "previewImageUrl": "https://tpc.googlesyndication.com/archive/simgad/8547831518927478788",
  "matchedDomain": "elisa.fi",
  "advertiserVerified": true,
  "regionFilter": null,
  "advertiserCountry": "FI",
  "advertiserLegalName": "Elisa Oyj",
  "detailsAvailable": true,
  "adType": "LOCAL",
  "headline": "Edullinen ja kattava valikoima",
  "description": "Laadukkaat riistakamerat edullisella laitenetillä saat Elisalta.",
  "displayUrl": "elisa.fi",
  "landingUrl": null,
  "landingDomain": null,
  "productTitle": null,
  "merchant": null,
  "youtubeVideoId": null,
  "youtubeUrl": null,
  "adTexts": [
    "Sponsoroitu",
    "Elisa",
    "elisa.fi",
    "Edullinen ja kattava valikoima",
    "..."
  ],
  "imageUrls": [
    "https://tpc.googlesyndication.com/archive/simgad/8547831518927478788",
    "..."
  ],
  "variationCount": 4,
  "regionCodes": [
    "FI"
  ],
  "regions": [
    {
      "region": "FI",
      "firstShown": "2025-10-28",
      "lastShown": "2026-10-05",
      "impressionsMin": 100000,
      "impressionsMax": 125000,
      "platforms": [
        {
          "platform": "GOOGLE_MAPS",
          "impressionsMin": 0,
          "impressionsMax": 1000
        },
        {
          "platform": "GOOGLE_SHOPPING",
          "impressionsMin": 0,
          "impressionsMax": 1000
        },
        {
          "platform": "GOOGLE_SEARCH",
          "impressionsMin": 100000,
          "impressionsMax": 125000
        },
        {
          "platform": "YOUTUBE",
          "impressionsMin": 5000,
          "impressionsMax": 6000
        }
      ]
    }
  ],
  "eeaImpressionsMin": 100000,
  "eeaImpressionsMax": 125000,
  "targeting": {
    "demographics": {
      "included": true,
      "excluded": false
    },
    "geography": {
      "included": true,
      "excluded": false
    },
    "contextual": {
      "included": true,
      "excluded": true
    }
  },
  "payerName": "Elisa Oyj",
  "scrapedAt": "2026-10-05T16:08:35Z"
}
```

Every run also saves a summary to the key-value store record `OUTPUT`: per target status, number of ads, Google's estimate of the total number of matching ads, the advertiser accounts a name was resolved to, and a clear reason for every target that failed.

### Use cases

- **Competitor monitoring**: get a list of every new ad your competitors start running, every morning, in Slack, Google Sheets or your own database.
- **Ad creative research**: collect competitors' headlines, offers, landing pages and videos, and see which ads have been running the longest (a long run is a common sign that an ad works).
- **Agencies and pitches**: show a prospect what their competitors run on Search, YouTube and Shopping, by country.
- **Market and DSA research**: export EU impression ranges and targeting categories for a set of advertisers.
- **Brand protection**: check which advertisers run ads that point to your domain.

### Use it from Python, JavaScript, n8n or AI agents

#### Google Ads Transparency Center API in Python

Run the Actor through the Apify API and get the ads back as JSON. This is not an official Google API: the Actor reads the same public data as the website.

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("LujtkJCrqrw0HdCAr").call(
    run_input={"targets": ["nike.com"], "maxAdsPerTarget": 20, "region": "US"}
)
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(ad["advertiserName"], ad["format"], ad["firstShown"], ad["url"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('LujtkJCrqrw0HdCAr').call({
    targets: ['nike.com'],
    maxAdsPerTarget: 20,
    region: 'US',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### n8n, Make and Zapier

Use Apify's integration for n8n, Make or Zapier to start the Actor or a saved task and pass the ads to the next step of your workflow. For monitoring, schedule the task in Apify and let the integration react to each finished run.

#### AI agents (MCP)

AI agents connected to the [Apify MCP server](https://mcp.apify.com) can find this Actor by searching for *Google Ads Transparency* and call it as a tool to list or monitor an advertiser's ads.

### FAQ

#### Do I need a Google account, Google Ads account or API key?

No. The Actor reads the public Ads Transparency Center, the same pages anyone can open in a browser without logging in.

#### How do I find an advertiser ID?

Open adstransparency.google.com, search for the company and copy the link of its page. You can paste that link directly as a target. The ID is the part that starts with `AR`.

#### Why does a domain search return ads from several advertisers?

Google lists every advertiser account whose ads point to that domain: the brand itself, its agencies, local subsidiaries and sometimes resellers. Use the advertiser ID if you want only one account.

#### How fresh is the data?

As fresh as the Transparency Center. In our tests the `lastShown` times of active ads were from the same day. Google can publish some ads with a delay; monitoring mode looks a few days back so late ads are still reported once.

#### How far back can I go?

Ads currently in the Transparency Center can have a `firstShown` date years back. Date filters work for about the last 12 months.

#### Can I download the video ads?

The base output includes a preview image URL. With **Include ad details**, video ads hosted on YouTube also get the video ID and URL. The Actor does not download video files.

#### Is it legal to scrape the Google Ads Transparency Center?

The Actor reads data that Google publishes for transparency, without logging in or bypassing any access control, at a moderate request rate. Google's Terms of Service restrict automated access that violates machine-readable instructions such as robots.txt; at the time of writing the Transparency Center publishes no such restrictions. Advertiser names can belong to individuals, so make sure you have a legitimate purpose and follow applicable laws such as the GDPR. If you are unsure, consult a lawyer.

### Support, maintenance and changelog

This Actor is built and maintained in Finland by **Koivu Data**, a small data tools studio in the EU.

- **Found a bug or need a field?** Open an issue on the **Issues** tab and include your run link, so the problem can be reproduced.
- **Maintenance:** the parser is covered by unit tests on saved Transparency Center responses, and Apify test-runs the Actor every day. If Google changes the Transparency Center, fixing the Actor comes before new features.
- **Data and privacy:** the Actor reads only public Transparency Center data and saves results only to your Apify account.
- **Changelog** (full history on the **Changelog** tab):
  - **0.1.6** (2026-10-05): README reorganized around common questions, new images from real runs, changelog added. No changes to the scraping code or output.
  - **0.1.5** (2026-10-05): first complete version.

An honest review on the **Reviews** tab helps other users decide and tells us what to improve.

# Changelog

This Actor's version history is a separate document: https://apify.com/koivu-data/google-ads-transparency-scraper/changelog.md

# Actor input Schema

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

One per line. Accepted: a website domain (<code>nike.com</code>, ads of every advertiser that promotes it), an advertiser name (<code>Zalando SE</code>, resolved with Google's own search), an advertiser ID (<code>AR16735076323512287233</code>) or a link copied from adstransparency.google.com (advertiser page, single ad or domain search; filters in the link such as <code>region</code> are applied).

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

Maximum number of ads saved per line, most recently shown first. You only pay for ads that are saved.

## `includeAdDetails` (type: `boolean`):

Opens every ad: headline and description when Google provides them as text, display and landing URL, YouTube video ID, product title for Shopping ads, all image variations, countries where the ad ran with first/last shown dates and impression ranges per platform, EU (DSA) audience targeting categories and the paying entity. Costs one extra event per ad and makes the run slower.

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

For scheduled runs. Returns only ads that are new since the previous run of the same task (also ads that Google publishes a few days late). The first run returns the most recently launched ads and remembers all currently running ones, so old ads are never reported as new. State is kept per saved task.

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

Only ads shown in this country. Leave empty for all regions.

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

Text ads, image ads (incl. Shopping) or video ads.

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

Where the ad was shown. Google applies this filter to ads shown since September 2023.

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

Optional. Only ads that were shown at least once in the date range. Absolute (<code>2026-09-01</code>) or relative (<code>30 days</code>, <code>3 months</code>). Google supports date filters for about the last 12 months.

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

Optional end of the date range (inclusive). Defaults to today when only the start is set.

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

When a line is an advertiser name, how many matching advertiser accounts to include (largest first). The run summary lists the matches, so you can switch to exact advertiser IDs.

## `stateKey` (type: `string`):

Advanced. Name of the memory slot used by 'Only new ads'. Leave empty to use the task ID automatically.

## `proxyConfiguration` (type: `object`):

Not needed for normal use. Enable only if you run very large volumes and see 'rate limited by Google' warnings.

## Actor input object example

```json
{
  "targets": [
    "nike.com",
    "AR16802143646588600321"
  ],
  "maxAdsPerTarget": 20,
  "includeAdDetails": false,
  "onlyNewAds": false,
  "region": "",
  "adFormat": "ALL",
  "platform": "ALL",
  "maxAdvertisersPerName": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `summary` (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",
        "AR16802143646588600321"
    ],
    "maxAdsPerTarget": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("koivu-data/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",
        "AR16802143646588600321",
    ],
    "maxAdsPerTarget": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("koivu-data/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",
    "AR16802143646588600321"
  ],
  "maxAdsPerTarget": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call koivu-data/google-ads-transparency-scraper --silent --output-dataset

```

## MCP server setup

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