# AI Search Visibility Audit — ChatGPT, Google AI & Perplexity (`afanasenko/ai-visibility-audit`) Actor

Enter a domain and up to 5 competitors, no prompt list needed. Get the AI search questions where ChatGPT and Google AI Overview name each brand, with AI search volume, gaps, cited sources, share of voice and changes since your last run. Optional live re-check incl. Perplexity and your own questions.

- **URL**: https://apify.com/afanasenko/ai-visibility-audit.md
- **Developed by:** [Andrey Afanasenko](https://apify.com/afanasenko) (community)
- **Categories:** AI, SEO tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1,500.00 / 1,000 brands

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

## AI Search Visibility Audit — ChatGPT, Google AI & Perplexity

[![Apify Actor](https://apify.com/actor-badge?actor=afanasenko/ai-visibility-audit)](https://apify.com/afanasenko/ai-visibility-audit)

> **Enter your domain and up to 5 competitor domains. Get the AI search questions where ChatGPT and Google AI Overview name each brand — with monthly AI search volume — and the gap list: questions where a competitor is named and you are not.**
> No list of prompts needed: the questions come from what people already ask AI.

> **🆓 Start on the free plan:** audit your domain against one competitor on up to 20 questions, with the gap list, once a month.

### 🎯 What it does

Other AI visibility trackers ask you to write the prompts first. This audit starts from a domain.

**You give** your domain and up to 5 competitor domains. Country and language are optional.

**You get** one row per AI search question, highest AI search volume first: who is named, in what order, and which sites are cited. The first row is a **summary** with share of voice and the gap list.

**What you won't get:** an audit built from prompts you write — the audited questions come from the index. You can add up to 10 questions of your own to the live re-check. The question discovery covers ChatGPT (United States, English only) and Google AI Overview. Perplexity and Google AI Mode are asked only in the optional live re-check.

| You give | You receive |
|---|---|
| Your domain | The questions where AI answers name your brand |
| Up to 5 competitor domains | For each competitor, the questions where it is named and **you are not** — your gaps |
| A country and language (optional) | Share of voice per brand on ChatGPT and on Google AI Overview |
| Live re-check (optional) | The top questions asked again **right now** on ChatGPT, Perplexity, Google AI Overview and Google AI Mode — plus up to 10 questions of your own |
| Compare with my last run (optional) | Per question, what changed since your last audit: brands that appeared or disappeared, your position, gaps opened or closed |

**Old answers and today's answers.** The questions come from an index of real AI answers, which can be months old (`lastSeen`). The live re-check shows today's answer.

**Every answer is re-read.** A brand counts as named by its link, domain or name. A link alone counts as **cited**, not named.

### 📦 Output sample

Every question is one row. Here is what a row holds:

- **The question** — `question`, `questionSource` (`index`, or `own` for a question you wrote), `aiSearchVolume`, `monthlySearches`, `platforms`, `firstSeen`, `lastSeen`.
- **Your visibility** — `youNamed`, `youCited`, `isGap`, `gapPlatforms`, `competitorsNamed`, `yourPositionChatgpt`, `yourPositionAiOverview`.
- **What each platform says** — `brandsInOrderChatgpt`, `brandsInOrderAiOverview`, `allBrandsChatgpt`, `allBrandsAiOverview`, `answerChatgpt`, `answerAiOverview`.
- **Sources** — `citedDomainsChatgpt`, `citedDomainsAiOverview`, `sources` (platform, position, domain, URL, title). With the live re-check on, the re-checked rows also hold `liveCheckedAt`, `liveYouNamedOn`, `liveCompetitorsNamed` and `liveAnswers`.
- **Since your last run** — with **Compare with my last run** on, `sinceLastRun`: `status` (`new`, `unchanged`, `changed`), `lastRunAt`, `youNamedBefore` / `youNamedNow`, `gapBefore` / `gapNow`, and `changes` — per answer (`ChatGPT`, `Google AI Overview`, `Live: Perplexity`…) the audited brands that appeared and disappeared, the brand names that appeared and disappeared, and your position before and now.

**Your own questions** come after the audited questions, one row each with `questionSource: "own"`. They are not in the index, so their index columns are empty; `youNamed`, `youCited`, `isGap`, `gapPlatforms` and `competitorsNamed` are read from their live answers.

A real gap row from the clickup.com audit of 27 October 2026 (answer and lists shortened):

```json
{
  "type": "question",
  "auditedDomain": "clickup.com",
  "question": "team collaboration tool",
  "aiSearchVolume": 301000,
  "platforms": ["Google AI Overview"],
  "youNamed": false,
  "youCited": false,
  "isGap": true,
  "gapPlatforms": ["Google AI Overview"],
  "competitorsNamed": ["asana.com", "monday.com"],
  "brandsInOrderChatgpt": null,
  "brandsInOrderAiOverview": ["asana.com", "monday.com"],
  "yourPositionChatgpt": null,
  "yourPositionAiOverview": null,
  "allBrandsChatgpt": null,
  "allBrandsAiOverview": ["Slack", "Zoom", "Asana", "Monday.com", "Google Workspace", "Microsoft Teams"],
  "citedDomainsChatgpt": null,
  "citedDomainsAiOverview": ["reclaim.ai", "zapier.com", "youtube.com", "microsoft.com", "workspace.google.com"],
  "sources": [
    { "platform": "Google AI Overview", "position": 1, "domain": "reclaim.ai", "url": "https://reclaim.ai/blog/collaboration-platforms", "title": "12 Best Online Collaboration Platforms – 2026 Team Apps (Reviewed)" },
    { "platform": "Google AI Overview", "position": 2, "domain": "zapier.com", "url": "https://zapier.com/blog/collaboration-apps/", "title": "The best team collaboration tools in 2026 - Zapier" }
  ],
  "answerChatgpt": null,
  "answerAiOverview": "Top team collaboration tools for 2026 include Slack for messaging, Zoom for video conferencing, and Asana or Monday.com for project management…",
  "monthlySearches": [{ "year": 2026, "month": 2, "searchVolume": 590 }],
  "firstSeen": "2026-03-11T22:32:28.000Z",
  "lastSeen": "2026-03-11T22:32:28.000Z"
}
```

A platform with no answer to the question is `null` in its columns.

The summary row (`type: "summary"`) holds:

- **Counts** — `questionsAudited`, `questionsNamingYou`, `questionsCitingYouOnly`, `headToHeadQuestions`, `gapQuestions`.
- **The gaps** — `gapList` (the 25 highest-volume gaps), `gapAnswersInIndexByCompetitor`.
- **Share of voice** — `shareOfVoice` (whole index), `auditedShare` (audited questions), `answersInIndexNamingYou`.
- **Sources** — `topCitedDomains`, the sites the AI cites most.
- **About the run** — `notes`, `unconfirmedAnswersDropped`, `liveRecheck` (with `ownQuestions`, how many of your questions were asked), `brandsCharged`.
- **What changed** — with **Compare with my last run** on, `changesSinceLastRun`: `status` (`compared`, `first_run`, `unavailable`), `lastRunAt`, the counts of new, gone, changed and unchanged questions, and by name the questions where you are now named or no longer named, the gaps opened and closed, and the questions no longer in the audit (25 of each).

**Views** — three ways to look at the same rows, in the **Storage → Dataset** tab:

| View | What each row is | Best for |
|---|---|---|
| **Questions** (default) | The same rows, trimmed to the question, volume, you named, gap, competitors and the order of brands | Reading the whole audit |
| **Gaps** | The same rows, trimmed to the gap columns: platforms where you are missing and the sites cited there. Filter `isGap` to true | Planning content |
| **Summary** | The same rows, trimmed to the summary columns. Only the first row fills them | Share of voice and the gap list |

The full per-field schema is in [`.actor/dataset_schema.json`](.actor/dataset_schema.json), which AI agents also read.

### ⚡ Quick start

A minimal input that works on the **free plan**:

```json
{
  "domain": "clickup.com",
  "competitors": ["asana.com"]
}
```

1. Enter **Your domain**, e.g. `clickup.com`.
2. Add **Competitor domains**, one per line, e.g. `asana.com`.
3. Click **Start**. An audit takes about 5 seconds; a live re-check adds about 30 seconds per 3 questions.
4. Open the **Summary** view for share of voice and the gap list, then **Questions** for every row.

### 🧭 When to use it

- **Before you write content** — see the high-volume questions where AI recommends your competitors and not you.
- **In a GEO or AEO audit for a client** — one domain in, a full picture out, without inventing prompts.
- **To pick sites to be mentioned on** — `topCitedDomains` lists where the AI gets its answers.
- **To confirm a gap is still true today** — turn on the live re-check.
- **To compare share of voice by platform** — ChatGPT and Google AI Overview are counted separately.
- **To track AI visibility over time** — schedule the same audit with **Compare with my last run** on, and add the prompts you care about as your own questions in the live re-check.

### 🛠 Input

The form has four sections: **What to audit**, **Live re-check**, **Track changes** and **Brand matching**.

| Field | Default | What it does |
|---|---|---|
| `domain` | — | Your site, e.g. `clickup.com`. A full URL works too. |
| `competitors` | `[]` | Up to 5 competitor domains. Each one adds its own gap questions. |
| `country` / `language` | `US` / `en` | The market whose AI answers are read. |
| `platforms` | both | ChatGPT and/or Google AI Overview. ChatGPT answers exist for the United States in English only. |
| `maxQuestions` | `100` | 10–100 questions, highest AI search volume first. The price does not depend on it. |
| `liveRecheck` | `false` | Ask the top questions again now, gap questions first. |
| `liveRecheckQuestions` | `10` | How many questions to re-check live (1–10). |
| `liveRecheckEngines` | all four | ChatGPT, Perplexity, Google AI Overview, Google AI Mode. |
| `liveRecheckOwnQuestions` | `[]` | Up to 10 questions you write, one per line, asked live before the top questions. Needs `liveRecheck`. |
| `compareWithLastRun` | `false` | Show what changed since your last audit of the same domain in the same country and language. Free. |
| `brandNames` | `[]` | Only if a brand goes by a name its domain does not show: `hey.com = HEY`. |

**Maximum cost per run** caps charges. If it pays for fewer brands than you entered, the last competitors are left out before any lookup, and **Skipped Items** names them.

### 💰 How much will an AI visibility audit cost?

The Actor uses Apify's **Pay Per Event** model. The price is the same on every Apify plan.

| Event | Price | When |
|---|---|---|
| **Brand** | $1.50 | Once for each brand in the audit — your domain and each competitor — that appears in at least one AI search question |
| **Live answer** | $0.06 | Per answer received in the optional live re-check — the top questions and your own questions alike |

A brand with no question found is not charged; neither is an audit that finds nothing or fails. The number of questions does not change the price. `brandsCharged` in the summary row lists the brands charged.

**Pricing math**

| Audit | Brands found | Cost |
|---|---|---|
| Your brand alone | 1 | $1.50 |
| Your brand + 1 competitor | 2 | $3.00 |
| **Your brand + 2 competitors** | 3 | **$4.50** |
| Your brand + 5 competitors | 6 | $9.00 |
| Live re-check of 10 questions on four engines | — | up to 40 answers, at most $2.40 |
| 3 of your own questions on four engines | — | up to 12 answers, at most $0.72 |
| Compare with my last run | — | free |

An engine that gives no answer in the live re-check is not charged. Apify platform usage is included in these prices.

### 🆓 Free vs paid plan

| | Free plan | Paid plan |
|---|---|---|
| Competitors per audit | 1 | up to 5 |
| Questions | up to 10 + 10 | up to 100 |
| Gap list | ✓ | ✓ |
| Share of voice across the whole index | — | ✓ |
| Live re-check | — | ✓ |
| Audits | one a month | no limit |
| Price per brand found | $1.50, from your free platform credits | $1.50 |

The free allowance resets at the start of each UTC calendar month. Upgrade to audit up to 5 competitors on 100 questions, with share of voice and the live re-check. Paid plans start at $19/mo with $19 in platform credits.

### 🧪 Recipes

**A full audit against five competitors:**

```json
{ "domain": "clickup.com", "competitors": ["asana.com", "monday.com", "notion.so", "trello.com", "wrike.com"] }
```

Six brands, so at most $9.00.

**Confirm the top gaps live:**

```json
{ "domain": "clickup.com", "competitors": ["asana.com", "monday.com"], "liveRecheck": true, "liveRecheckQuestions": 5 }
```

Five gap questions asked today on four engines: at most 20 live answers, $1.20.

**Weekly tracking with your own prompts:**

```json
{ "domain": "clickup.com", "competitors": ["asana.com", "monday.com"], "compareWithLastRun": true, "liveRecheck": true, "liveRecheckQuestions": 3,
  "liveRecheckOwnQuestions": ["best project management tool for agencies", "clickup vs asana"] }
```

Schedule it weekly: each run says per question what changed since the last one. Three brands ($4.50) plus up to 20 live answers ($1.20).

**A UK audit on Google AI Overview:**

```json
{ "domain": "monzo.com", "competitors": ["revolut.com", "starlingbank.com"], "country": "GB", "language": "en", "platforms": ["google_ai_overview"] }
```

Outside the United States the index holds Google AI Overview answers only.

### 📡 Live status & storage records

| Record | What it holds |
|---|---|
| `status.html` | Live status page: progress, then questions audited, gaps and cost |
| `RUN_SUMMARY` | Domains, questions, gaps, brands charged, prices and why the run stopped |
| `USER_MESSAGE` | What happened and what to change — always written when no audit was saved |
| `FREE_LIMITS_APPLIED` | Free-plan limits that applied to this run |
| `SKIPPED_ITEMS` | Competitor lines not used, and why (not a domain, your own domain, more than 5, free plan, maximum cost) |

Every delivered audit is also kept, for **Compare with my last run**, in a key-value store named `av-history-…` in your account's Storage: one record per domain, country and language, holding which brands each answer named — not the answer texts. It is kept whether the option is on or off, from version 0.0.7, so the first comparison is ready when you switch it on. Delete the store to start over. The sample audit is never kept.

The Output tab links to the audit, the gaps and these records.

### 🤖 Programmatic / API use

Run it from the Apify API, the CLI, a schedule or an AI agent. The first row is the summary, so one row gives the answer.

```bash
curl -X POST "https://api.apify.com/v2/acts/afanasenko~ai-visibility-audit/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain":"clickup.com","competitors":["asana.com","monday.com"]}'
```

AI agents can call the Actor through Apify's MCP server with a request like *"Which AI search questions name asana.com and not clickup.com?"*. Export the dataset as JSON, CSV or Excel.

### 💡 Tips & Best Practices

#### Choose the right competitors

- Add the rivals your buyers compare you with, not the biggest names: gaps are found per competitor.
- Each brand found is one charge, so start with two or three.

#### Read the gaps by platform

- Read `gapPlatforms`, not only `isGap`: you can be named on ChatGPT and missing on Google AI Overview.
- `brandsInOrderAiOverview` and `brandsInOrderChatgpt` show who is named first.

#### Check the age of an answer

- `lastSeen` shows when the index last saw the answer.
- Before acting on an old gap, run the live re-check.

#### Help the audit recognise your brand

- If your brand name is a common word, add it under **Brand names** so it is matched as you write it.
- Use `topCitedDomains` to find the sites worth a mention or a guest post.

### ❓ FAQ

**How do I find which questions AI answers name my brand for?** Enter your domain and run the audit. The questions come from real AI answers; you do not write prompts.

**How do I find where competitors are recommended and I am not?** Add competitor domains. Each gets its own gap search, re-read answer by answer.

**Is there a free AI visibility checker?** Yes: the free plan audits your domain against one competitor on up to 20 questions, once a month, from your free platform credits.

**How much does one audit cost?** $1.50 per brand found: your brand and two competitors cost $4.50.

**Which AI platforms does it cover?** The question discovery covers ChatGPT (United States, English) and Google AI Overview. The live re-check also asks Perplexity and Google AI Mode.

**Why is ChatGPT empty for my country?** The index holds ChatGPT answers for the United States in English only. Elsewhere the audit reads Google AI Overview answers and says so in `notes`.

**How old are the answers?** An index answer can be months old; `firstSeen` and `lastSeen` show its dates. The live re-check shows today's answer for the top questions.

**How is share of voice counted?** Answers in the whole index that name each brand, per platform, corrected by how many of the brand's own top answers really name it (`confirmedInSample` / `sampleSize`).

**What is AI search volume?** An estimate of how often the question is asked to AI each month; `monthlySearches` is its history.

**Why was an answer left out?** On re-reading, it did not name the brand — for example «asana» the yoga pose. A plain dictionary word counts only next to the brand's citation or another audited brand. Left-out answers are counted in `unconfirmedAnswersDropped`.

**What happens if I leave the domain empty?** The run announces a sample audit of clickup.com against asana.com on up to 20 questions. The sample is not charged and runs once a month per account.

**Is this an alternative to AI visibility trackers?** It answers the first question: which questions matter. Run on a schedule with **Compare with my last run** on, it also shows what changed in those answers since the last audit, and your own questions in the live re-check follow the prompts you care about.

**Can I add my own prompts?** Yes, up to 10, in **Your own questions** under Live re-check. They are asked live on the engines you chose, before the top questions, and charged like every live answer ($0.06 per answer received). Each becomes its own row with `questionSource: "own"`.

**How do I see what changed since my last audit?** Switch on **Compare with my last run**. Each question row gets `sinceLastRun`, and the summary row lists the questions where you are now named or no longer named and the gaps opened or closed. It compares with the last audit of the same domain in the same country and language; a competitor you added since is not reported as "appeared". It is free. Two audits started at the same moment may compare with the same earlier one.

### 🔗 Related actors

| Actor | Purpose |
|---|---|
| [Keyword Search Volume](https://apify.com/afanasenko/keyword-search-volume) | Google search volume, CPC and difficulty for the same questions |
| [Backlink Scraper](https://apify.com/afanasenko/backlink-scraper) | The backlinks of the sites the AI cites most |

### 🛟 Support & feedback

1. Open the **Issues** tab of this Actor with your run link. We read every one.
2. Include your domain, competitors, country and language so the audit can be checked.
3. Leave a review if the audit helped you.

### ⚖️ Is it legal to audit AI search visibility?

The audit reads published AI answers and their sources. Use the results for lawful research. See [Apify's guidance on web scraping](https://blog.apify.com/is-web-scraping-legal/).

# Changelog

This Actor's version history is a separate document: https://apify.com/afanasenko/ai-visibility-audit/changelog.md

# Actor input Schema

## `domain` (type: `string`):

The brand to audit, as its website domain, e.g. clickup.com. A full URL works too.

## `competitors` (type: `array`):

Up to 5 competitor domains, one per line, e.g. asana.com. Each one adds its gap questions: where it is named and you are not. Each brand that appears in at least one question is charged once.

## `country` (type: `string`):

The market whose AI answers are read. ChatGPT answers exist for the United States only; every country has Google AI Overview answers.

## `language` (type: `string`):

The language of the answers. Must be one the country has answers in (English for the United States).

## `platforms` (type: `array`):

Which AI answers to audit. Leave both for the full picture.

## `maxQuestions` (type: `integer`):

How many AI search questions to return, highest AI search volume first. Up to 100 per audit; the price is per brand found, not per question.

## `liveRecheck` (type: `boolean`):

Also ask the top questions right now on ChatGPT, Perplexity, Google AI Overview and Google AI Mode, gap questions first. Index answers can be months old; this shows today's answer. Charged per live answer received.

## `liveRecheckQuestions` (type: `integer`):

How many of the top questions to ask live (1–10).

## `liveRecheckEngines` (type: `array`):

The engines asked live. Each answer received is one live answer charge.

## `liveRecheckOwnQuestions` (type: `array`):

Questions you write, one per line (up to 10, 3–300 characters), asked live on the same engines before the top questions — for example the prompts your customers type. Needs Re-check top questions live on. Each answer received is one live answer charge, like every live answer; the audit's own questions still come from the index. Each one becomes its own row (questionSource "own") with the engines' answers.

## `compareWithLastRun` (type: `boolean`):

Adds, on every question row, what changed since your last audit of the same domain in the same country and language: brands that appeared or disappeared from each AI answer, your position before and now, gaps opened or closed — and a list of those changes in the summary row. Free: nothing extra is fetched or charged. Every audit is kept for this in a key-value store named av-history-… in your Storage, from version 0.0.7; delete it to start over.

## `brandNames` (type: `array`):

Only if a brand goes by a name its domain does not show: one line per brand, «domain = Name, Other name», e.g. «hey.com = HEY». By default the name is read from the domain.

## Actor input object example

```json
{
  "competitors": [],
  "country": "US",
  "language": "en",
  "platforms": [
    "chatgpt",
    "google_ai_overview"
  ],
  "maxQuestions": 100,
  "liveRecheck": false,
  "liveRecheckQuestions": 10,
  "liveRecheckEngines": [
    "chatgpt",
    "perplexity",
    "google_ai_overview",
    "google_ai_mode"
  ],
  "liveRecheckOwnQuestions": [],
  "compareWithLastRun": false,
  "brandNames": []
}
```

# Actor output Schema

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

No description

## `gaps` (type: `string`):

No description

## `liveStatus` (type: `string`):

No description

## `userMessage` (type: `string`):

What happened this run and what to change — written on every run that saved no audit, and on free-plan, sample and first-paid runs.

## `runSummary` (type: `string`):

Domains, questions, gaps, charges and why the run stopped.

## `freeLimitsApplied` (type: `string`):

Free-plan limits that affected this run. Empty on paid plans.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("afanasenko/ai-visibility-audit").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("afanasenko/ai-visibility-audit").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 '{}' |
apify call afanasenko/ai-visibility-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afanasenko/ai-visibility-audit"
        }
    }
}
```

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/9B3sscDR2bfWdI1fY/builds/PvZOIRNTsevAeCHzD/openapi.json
