# Competitor Ad Intelligence - Ad Spy Tool (`logiover/competitor-ad-intelligence`) Actor

Google Ads Transparency Center scraper. Export competitor ad creatives, format mix and volume to CSV/JSON. No login - an unofficial API alternative.

- **URL**: https://apify.com/logiover/competitor-ad-intelligence.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Lead generation, Marketing, AI
- **Features:** Limited permissions
- **Stats:** 6 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $35.00 / 1,000 competitor ad reports

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

## Competitor Ad Intelligence — Spy on Rivals' Google Ads (No API Key)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Ad Intelligence](https://img.shields.io/badge/Category-Ad%20Intelligence-EF4444) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

See exactly what ads your competitors are running on Google — in one report. Enter a **brand or domain** and get their **active-ad volume**, **creative format mix**, newest creatives, sample previews with preview + transparency URLs, and a plain-English **ad-strategy summary**. Powered by **Google's Ads Transparency Center**, queried directly — **no browser scraping, no API key, no login, no cookies.**

> ### 🏆 Why this competitor ad spy?
>
> **Per-brand strategy report + every creative** · **bulk competitors per run** · format mix · newest/oldest creative dates · preview + transparency URLs · export to JSON / CSV / Excel. The unofficial **Google Ads Transparency Center API alternative** for performance marketers, agencies and founders who want to reverse-engineer a rival's advertising playbook in seconds.

***

### ✨ What this Actor does / Key features

- 🎯 **Brand → strategy report** — type a competitor's name (or domain) and get a decision-ready playbook, not a raw dump of every ad.
- 📊 **Creative format mix** — image / video / display / text breakdown, so you can read a rival's channel strategy at a glance.
- 🔥 **Dominant formats + freshness** — see the leading formats and the newest/oldest creative dates to gauge how aggressive and current their advertising is.
- 🖼️ **Sample creatives** — per-ad rows with `previewUrl` and Google `transparencyUrl` links, dimensions, first/last-shown dates, days-running and active status.
- 🧾 **Estimated active ads** — how many ads the advertiser is running right now.
- 📝 **Plain-English summary** — a `strategySummary` you can paste straight into a competitive-audit deck.
- 🌍 **Region targeting** — focus on a specific country (ISO code) or search worldwide with `anywhere`.
- 🧠 **Auto brand resolution** — brand names are resolved to Google advertiser IDs automatically; or search directly by domain.
- 📦 **Bulk + API** — analyze a whole competitor set in one run; export or pull via the Apify API.
- 🔑 **Official source, key-free** — Google Ads Transparency Center data queried directly, so there's no fragile page scraping, token, login or cookie.

### 🚀 Quick start (3 steps)

1. **Configure** — add competitor **brand names** (e.g. `Nike`, `HubSpot`) and/or **domains** (`nike.com`), pick a **region** (or `anywhere`) and a sample size.
2. **Run** — click **Start**. The Actor resolves each brand, queries the Transparency Center and compiles a report per competitor.
3. **Get your data** — read the **strategy summary** in the **Output** tab, or export the dataset to **JSON, CSV, Excel or XML** (or the Apify API).

### 📥 Input

Supply at least one `brands` entry and/or one `domains` entry. Everything else is optional.

#### Example — benchmark two brands in the US

```json
{
  "brands": ["Nike", "HubSpot"],
  "region": "US",
  "maxAdsPerBrand": 60
}
```

#### Example — search by domain, worldwide

```json
{
  "domains": ["nike.com", "adidas.com", "underarmour.com"],
  "region": "anywhere",
  "maxAdsPerBrand": 100
}
```

#### Example — deep sample of a single competitor in Germany

```json
{
  "brands": ["Zalando"],
  "region": "DE",
  "maxAdsPerBrand": 300
}
```

| Field | Type | Description |
|-------|------|-------------|
| `brands` | array | Competitor / advertiser brand names to analyze; resolved automatically to advertiser IDs (e.g. `Nike`, `HubSpot`). |
| `domains` | array | Alternatively (or additionally), search ads by advertiser domain (e.g. `nike.com`). |
| `region` | string | Country to search ads in (ISO code such as `US`, `GB`, `DE`, `TR`) or `anywhere` for worldwide. Default `anywhere`. |
| `maxAdsPerBrand` | integer | Sample size per competitor for the format-mix analysis. Default `60`, min `10`, max `300`. |

> **Tip:** Add several brands or domains in a single run to benchmark a whole category and see who is advertising hardest and in which formats.

### 📤 Output

The dataset contains a per-brand **strategy summary** row plus individual **creative** rows, distinguished by `rowType`. Exportable to JSON, CSV, Excel or XML. Here is a trimmed sample of both row types:

```json
[
  {
    "rowType": "summary",
    "brand": "Nike, Inc.",
    "domain": "nike.com",
    "regionSearched": "US",
    "estimatedActiveAds": "8000-9000",
    "adsAnalyzed": 60,
    "formatMix": { "IMAGE": 52, "DISPLAY": 8, "VIDEO": 0, "TEXT": 0 },
    "dominantFormats": ["IMAGE", "DISPLAY"],
    "newestCreativeDate": "2026-05-30",
    "oldestCreativeDate": "2025-11-02",
    "strategySummary": "Nike, Inc. is running roughly 8000-9000 ads on Google. Creative mix is led by IMAGE + DISPLAY ads. Most recent creative seen 2026-05-30."
  },
  {
    "rowType": "ad",
    "brand": "Nike, Inc.",
    "format": "IMAGE",
    "dimensions": "300x250",
    "previewUrl": "https://adstransparency.google.com/advertiser/.../creative/...",
    "transparencyUrl": "https://adstransparency.google.com/advertiser/...",
    "firstShown": "2026-04-11",
    "lastShown": "2026-05-30",
    "daysRunning": 49,
    "isActive": true
  }
]
```

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Row type | Description |
|-------|----------|-------------|
| `rowType` | both | `summary` (per-brand report) or `ad` (individual creative) |
| `brand` | both | Advertiser name (auto-resolved from the input) |
| `domain` | summary | Advertiser domain |
| `regionSearched` | summary | Region the ads were searched in |
| `estimatedActiveAds` | summary | Estimated number of ads running now (range string, e.g. `8000-9000`) |
| `adsAnalyzed` | summary | How many creatives were sampled for the mix |
| `formatMix` | summary | Count per creative format (IMAGE / VIDEO / DISPLAY / TEXT) |
| `dominantFormats` | summary | The leading creative format(s) |
| `newestCreativeDate` / `oldestCreativeDate` | summary | Freshness window of the sampled creatives |
| `strategySummary` | summary | Plain-English ad-strategy summary |
| `format` | ad | Creative format of this ad (IMAGE / VIDEO / DISPLAY / TEXT) |
| `dimensions` | ad | Creative dimensions where available |
| `previewUrl` | ad | Direct preview URL for the creative |
| `transparencyUrl` | ad | Google Ads Transparency Center link for the advertiser/creative |
| `firstShown` / `lastShown` | ad | First and last dates the creative was seen |
| `daysRunning` | ad | How many days the creative has been running |
| `isActive` | ad | Whether the creative is currently active |

</details>

#### Additional output fields

These fields are also present in the dataset:

| Field | Type | Description |
|---|---|---|
| `advertiserId` | string | Google Ads Transparency advertiser ID. |
| `advertiserDomain` | string | Advertiser domain (ad rows). |
| `advertiserCountry` | string | Advertiser's registered country code. |
| `rank` | number | Position of this creative within the analyzed sample. |
| `creativeId` | string | Google Ads Transparency creative ID. |
| `width` | number | Creative width in pixels. |
| `height` | number | Creative height in pixels. |
| `recentlyActiveAds` | number | How many analyzed creatives ran in the last 30 days. |
| `scrapedAt` | string | ISO timestamp when the report was compiled. |

### 💡 Use cases

- **Pre-launch recon** — check how many ads a competitor runs and in what formats before you spend a dollar.
- **Monthly competitive report** — track rivals' active-ad volume and creative mix over time on a schedule.
- **Creative inspiration** — pull a competitor's live creatives (with preview URLs) to brief your designers.
- **Category benchmark** — run 10 brands and compare who's advertising hardest and in which formats.
- **Media-buying prep** — read a rival's format/creative mix before allocating budget across channels.
- **Agency pitches** — build a competitive ad audit slide in minutes for a new-business deck.

### 👥 Who uses it

Performance marketers · agencies & consultants · founders & growth teams · media buyers · creative & UGC teams · market researchers · competitive-intelligence analysts · PPC specialists.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — you pay per competitor report (and creatives), with no subscription and no separate Apify platform fees to calculate. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is it legal to spy on competitor ads?**
Yes. Google's Ads Transparency Center publishes advertiser ad data specifically for public transparency. This Actor only reads that publicly available data; you remain responsible for using it in compliance with Google's terms and applicable laws.

**Does Google Ads Transparency Center have a public API — and is this an API alternative?**
There is no official Google Ads Transparency Center API, so this Actor acts as an unofficial API alternative — it queries the Transparency Center directly and returns structured data with no key, login or cookie.

**Do I need an API key or a login?**
No. Just enter brand names or domains and run. The Actor queries Google's Ads Transparency Center key-free — no API token, no login, no cookies.

**How do I see what ads a competitor is running on Google?**
Enter the competitor's brand name or domain and the Actor compiles a report showing their active-ad volume, creative format mix and newest creatives from Google's Ads Transparency Center, plus per-creative preview and transparency links.

**Can I search by domain instead of brand name?**
Yes — use the `domains` field. Brand names in `brands` are auto-resolved to advertiser IDs; domains are searched directly.

**How do I export competitor ad data to CSV or JSON?**
Every run writes a clean dataset you can export to **CSV, Excel or JSON**, or pull via the Apify API — the per-brand summary plus every sampled creative with its format, preview URL and dates.

**How much data can I get?**
Set `maxAdsPerBrand` up to 300 creatives sampled per competitor for the format-mix analysis, and add as many brands/domains as you like in one run. The summary also reports Google's estimated total active-ad volume, which can run into the thousands.

**Can I compare several competitors at once?**
Yes. Add multiple brands or domains in one run and each produces its own compiled report, so you can benchmark who is advertising hardest and in which formats across a whole category.

**Does this cover Meta / TikTok ads too?**
This version focuses on Google — the highest-coverage, key-free source — which reveals most of a brand's paid-search and display strategy. Pair it with the Meta Ad Library scraper below for cross-platform coverage.

**Can I run it on a schedule?**
Yes — schedule recurring runs to track competitors' ad activity, format mix and creative freshness over time.

### 🔗 More ad, competitive & market-intel scrapers by logiover

Build a full cross-platform ad-intelligence stack:

| Actor | What it does |
|---|---|
| [Google Ads Transparency Scraper](https://apify.com/logiover/google-ads-transparency-scraper) | Raw ad-by-ad data from Google's Transparency Center |
| [Meta Ad Library Scraper](https://apify.com/logiover/meta-ad-library-scraper) | Facebook & Instagram ads, spend & impressions |
| [LinkedIn Jobs Scraper](https://apify.com/logiover/linkedin-jobs-scraper) | LinkedIn job listings by keyword & location (no login) |
| [News Intelligence Scraper](https://apify.com/logiover/news-intelligence-scraper) | Track news & press mentions of competitors |
| [Google News Scraper](https://apify.com/logiover/google-news-scraper) | Headlines & articles for any topic or brand |
| [SERP Keyword Research](https://apify.com/logiover/serp-keyword-research) | Search-results & keyword data for campaigns |
| [Google Play Data API](https://apify.com/logiover/google-play-data-api) | App metadata, ratings & reviews |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify to track competitors' ad volume, format mix and creative freshness weekly or monthly, and diff datasets to spot new campaigns. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to **Make, n8n or Zapier** to feed a competitive-intelligence dashboard or an automated client-reporting pipeline.

### 🤖 AI Agents, MCP & RAG Integration

**Competitor Ad Intelligence** works natively as an on-demand data tool for AI assistants and autonomous workflows.

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/competitor-ad-intelligence"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/competitor-ad-intelligence/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/competitor-ad-intelligence/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/competitor-ad-intelligence/reviews) or bookmarking [logiover/competitor-ad-intelligence](https://apify.com/logiover/competitor-ad-intelligence) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### ⚖️ Legal

This Actor extracts only publicly available advertising data from Google's Ads Transparency Center and is intended for legitimate competitive research, market analysis and creative reference. You are responsible for complying with Google's terms of service, GDPR and any applicable local laws.

***

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by the website or data publisher it reads from; all trademarks and brand names are the property of their respective owners.

### Competitor scraping — frequently asked questions

#### Do I need a Competitor API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

#### How do I export Competitor data to CSV, Excel, JSON or Google Sheets?

Open the **Storage** tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

#### Can I schedule this Competitor scraper to run daily or hourly?

Yes. Use the **Schedules** tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the rows you care about really do change that fast.

#### How many rows can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

#### Is scraping Competitor legal?

This Actor collects only information that Competitor publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

#### What happens if Competitor blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run **fails with the reason** instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

#### Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

### 📝 Changelog

#### 2026-11-14

- Verified live high-volume benchmark (2026-11-14): extracted **602** structured records in **25.3s** on the production build.
- Hardened internal proxy stall fallback and pay-per-event dataset instance budget protection.

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 5 links to retired Actors removed; independence disclaimer added; documented 9 additional output fields.

#### 2026-10-15

- Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Runs with a short timeout (API and AI-agent calls) now finish inside it with what they collected, instead of being cut off.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 19 columns returned, 92.4% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 1 column(s) came back empty in this sample (`advertiserDomain`); these are under review.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
- Fixed the run Output link from `{{links.apiDefaultDatasetUrl}}` to `{{links.apiDefaultDatasetUrl}}/items` so the results table opens the dataset items endpoint.

#### 2026-08-01 — Health-check remediation

- August 2026 monthly health-check remediation is in progress; this build contains fixes verified from empty/default, Console-default, targeted live probes, or field-level semantic review.
- Fixed the run Output link from `{{links.apiDefaultDatasetUrl}}` to `{{links.apiDefaultDatasetUrl}}/items` so the results table opens the dataset items endpoint.
- The final four-input matrix verdict will be appended after post-build cloud revalidation.

#### 2026-07-06

- ✨ README overhaul: richer output sample, ready-to-run example scenarios, cross-promo links, and clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: added coverage for using this as a Google Ads Transparency Center API alternative, scraping without login, and exporting competitor ad data to CSV/JSON.

#### 2026-06-05

- 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
- ⚡ Stability & performance hardening; fresh rebuild.

#### 2026-06-04

- Verified live & refreshed build — reliability/maintenance pass.

***

\*Maintained: last verified 2026-11-14 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/competitor-ad-intelligence/changelog.md

# Actor input Schema

## `brands` (type: `array`):

Brand/advertiser names to analyze (resolved automatically), e.g. Nike, HubSpot. Leave EMPTY (and no domains) to analyze a popular default brand.

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

Alternatively, search ads by advertiser domain, e.g. nike.com.

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

Country to search ads in.

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

Restrict to a single creative format (matched on the report's detected format), or analyze all formats.

## `maxAdsPerBrand` (type: `integer`):

Sample size per competitor for the format-mix analysis.

## Actor input object example

```json
{
  "brands": [
    "Nike",
    "HubSpot"
  ],
  "region": "anywhere",
  "format": "all",
  "maxAdsPerBrand": 60
}
```

# Actor output Schema

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

One ad-strategy report per competitor.

# 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 = {
    "brands": [
        "Nike",
        "HubSpot"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/competitor-ad-intelligence").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 = { "brands": [
        "Nike",
        "HubSpot",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("logiover/competitor-ad-intelligence").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 '{
  "brands": [
    "Nike",
    "HubSpot"
  ]
}' |
apify call logiover/competitor-ad-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/competitor-ad-intelligence"
        }
    }
}
```

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/9bzXXRgAsQrWETRpZ/builds/MgnINry821n4b91LK/openapi.json
