# AI Visibility Tracker (`blueskyscraper/ai-visibility-tracker`) Actor

\[from $0.0375/check] Track brand mentions in ChatGPT, Google AI Overview, AI Mode, Gemini, Perplexity and Claude: mentioned, position, cited domains, competitors, tone, snippet. Share of voice. Export, run via API or use with AI agents.

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

## Pricing

from $30.00 / 1,000 ai answer checks

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

### What is AI Visibility Tracker?

**AI Visibility Tracker** checks whether **ChatGPT, Google AI Overview, Google AI Mode, Gemini, Perplexity and Claude** mention your brand when people ask them the questions your buyers ask. You enter your brand, its domain, your competitors and a list of questions; the Actor asks every question on every platform you pick and returns **one row per question and platform**.

Each row tells you: **is the brand mentioned**, at which **position** among the tracked brands, its **rank in the list of options** the AI gave, whether the AI **cites or links your domain**, which **competitors** it named and cited, all **cited domains and URLs**, a **tone** label for the sentences that mention you, a **snippet** around the mention, and the **other brands the AI recommended** that you are not tracking yet. An optional summary row adds **share of voice** for you and every competitor.

It is a **GEO tool** (generative engine optimization) and **AI search visibility tracker** in one run: no ChatGPT account, no OpenAI, Google or Perplexity API key, no browser extension. Rows are flat JSON, ready for Google Sheets, Looker Studio, n8n, Make or an AI agent.

### What data can AI Visibility Tracker extract?

| Field | Example | What it means |
|---|---|---|
| 💬 `query` | best app for team wiki | The question asked |
| 🤖 `platformName` | ChatGPT | ChatGPT, Google AI Overview, Google AI Mode, Gemini, Perplexity or Claude |
| `brandMentioned` | true | Your brand (name, alias or domain) appears in the answer |
| `brandPosition` | 1 | Order of your first mention among tracked brands (you + competitors) |
| `brandListRank` | 1 | Your place in the list or table of options the AI gave |
| `brandMentionCount` | 3 | How many times the answer names you |
| `brandCited` | true | Your domain is among the answer's sources or links |
| `brandCitationRank` | 1 | Place of your domain among the cited domains |
| 🥊 `competitorsMentioned` | \["Obsidian", "Evernote"] | Tracked competitors the answer names |
| `competitorsCited` | \["Obsidian"] | Tracked competitors whose domain is cited |
| `sentiment` | positive | Tone of the sentences that mention you (heuristic, see FAQ) |
| `mentionSnippet` | …I'd pick Notion. It combines notes, documents… | About 320 characters around the first mention |
| 🌐 `citedDomains` | \["notion.com", "atlassian.com", "slite.com"] | Unique domains the answer cites or links |
| `citedUrls` | \["https://www.notion.com/help/wikis-and-verified-pages", …] | Cited and linked URLs (up to 40) |
| `brandsListed` | \["Notion", "Confluence", "Slite", "Nuclino", "Guru"] | Options the AI presented, in its order |
| `untrackedBrandsListed` | \["Confluence", "Slite", "Nuclino", "Guru"] | Options that are neither you nor a tracked competitor |
| `fanOutQueries` | \["best team wiki software Notion Confluence Slite …"] | Web searches ChatGPT ran to write the answer |
| `model` | gpt-5-6 | Model or surface that answered |
| `answeredAt` | 2026-10-01T14:24:07Z | When the platform produced the answer |
| `answerMarkdown` | (optional) | The complete answer with the AI's links |

Rows from Claude have `brandCited`, `citedDomains` and `citedUrls` set to null: Claude is asked without web search, so it answers from model knowledge and has no sources (see FAQ).

### 💰 How much does it cost to track brand visibility in AI search?

The Actor uses **pay per event** pricing. You pay only for AI answers that were actually checked:

| Event | Free plan | Starter (Bronze) | Scale (Silver) | Business (Gold) | When it is charged |
|---|---|---|---|---|---|
| **AI answer check** (per question × platform) | $0.05 | **$0.0375** | $0.03375 | $0.03 | One row with an AI answer, analysed for your brand and competitors |
| Share of voice summary ($, per run) | $0.25 | **$0.1875** | $0.16875 | $0.15 | Only if you switch on the summary row |

Platinum and Diamond plans pay the Business price.

What is **free**:

- no fee per run or per start;
- rows where the platform gave no answer (for example, Google showed no AI Overview for that question) — they appear with `hasAnswer: false` and the reason;
- error rows (unknown country, a question without letters, a platform that failed after retries);
- checks above your **Max checks** cap, which are never requested.

Examples on the Starter plan (Free plan in brackets):

- 2 questions × 1 platform (the prefilled demo): **$0.075** ($0.10).
- 20 questions × 4 platforms = 80 checks: **$3.00** ($4.00), plus $0.1875 ($0.25) with the share of voice summary.
- 50 questions × 6 platforms every week = 300 checks: **$11.25** ($15.00) per week.

With the $5 of monthly credit on the Apify free plan you can run about 100 checks.

The price is the same for every platform, so you can compare ChatGPT, Perplexity and Google side by side without doing per-platform arithmetic. There is no proxy or browser cost on top: the Actor runs on 256 MB and a typical run uses well under a cent of platform compute.

### How to track your brand in ChatGPT, Perplexity and Google AI Overview

1. Open AI Visibility Tracker and click **Try for free**.
2. Type **your brand** and **your domain(s)** — several domains separated by commas are fine (notion.com, notion.so).
3. Add **competitors**, one per line, as `Name | domain` (for example `Obsidian | obsidian.md`).
4. Enter the **questions** your buyers ask AI assistants, one per line. No list yet? Fill in **Category** (for example `note taking app`) and the Actor adds five template questions.
5. Pick the **AI platforms**: ChatGPT, Google AI Overview, Google AI Mode, Gemini, Perplexity, Claude.
6. Set the **country** and **language** of the answers.
7. Click **Start**. The prefilled demo (2 questions on ChatGPT) finishes in about a minute.
8. Open the **AI visibility** tab for the overview, **Citations** for sources, and **Share of voice** if you switched the summary on. Export to CSV, Excel or JSON, or schedule the run weekly to watch the trend.

### ⬇️ Input

The prefilled input, which is also what runs when you start the Actor with an empty input:

```json
{
  "brandName": "Notion",
  "brandDomain": "notion.com, notion.so",
  "competitors": ["Obsidian | obsidian.md", "Evernote | evernote.com"],
  "queries": ["best note taking app", "best app for team wiki"],
  "platforms": ["chatgpt"],
  "country": "United States",
  "language": "English"
}
```

#### Brand, domain and aliases

`brandName` is matched as a whole word. Typed with a capital letter (`Notion`), it matches "Notion" and "NOTION" but not the ordinary word "notion"; typed in lower case, it matches any case. `brandAliases` adds other names (product names, an old name). Your domain counts as a mention when the answer writes it in the text, and as a citation when it appears among the sources or links. Subdomains count (`www.notion.com`, `help.notion.com`).

#### Competitors

One per line: `Obsidian | obsidian.md`, `Obsidian (obsidian.md)`, a bare domain `obsidian.md`, or just a name. Up to 25. Without a domain a competitor is still tracked for mentions, but not for citations.

#### Questions and template questions

Up to 500 characters each, in the language you choose. Write them the way people type into ChatGPT: `best CRM for a 10-person startup`, `Notion alternatives`, `is HubSpot worth it?`. With **Category** filled in, five questions are added: *What is the best <category>?*, *Top <category> recommendations*, *<brand> alternatives*, *Is <brand> a good <category>?* and *<brand> vs <first competitor>*.

#### AI platforms

| Platform | How it is asked | Sources |
|---|---|---|
| ChatGPT | The ChatGPT app answer with web search, as a user sees it | Yes |
| Google AI Overview | The AI Overview block in Google Search results | Yes (only for questions where Google shows one) |
| Google AI Mode | Google Search AI Mode | Yes |
| Gemini | The Gemini app answer | Yes, when Gemini grounds the answer |
| Perplexity | Perplexity Sonar with web search | Yes |
| Claude | Claude Haiku 4.5 without web search | No — answers from model knowledge |

#### Country, language, cache and caps

`country` accepts a name or a two-letter code (213 countries). `language` accepts a name or a code. `cacheHours` (default 24) reuses an answer collected for the same question, platform, country and language within that many hours — useful when a scheduled run overlaps a manual one; set 0 to always ask fresh. The prefilled demo may reuse an answer up to 7 days old. `maxChecks` (default 100) caps questions × platforms.

### ⬆️ Output

One row per question and platform. A real row from the demo run (ChatGPT, United States):

```json
{
  "type": "check",
  "query": "best app for team wiki",
  "platform": "chatgpt",
  "platformName": "ChatGPT",
  "brand": "Notion",
  "hasAnswer": true,
  "brandMentioned": true,
  "brandPosition": 1,
  "brandListRank": 1,
  "brandMentionCount": 3,
  "brandCited": true,
  "brandCitationRank": 1,
  "competitorsMentioned": [],
  "competitorsCited": [],
  "sentiment": "positive",
  "mentionSnippet": "If you mean an internal team/company wiki, I'd shortlist these: App Best fit Why Notion Most teams Very flexible; wiki + docs + databases + project planning in one place. Confluence Larger/technical teams…",
  "citedDomains": ["notion.com", "atlassian.com", "slite.com"],
  "citationsCount": 4,
  "brandsListed": ["Notion", "Confluence", "Slite", "Nuclino", "Guru"],
  "untrackedBrandsListed": ["Confluence", "Slite", "Nuclino", "Guru"],
  "fanOutQueries": ["best team wiki software Notion Confluence Slite Outline wiki features 2026"],
  "model": "gpt-5-6",
  "country": "United States",
  "language": "English",
  "checkUrl": "https://chatgpt.com/?prompt=best%20app%20for%20team%20wiki",
  "answeredAt": "2026-10-01T14:24:07.000Z",
  "fromCache": false
}
```

#### Share of voice summary row

Switch on **Add share of voice summary row ($)** to get one more row (`type: "summary"`) after the checks. A real summary from one question asked on Gemini, Google AI Mode, Google AI Overview, Perplexity and Claude:

```json
{
  "type": "summary",
  "brand": "Notion",
  "checks": 5,
  "brandMentionRatePct": 100,
  "brandShareOfVoicePct": 38.5,
  "brandCitationRatePct": 25,
  "brandAvgPosition": 1.4,
  "shareOfVoice": [
    { "name": "Notion", "isYourBrand": true, "answersMentioning": 5, "mentionRatePct": 100, "shareOfVoicePct": 38.5, "answersCiting": 1, "citationRatePct": 25, "avgPosition": 1.4, "firstPlaceCount": 3 },
    { "name": "Obsidian", "isYourBrand": false, "answersMentioning": 5, "mentionRatePct": 100, "shareOfVoicePct": 38.5, "answersCiting": 0, "citationRatePct": 0, "avgPosition": 1.6, "firstPlaceCount": 2 },
    { "name": "Evernote", "isYourBrand": false, "answersMentioning": 3, "mentionRatePct": 60, "shareOfVoicePct": 23.1, "answersCiting": 0, "citationRatePct": 0, "avgPosition": 3, "firstPlaceCount": 0 }
  ],
  "byPlatform": [
    { "platformName": "Gemini", "answers": 1, "brandMentioned": 1, "brandCited": 0 },
    { "platformName": "Google AI Mode", "answers": 1, "brandMentioned": 1, "brandCited": 1 }
  ]
}
```

**Share of voice** = answers that mention a brand ÷ all tracked-brand mentions. **Citation rate** counts only platforms with web sources (Claude is excluded).

#### Rows without an answer and error rows

When a platform gives no answer — most often Google showing no AI Overview for that question — the row has `hasAnswer: false`, a `noAnswerReason`, and is free. Input problems and provider failures produce `type: "error"` rows with an `error` message, also free. A run where every row is free is a valid result, not a failure.

### Use cases for AI search visibility data

#### GEO and SEO teams

Track whether ChatGPT, Perplexity and Google AI Overview recommend you for your money keywords, which domains they cite instead of yours, and which pages to earn links or mentions on. `citedDomains` is a ready list of outreach targets.

#### Brand and product marketing

Measure **share of voice in AI** against named competitors every week, see which platform under-represents you (`byPlatform`), and read the snippet to see how you are described.

#### Competitive intelligence

`untrackedBrandsListed` shows the brands the AI recommends that you are not watching yet — the competitors your buyers actually hear about.

#### Agencies

Run one input per client on a schedule, export to Google Sheets or Looker Studio, and report AI visibility next to classic rankings.

#### AI agents and LLM apps

An agent can call the Actor through MCP with a brand and a few questions and receive flat rows with stable field names — no parsing of free text.

### Integrations

#### Apify API

```bash
curl -X POST "https://api.apify.com/v2/acts/lergassy~ai-visibility-tracker/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"brandName":"Notion","brandDomain":"notion.com","competitors":["Obsidian | obsidian.md"],"queries":["best note taking app"],"platforms":["chatgpt","perplexity"]}'
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("lergassy/ai-visibility-tracker").call(run_input={
    "brandName": "Notion",
    "brandDomain": "notion.com, notion.so",
    "competitors": ["Obsidian | obsidian.md", "Evernote | evernote.com"],
    "queries": ["best note taking app", "Notion alternatives"],
    "platforms": ["chatgpt", "google_ai_overview", "perplexity"],
    "includeShareOfVoice": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["platformName"], row["query"], row.get("brandMentioned"), row.get("brandCited"))
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('lergassy/ai-visibility-tracker').call({
    brandName: 'Notion',
    queries: ['best note taking app'],
    platforms: ['chatgpt', 'gemini'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### No-code tools and schedules

Connect the Actor to **Google Sheets, Make, n8n, Zapier, Slack** or a **webhook** from the Integrations tab. Create a **schedule** (for example every Monday) to build a weekly AI visibility trend; each run's rows carry `answeredAt`.

#### MCP server for AI agents

Add the Apify MCP server (`https://mcp.apify.com`) to Claude Desktop, Cursor or your agent and call `lergassy/ai-visibility-tracker` as a tool.

### 🤖 For AI Agents & LLM Apps

Compact reference for agents calling this Actor through the Apify MCP server or the Apify API (`lergassy/ai-visibility-tracker`).

**Purpose:** for a brand, its competitors and a list of questions, return one row per question × AI platform saying whether the brand is mentioned and cited, its position, which competitors appear and which domains are cited.

**Minimal input:**

```json
{ "brandName": "Notion", "brandDomain": "notion.com", "queries": ["best note taking app"], "platforms": ["chatgpt"] }
```

**Output:** type, query, platform, platformName, brand, hasAnswer, brandMentioned, brandPosition, brandListRank, brandMentionCount, brandCited, brandCitationRank, competitorsMentioned, competitorsCited, trackedBrandsInOrder, sentiment, sentimentScore, mentionSnippet, citedDomains, citedUrls, citationsCount, brandsListed, untrackedBrandsListed, fanOutQueries, answerLength, model, country, countryCode, language, checkUrl, answeredAt, fromCache, scrapedAt; optional answerMarkdown. Summary row (type summary): brandMentionRatePct, brandShareOfVoicePct, brandCitationRatePct, brandAvgPosition, shareOfVoice\[], byPlatform\[].

**Behaviors an agent should know:**

- `platforms` values: chatgpt, google_ai_overview, google_ai_mode, gemini, perplexity, claude; default chatgpt.
- every question runs on every platform; `maxChecks` (default 100) caps the product.
- `hasAnswer: false` rows (no AI Overview shown) and error rows are free; each answered row is one `check` event.
- AI answers vary between runs; one row is one sample, not a ranking guarantee.
- Claude rows have null citation fields (no web search).
- `sentiment` is a keyword heuristic for English answers only.

### ❓ FAQ

#### Is it legal to track brand mentions in ChatGPT and Google AI Overview?

The Actor asks public AI assistants and search engines the questions you provide and analyses the answers they give to anyone. It does not log in to user accounts or collect personal data. Using the results for marketing research is common practice, but you are responsible for how you use the data; if in doubt, consult a lawyer.

#### Do I need a ChatGPT, OpenAI, Google or Perplexity account or API key?

No. Answers are collected through a licensed data provider; you only need an Apify account.

#### How is the position calculated?

`brandPosition` orders the tracked brands (you + your competitors) by where each is first named in the answer: 1 means you are named before every competitor you listed. `brandListRank` is your place in the list or table of options the AI presented (`brandsListed`), which also counts brands you did not track. `brandsListed` is extracted from the answer's tables, numbered headings and bold list items — a heuristic that can occasionally include a generic label.

#### How is the tone (sentiment) decided?

It is a transparent keyword heuristic, not an AI judgement: in the sentences that mention your brand, praise words (best, recommended, powerful, easy…) are counted against criticism words (limited, expensive, drawbacks, learning curve…). The difference is `sentimentScore`; above zero is positive, below zero is negative. It works for English answers only and is null for other languages.

#### Why does Claude have no cited domains?

Claude is asked without web search, so the row shows what Claude says from its own training knowledge — useful for checking whether a model "knows" your brand. Web search on Claude would make each check several times more expensive.

#### Why is a Google AI Overview row empty?

Google shows an AI Overview only for some questions and in some countries. Then the row says `hasAnswer: false` with the reason and is not charged. Google AI Mode is also not available in every country; an unavailable combination returns a free error row.

#### Will I get the same answer every time?

No. AI answers change between sessions, days and locations. Track the trend over several runs and many questions rather than reading one row as a fixed ranking.

#### Can I use AI Visibility Tracker with the Apify API?

Yes — see the API, Python and JavaScript examples above. Results are available as JSON, CSV, Excel or through webhooks.

#### Can I use it through an MCP server?

Yes. Connect the Apify MCP server to Claude Desktop, Cursor or your own agent; the Actor is callable as a tool with the input shown in the agent section.

#### Can I integrate it with other apps?

Yes: Google Sheets, Make, n8n, Zapier, Slack and webhooks are available in the Integrations tab.

#### How much does one check cost?

$0.0375 per question per platform on the Starter plan, $0.03375 on Scale and $0.03 on Business and above; $0.05 on the Free plan. Rows without an answer and error rows are free, and there is no fee per run.

#### Is there one row per question?

There is one row per question **and** platform: 10 questions on 3 platforms give 30 rows. The optional summary adds one row.

### Your feedback

Missing a platform, a field or a country? Open an issue in the **Issues** tab — we read every one. If the Actor helps you, a short review helps other marketers find it.

### You might also like

| Actor | What it does |
|---|---|
| [Keyword Search Volume Checker](https://apify.com/blueskyscraper/keyword-search-volume-checker) | Google search volume, CPC, keyword difficulty and intent for keyword lists |
| [Keyword Suggestions Scraper](https://apify.com/lergassy/keyword-suggestions-scraper) | Keyword suggestions from Google, YouTube, Amazon, Bing, eBay and TikTok autocomplete |
| [Competitor Keywords Finder](https://apify.com/blueskyscraper/competitor-keywords-finder) | Every keyword a competitor domain ranks for on Google, with position, volume and traffic |
| [Bulk Domain Authority Checker](https://apify.com/blueskyscraper/bulk-domain-authority-checker) | Domain rank, backlinks, referring domains and spam score for thousands of domains |

# Actor input Schema

## `brandName` (type: `string`):

Enter the brand name exactly as people write it, e.g. Notion. Typed with a capital letter, it matches Notion and NOTION but not the word "notion"; type it in lower case to match any case.

## `brandDomain` (type: `string`):

Enter your domain, or several separated by commas, e.g. notion.com, notion.so. Used to tell whether the AI answer cites or links your website (subdomains count).

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

Add one competitor per line as <b>Name | domain</b> (e.g. Obsidian | obsidian.md), or just a name or a domain. Up to 25. Each row tells which of them the AI mentioned and cited; the share of voice summary compares you with them.

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

Enter one question or prompt per line, the way your buyers ask AI assistants: best CRM for startups, Notion alternatives, which project management tool should I use? Up to 500 characters each. Every question is asked on every selected platform (one row each).

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

Select the AI platforms to ask. Each selected platform answers every question, and each answer is one row priced the same. Google AI Overview only appears for some questions: when Google shows none, the row is free.

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

Enter the country the AI should answer from: United States, US, United Kingdom, GB, Germany, DE, India, IN, Indonesia, ID… 213 countries. Claude answers from model knowledge and ignores it.

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

Enter the answer language name or code: English, en, German, de, Spanish, es. Write your questions in the same language. The tone heuristic works for English answers only.

## `category` (type: `string`):

Optional: enter your product category, e.g. note taking app, to add 5 template questions: What is the best <category>?, Top <category> recommendations, <brand> alternatives, Is <brand> a good <category>?, <brand> vs <first competitor>.

## `brandAliases` (type: `array`):

Optional: add other names the AI may use for your brand, e.g. product names or an old name (Notion AI, Notion Calendar). Any of them counts as a brand mention.

## `includeShareOfVoice` (type: `boolean`):

Switch on to add one summary row after the checks: for your brand and each competitor, mention rate, share of voice, citation rate, average position and first-place count, plus your brand per platform. Charged once per run as a summary event.

## `includeFullAnswer` (type: `boolean`):

Switch on to add the complete answer as Markdown (with the AI's links) in the answerMarkdown field. Off by default to keep the table readable; the snippet around your brand is always included.

## `forceWebSearch` (type: `boolean`):

ChatGPT only: switch on to make ChatGPT search the web for every question, so the row has cited sources. Off (default) = ChatGPT decides itself, like for a real user.

## `cacheHours` (type: `integer`):

The same question on the same platform, country and language asked again within this many hours is answered from the last collected answer (answeredAt shows when). Set 0 to always ask fresh. Reused answers are charged like fresh ones.

## `maxChecks` (type: `integer`):

Safety cap on questions × platforms. With 20 questions and 5 platforms you need 100. Checks above the cap are skipped and not charged.

## Actor input object example

```json
{
  "brandName": "Notion",
  "brandDomain": "notion.com, notion.so",
  "competitors": [
    "Obsidian | obsidian.md",
    "Evernote | evernote.com"
  ],
  "queries": [
    "best note taking app",
    "best app for team wiki"
  ],
  "platforms": [
    "chatgpt"
  ],
  "country": "United States",
  "language": "English",
  "includeShareOfVoice": false,
  "includeFullAnswer": false,
  "forceWebSearch": false,
  "cacheHours": 24,
  "maxChecks": 100
}
```

# Actor output Schema

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

One row per question and AI platform: brand mentioned, position, brand domain cited, competitors mentioned, cited domains, tone and a snippet around the mention. Optional share of voice summary row.

# 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 = {
    "brandName": "Notion",
    "brandDomain": "notion.com, notion.so",
    "competitors": [
        "Obsidian | obsidian.md",
        "Evernote | evernote.com"
    ],
    "queries": [
        "best note taking app",
        "best app for team wiki"
    ],
    "platforms": [
        "chatgpt"
    ],
    "country": "United States",
    "language": "English"
};

// Run the Actor and wait for it to finish
const run = await client.actor("blueskyscraper/ai-visibility-tracker").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 = {
    "brandName": "Notion",
    "brandDomain": "notion.com, notion.so",
    "competitors": [
        "Obsidian | obsidian.md",
        "Evernote | evernote.com",
    ],
    "queries": [
        "best note taking app",
        "best app for team wiki",
    ],
    "platforms": ["chatgpt"],
    "country": "United States",
    "language": "English",
}

# Run the Actor and wait for it to finish
run = client.actor("blueskyscraper/ai-visibility-tracker").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 '{
  "brandName": "Notion",
  "brandDomain": "notion.com, notion.so",
  "competitors": [
    "Obsidian | obsidian.md",
    "Evernote | evernote.com"
  ],
  "queries": [
    "best note taking app",
    "best app for team wiki"
  ],
  "platforms": [
    "chatgpt"
  ],
  "country": "United States",
  "language": "English"
}' |
apify call blueskyscraper/ai-visibility-tracker --silent --output-dataset

```

## MCP server setup

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

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/PBjAlpVDRukHnI9Hd/builds/HhfSeYGaEU8aQCsG0/openapi.json
