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

Extract ads from Google’s Ads Transparency Center \[💲0.70/1K 💰] by URL, advertiser, or domain, including political & election ads. Get creative previews, spend ranges, impressions, demographics & regions. Dedicated proxy for paying users; optional Google login.

- **URL**: https://apify.com/dz_omar/google-ads-scraper.md
- **Developed by:** [FlowExtract API](https://apify.com/dz_omar) (community)
- **Categories:** SEO tools, Lead generation, Developer tools
- **Stats:** 798 total users, 49 monthly users, 100.0% runs succeeded, 42 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.70 / 1,000 successful ad creatives

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 Intelligence Scraper

**Uncover competitor advertising strategies and monitor campaigns across every Google surface  pulled straight from Google's own Ads Transparency Center.**

Search by direct URL, or run keyword / advertiser / domain searches across general commercial ads and political & election ads. Every ad comes with creative previews and its run dates (first shown, last shown, days ran). Optional switches add the ad's actual copy - headline, description, call-to-action - and, for political ads, spend ranges, impression estimates and demographic targeting.

***

### 🎯 What You Can Extract

#### Complete Ad Intelligence

- **Ad Creatives** - preview URLs for video, image, and text ad formats
- **Ad Copy** - headline, description, call-to-action, click URL and thumbnail (with Extract Ad Copy on)
- **Advertiser Information**  advertiser ID, advertiser name, domain, direct transparency URLs
- **Delivery Data**  regions and countries where each ad ran
- **Performance Ranges** - impression and spend estimates (political & election ads, with Fetch Full Ad Details on)
- **Timing** - first/last shown dates and total days active, on every ad
- **Political Ad Targeting**  included/excluded age, gender, and location targeting for election ads

#### Choose how much you pull back

Every ad always comes with the advertiser, creative, format, preview URL, and its **run dates** - first shown, last shown, and days ran - at no extra cost.

Two optional switches add more:

- **Fetch Full Ad Details** - adds the per-region delivery breakdown, and for **political & election ads** the spend range, impression range and demographic targeting. Worth knowing: Google publishes spend, impressions and demographics for political ads only, so on ordinary commercial ads this mainly adds the regions.
- **Extract Ad Copy** - adds the ad's actual wording: headline, long headline, description, call-to-action label, click and display URL, thumbnail image, channel name and video length.

***

### 🔎 Three Ways to Search

#### 1. Search by URL

Paste any Google Ads Transparency Center link  every filter already baked into that URL (advertiser, region, date range, format) is respected automatically.

```json
{
  "adUrls": [
    { "url": "https://adstransparency.google.com/advertiser/AR04619580580634296321" }
  ],
  "fetchAdDetail": true
}
```

#### 2. General Ad Search

Search everyday commercial advertising by advertiser name, advertiser ID, or domain  filtered by platform, format, region, and date range.

```json
{
  "generalAdSearch": [
    {
      "searchTargets": "nike",
      "maxAdvertiserAccounts": 3,
      "targetPlatform": "YOUTUBE",
      "adFormatType": "VIDEO",
      "timeRangePreset": "LAST_30_DAYS"
    }
  ],
  "maxResults": 20
}
```

#### 3. Political & Election Ads

A dedicated mode for political advertising, with the spend-range, impression-range, and demographic filters Google's Ads Transparency Center reserves specifically for Restricted Content. A target region is required, since verification and disclosure rules vary by country.

```json
{
  "politicalAdSearch": [
    {
      "searchTargets": "AR17672453691778531329",
      "geoTargetRegion": "United States",
      "impressionsRange": "100K_250K",
      "amountSpentRange": "10K_50K"
    }
  ],
  "fetchAdDetail": true
}
```

All three sections can be combined in a single run  they're processed independently, and results from every section land in the same dataset.

***

### 📥 Input Reference

| Field | Type | Applies to | Description |
|---|---|---|---|
| **📊 maxResults** | `integer` | All searches | Max ads per search  per URL, and per entry in General/Political search. `0` = unlimited. Default: `10`. |
| **🔍 fetchAdDetail** | `boolean` | All searches | Off = fast summary. On = adds regional breakdown, plus spend/impressions/demographics for political ads. Default: `false`. |
| **✍️ fetchAdCopy** | `boolean` | All searches | On = also extract the ad's text (headline, description, CTA, click URL, thumbnail). One extra request per ad. Default: `false`. |
| **🔗 adUrls** | `array` | Search by URL | One or more full Ads Transparency Center URLs. |
| **🔎 generalAdSearch** | `array` | General search | `searchTargets` (name/ID/domain), plus `maxAdvertiserAccounts`, `maxDomainMatches`, `targetPlatform`, `adFormatType`, `geoTargetRegion`, `timeRangePreset` / `customStartDate` / `customEndDate`. |
| **🗳️ politicalAdSearch** | `array` | Political search | `searchTargets` and `geoTargetRegion` (both required), plus `maxAdvertiserAccounts`, `impressionsRange`, `amountSpentRange`, `targetPlatform`, `adFormatType`, `sortOrder`, date filters. |
| **🍪 cookie** | `string` (secret) | All searches | Optional. Log in with your own Google account to lift the result cap anonymous requests hit. Encrypted and masked by Apify once saved  see the field description in the input editor for the step-by-step setup. |

***

### 🔐 Authentication

Google doesn't require an account to browse the Ads Transparency Center, so this actor works anonymously out of the box. Logging in is optional and only needed to raise the per-advertiser result cap.

| Priority | Method | When to use |
|---|---|---|
| 1 | **None (anonymous)** | Default. Works immediately, no setup  capped at roughly 100–200 ads per advertiser by Google. |
| 2 | **`cookie` field** | When you need more than the anonymous cap. Paste your exported Google session cookie  see that field's description in the input editor for the exact export steps. |

> ⚠️ Authenticating uses your real Google account's live session. We recommend using a secondary account with no important personal or business data on it, rather than your primary account.

***

### 📤 Output Structure

Results land in the default dataset with two views in the Output tab  **Ads Overview** (quick scan) and **Detailed Data** (full picture, populated when Fetch Full Ad Details is on).

#### Example  Fetch Full Ad Details: Off

```json
{
  "advertiserId": "AR04619580580634296321",
  "creativeId": "CR14567271621866815489",
  "advertiserName": "Nike",
  "domain": "nike.com",
  "format": "VIDEO",
  "adTransparencyUrl": "https://adstransparency.google.com/advertiser/AR04619580580634296321/creative/CR14567271621866815489?region=anywhere",
  "previewUrls": [
    "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity..."
  ],
  "firstShown": "2026-07-14T02:16:45-07:00",
  "lastShown": "2026-09-08T04:48:38-07:00",
  "daysRan": 57,
  "source_url": "https://adstransparency.google.com/advertiser/AR04619580580634296321",
  "_source": "google_ads_scraper"
}
```

#### Example  Fetch Full Ad Details: On

```json
{
  "advertiserId": "AR04619580580634296321",
  "creativeId": "CR14567271621866815489",
  "advertiserName": "Nike",
  "domain": "nike.com",
  "format": "VIDEO",
  "adTransparencyUrl": "https://adstransparency.google.com/advertiser/AR04619580580634296321/creative/CR14567271621866815489?region=anywhere",
  "previewUrls": ["https://displayads-formats.googleusercontent.com/ads/preview/content.js?..."],
  "creativeRegions": ["United States", "Canada", "United Kingdom"],
  "countries": ["US", "CA", "GB"],
  "firstShown": "2026-06-01T09:12:00-07:00",
  "lastShown": "2026-06-25T07:53:00-07:00",
  "daysRan": 24,
  "totalImpressions": { "lowerBound": 100000, "upperBound": 250000 },
  "totalAmountSpent": [{ "currency": "USD", "lowerBound": 10000, "upperBound": 50000 }],
  "demographics": null,
  "regionStats": [
    {
      "regionCode": "US",
      "regionName": "United States",
      "impressions": { "lowerBound": 80000, "upperBound": 200000 },
      "platformStats": [
        { "surfaceName": "YouTube", "impressions": { "lowerBound": 60000, "upperBound": 150000 } }
      ]
    }
  ],
  "source_url": "https://adstransparency.google.com/advertiser/AR04619580580634296321",
  "_source": "google_ads_scraper"
}
```

With **Extract Ad Copy** enabled, each ad also carries the creative's own wording:

```json
"adCopy": [
  {
    "headline": "Pokémon Kids TV",
    "longHeadline": "Pi-Pi-Pi-Pi Pikachu!",
    "description": "Fun Pokémon Content for Kids!",
    "cta": "Subscribe",
    "clickUrl": "https://www.youtube.com/@pokemonkidstv",
    "displayUrl": "youtube.com",
    "thumbnail": "https://i.ytimg.com/vi/h4-ftQE3zEQ/hqdefault.jpg",
    "highResThumbnail": "https://i3.ytimg.com/vi/h4-ftQE3zEQ/hqdefault.jpg",
    "videoUrl": "https://www.youtube.com/watch?v=h4-ftQE3zEQ",
    "channelName": "Pokémon Kids TV",
    "videoDuration": "4:25"
  }
]
```

`demographics` is populated for political/election ads with targeting configured, and looks like:

```json
"demographics": {
  "age": { "included": ["25 to 34", "35 to 44"], "excluded": [] },
  "gender": { "included": ["Female"], "excluded": [] },
  "location": { "included": ["California", "Texas"], "excluded": ["New York"] }
}
```

***

### ❓ Frequently Asked Questions

**Do I need a Google account to use this actor?**
No. It works anonymously out of the box. A Google account (via the optional `cookie` field) is only needed if you want to lift the ~100–200 result cap Google applies to anonymous requests.

**How many ads can I extract for free?**
Apify's $5/month free usage credit covers roughly 2,700 ad creatives on the FREE pricing tier (at $0.0018 each) - see Pricing below.

**Can I search multiple advertisers or URLs in one run?**
Yes  `adUrls`, `generalAdSearch`, and `politicalAdSearch` all accept arrays, and all three can be combined in a single run.

**Can I search political and election ads specifically?**
Yes  use `politicalAdSearch`. It exposes the spend-range, impression-range, and demographic-targeting filters specific to Google's Restricted Content (political) ad transparency reporting.

**What happens if one of my search values is invalid or unsupported?**
The run doesn't stop. The invalid value is skipped, logged, and recorded as an error item in your results  every other search target in the same run still completes.

**Does this actor need a proxy set up manually?**
No  Apify Proxy is used automatically for every run. See Proxy Support below for how paid vs. free runs are routed.

***

### 🛡️ Built for Reliability

- **Automatic proxy routing**  paying users are routed through a dedicated proxy network for faster, more consistent runs, with automatic fallback so a run never stalls on a single bad connection.
- **Never fails on one bad input**  invalid or unsupported search values are logged and skipped, with an error record added to your results, instead of stopping the whole run.
- **Optional authenticated access**  the `cookie` field lets you log in with your own Google account to retrieve significantly more ads per advertiser than an anonymous run.
- **Verified against the real thing**  every output field, including political-ad demographic targeting, was checked against real advertiser creatives and cross-referenced directly against Google's own Ads Transparency Center pages.

***

### 🎯 Professional Use Cases

#### Competitive Intelligence

Track competitor advertising strategies, study successful creative formats and messaging, and gauge spend based on impression data.

#### Market & Political Research

Analyze advertising patterns in your industry, or track political/election ad spend, reach, and demographic targeting by region.

#### Media & Campaign Planning

Data-driven decisions on platform selection (YouTube vs. Search vs. Shopping), geographic targeting, and creative direction based on what's already running.

#### Business Intelligence

Brand monitoring, partnership discovery, and market-entry research based on real, current advertising activity.

***

### 💰 Pricing

This actor charges per **successfully extracted ad creative**  you're only billed for ads actually delivered, not for search attempts.

| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Successful ad creative | $0.0018 | $0.0014 | $0.0011 | $0.0008 |

One event, nothing else to add up: you're billed once per ad delivered, whatever options you enable.

**Cost estimate examples:**

- Extracting **1,000 ads** on the FREE plan: ~$1.80
- Extracting **1,000 ads** on the GOLD plan: ~$0.80
- Extracting **10,000 ads** on the SILVER plan: ~$11.00

> 💡 Tip: Set `maxResults` to a small number like `10` first to confirm your search returns what you expect before running a full extraction.

***

### 🔌 API Integration

##### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("dz_omar/google-ads-scraper").call(
    run_input={
        "generalAdSearch": [{"searchTargets": "nike", "maxAdvertiserAccounts": 3}],
        "maxResults": 20
    }
)

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

##### JavaScript

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor("dz_omar/google-ads-scraper").call({
    generalAdSearch: [{ searchTargets: "nike", maxAdvertiserAccounts: 3 }],
    maxResults: 20
});

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

#### Existing integrations keep working

If your workflow already sends the older flat input shape (`searchTargets`, `resultsPerQuery`, `politicalAdsMode`), it continues to be accepted  no changes required on your end. New integrations should use `adUrls` / `generalAdSearch` / `politicalAdSearch` above, which offer more filters and clearer structure.

***

### 🛡️ Legal & Compliance

This actor extracts advertising data made **publicly available** by Google's own Ads Transparency Center, in support of Google's advertising transparency initiatives.

- ✅ Anonymous scraping accesses only publicly available data
- ⚠️ The optional `cookie` field authenticates as your own Google account  we recommend a secondary account with no important personal or business data on it, and review Google's Terms of Service for your use case
- ⚠️ Ensure your use complies with applicable data protection laws (GDPR, CCPA, etc.)

**Recommended use:** competitive analysis and market research, academic research on advertising trends, and transparency/accountability journalism.

***

### 🌐 Proxy Support

| User tier | Proxy used |
|---|---|
| 💎 Paying | Dedicated proxy network  faster, more reliable, with automatic fallback |
| 🆓 Free | Apify Proxy  built-in, automatic |

If the dedicated network is ever unavailable, paying runs fall back to Apify Proxy automatically  a run never fails outright because of a proxy issue.

***

### 🚫 Error Handling

| Situation | What you see | What to do |
|---|---|---|
| No results for a valid advertiser/URL | Empty dataset, no error | Try removing region/date filters; confirm the ad exists on Ads Transparency Center manually |
| Political search missing region | Validation error before the run starts | Set `geoTargetRegion`  it's required for `politicalAdSearch` |
| Fewer results than expected | Results stop around 100–200 ads per advertiser | Use the optional `cookie` field to lift Google's anonymous-request cap |
| Unsupported legacy `searchTargets` value | `error: true` item in your dataset, run continues | Migrate that entry to `adUrls` (URL-only)  see the item's `reason` field for detail |
| Proxy-related failures | Rare  handled automatically | No action needed; paying runs fall back to Apify Proxy automatically |

***

### 🌟 Related Actors by [FlowExtractAPI](https://apify.com/dz_omar?fpr=smcx63)

#### 📱 Social Media Intelligence

**[Facebook Ads Scraper Pro](https://apify.com/dz_omar/facebook-ads-scraper-pro?fpr=smcx63)**
Extract Facebook advertising data for comprehensive cross-platform competitor analysis.

#### 🎬 Video & Content Tools

**[YouTube Transcript & Metadata Extractor](https://apify.com/dz_omar/youtube-transcript-metadata-extractor?fpr=smcx63)**
Extract video transcripts, metadata, and analytics from YouTube content.

**[YouTube Full Channel Scraper](https://apify.com/dz_omar/Youtube-Scraper-Pro?fpr=smcx63)**
Complete channel, playlist, shorts, and live stream data extraction.

**[Zoom Scraper | Video & Transcript](https://apify.com/dz_omar/zoom-scraper?fpr=smcx63)**
Download Zoom recordings and extract meeting transcripts.

**[Loom Scraper | Video & Transcript](https://apify.com/dz_omar/loom-video-scraper?fpr=smcx63)**
Extract Loom videos and transcripts for content analysis.

#### 🏠 Real Estate Data

**[Idealista Scraper API](https://apify.com/dz_omar/idealista-scraper-api?fpr=smcx63)**
Advanced Spanish property data extraction with API access.

#### 🛠️ Developer Tools

**[Ultimate Screenshot](https://apify.com/dz_omar/ultimate-screenshot?fpr=smcx63)**
Professional webpage screenshots with full customization.

**[Network Security Scanner](https://apify.com/dz_omar/network-security-scanner?fpr=smcx63)**
Comprehensive website security vulnerability scanning.

***

### 💬 Support & Feedback

#### Need Help?

- 🌐 **Website**: [flowextractapi.com](https://flowextractapi.com)
- 📧 **Email**: <flowextractapi@outlook.com>
- 🙋 **Apify Profile**: [FlowExtract API](https://apify.com/dz_omar?fpr=smcx63)
- 💬 **GitHub Issues**: [FlowExtractAPI](https://github.com/FlowExtractAPI)

#### Social Media

- 💼 **LinkedIn**: [flowextract-api](https://www.linkedin.com/in/flowextract-api/)
- 🐦 **Twitter**: [@FlowExtractAPI](https://x.com/@FlowExtractAPI)
- 📱 **Facebook**: [flowextractapi](https://www.facebook.com/flowextractapi)

#### Found a Bug or Have a Feature Request?

Open an issue or contact us directly. We're committed to continuous improvement and responsive support.

#### Rate This Actor

If you find this actor valuable, please leave a review! Your feedback helps us improve and helps others discover quality tools.

***

**Built with ❤️ by [FlowExtractAPI](https://apify.com/dz_omar?fpr=smcx63) | Powered by [Apify Platform](https://apify.com?fpr=smcx63)**

# Changelog

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

# Actor input Schema

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

Maximum number of ads to extract per search  each URL in "Search by URL", and each entry in "General Ad Search" or "Political & Election Ads". Set to 0 for unlimited. This applies independently to every search, not as a shared total: 2 URLs + 3 searches × 11 = up to 55 ads.

⚠️ For General and Political searches, the limit applies to EACH advertiser that your search text matches. A search with "Max Matching Advertisers" = 3 and this set to 20 can return up to 60 ads (3 × 20). Lower "Max Matching Advertisers" if you want a tighter cap.

## `fetchAdDetail` (type: `boolean`):

OFF (default): results come from the search listing only  fast, one request per search. ON: the scraper makes one extra request per ad to also collect the per-region delivery breakdown, and — for political & election ads — spend range, impression range, first/last shown dates, and demographic targeting.

💡 Worth knowing: Google only publishes spend, impressions, and date ranges for POLITICAL ads. For ordinary commercial ads it discloses far less, so turning this ON mainly adds the list of regions the ad ran in. If you're scraping commercial ads at volume, leaving it OFF is usually the better trade (2× faster, same core data).

## `fetchAdCopy` (type: `boolean`):

OFF (default). ON: also extract the ad's actual text - headline, long headline, description, call-to-action button label, click/display URL, and a clean thumbnail image. This is the creative messaging itself, which Google's API does not return anywhere; recovering it costs one extra request per ad, so runs are slower. Billing is unchanged: still one charge per ad, no extra event.

## `adUrls` (type: `array`):

One or more Google Ads Transparency Center URLs. Copy the URL directly from your browser after applying all desired filters on the page.

## `generalAdSearch` (type: `array`):

Define one or more keyword-based, advertiser-based, or domain-based searches to run against the Google Ads Transparency Center.

## `politicalAdSearch` (type: `array`):

Define one or more political/election ad searches.

## `cookie` (type: `string`):

Optional. Leave empty to scrape anonymously (default  lower result cap, zero risk to any account).

📋 How to get your cookies:

1. Install a cookie-export extension  [Cookie-Editor](https://cookie-editor.com) is the format this field is built and tested against.
2. Log into your Google account in that browser.
3. Visit adstransparency.google.com while logged in.
4. Open the Cookie-Editor extension → Export → JSON.
5. Paste the exported JSON array here. (A raw "name=value; name2=value2" Cookie header also works.)

⚠️ USE AT YOUR OWN RISK: this makes requests using your account's live session, and Google may flag, rate-limit, or restrict an account it detects behaving like a scraper. We recommend using a secondary account with no important personal or business data on it, rather than your primary account.

🔒 This field is marked secret: Apify encrypts it and masks the value everywhere in the Console (including the Input/Storage tabs and run logs), so it's never exposed after you save it.

## Actor input object example

```json
{
  "maxResults": 10,
  "fetchAdDetail": false,
  "fetchAdCopy": false,
  "adUrls": [
    {
      "url": "https://adstransparency.google.com/advertiser/AR04619580580634296321"
    }
  ]
}
```

# Actor output Schema

## `allResults` (type: `string`):

Complete dataset with every field extracted for each ad.

## `overview` (type: `string`):

Quick scan: advertiser, creative ID, format, and preview URLs for every ad.

## `detailed` (type: `string`):

The full picture: regional and delivery-country breakdowns, spend and impression ranges, first/last shown dates, and demographic targeting — available when "Fetch Full Ad Details" is enabled.

# 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 = {
    "maxResults": 10,
    "adUrls": [
        {
            "url": "https://adstransparency.google.com/advertiser/AR04619580580634296321"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dz_omar/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 = {
    "maxResults": 10,
    "adUrls": [{ "url": "https://adstransparency.google.com/advertiser/AR04619580580634296321" }],
}

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/google-ads-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 '{
  "maxResults": 10,
  "adUrls": [
    {
      "url": "https://adstransparency.google.com/advertiser/AR04619580580634296321"
    }
  ]
}' |
apify call dz_omar/google-ads-scraper --silent --output-dataset

```

## MCP server setup

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