# AI Search Visibility Tracker - ChatGPT & Gemini (`scrapewise/ai-search-visibility-tracker`) Actor

Track how Google Gemini, ChatGPT, Google AI Mode and Google AI Overviews answer your customers' questions, without login: brands mentioned and their order, domains cited with URL, title and position. GEO / AEO monitoring. US$ 0.13 per answer, errors free.

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

## Pricing

from $68.00 / 1,000 ai answer delivereds

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

## AI Search Visibility Tracker

AI Search Visibility Tracker shows **what AI assistants tell your customers about your brand**. Give it the questions people ask (best CRM for a small business, is Bitwarden reliable, HubSpot vs Salesforce) and your brand plus competitors: it asks **Google Gemini** (and, if you add them, **ChatGPT**, **Google AI Mode** and **Google AI Overviews**), without login, and returns for each answer **which brands were mentioned, in what order, and which domains were cited as sources** (URL, title, domain, position), with the full answer text. GEO / AEO (generative engine optimization) monitoring in a spreadsheet.

**US$ 0.08 per AI answer. No monthly fee, no start fee. Error rows are free.**

### At a glance

- **Price per AI answer:** US$ 0.08 (US$ 80 per 1,000; down to US$ 0.068 on Gold and above), no run start fee
- **Engines:** Google Gemini (default), plus ChatGPT, Google AI Mode and Google AI Overviews as options, all logged-out with web search
- **Brand check:** Mentioned or not, mention count, rank among the brands mentioned, cited as a source and at which position
- **Sources:** Every cited URL with title, domain and position
- **Location:** Ask from 13 countries (US, GB, CA, AU, DE, FR, ES, IT, NL, BR, MX, IN, JP)
- **Error rows:** Free, with an `errorCode`

### One real row

Gemini, question `is Bitwarden reliable`, brands `Bitwarden | bitwarden.com` and `1Password` (collected in the Apify cloud on 2026-09-30; answer and sources shortened here):

```json
{
  "engine": "gemini",
  "prompt": "is Bitwarden reliable",
  "answer": "**Yes, Bitwarden is widely considered one of the most reliable and trusted password managers available.** Cybersecurity experts and privacy advocates routinely recommend it for several key reasons:\n\n### 1. Zero-Knowledge Architecture & Strong ...",
  "answerLength": 2717,
  "sourceCount": 9,
  "sources": [
    {
      "position": 1,
      "url": "https://www.malcare.com/blog/bitwarden-review/",
      "title": "The Ultimate Bitwarden Review (2026): Is It Safe, Secure, and Worth",
      "domain": "malcare.com"
    },
    {
      "position": 2,
      "url": "https://www.reddit.com/r/degoogle/comments/1tl5l8p/is_bitwarden_actually_trustworthy_enough_to/",
      "title": "Is Bitwarden actually trustworthy enough to switch from KeePass?",
      "domain": "reddit.com"
    },
    {
      "position": 3,
      "url": "https://www.pcmag.com/reviews/bitwarden",
      "title": "Bitwarden Review: A Feature-Filled Free Password Manager - PCMag",
      "domain": "pcmag.com"
    },
    {
      "...": "6 more"
    }
  ],
  "citedDomains": [
    "malcare.com",
    "reddit.com",
    "pcmag.com",
    "bitwarden.com",
    "passwordmanager.com",
    "trustpilot.com"
  ],
  "webSearchUsed": true,
  "brands": [
    {
      "brand": "1Password",
      "mentioned": true,
      "mentionCount": 1,
      "firstMentionOffset": 2528,
      "firstMentionRank": 2,
      "cited": false,
      "citationPosition": null
    },
    {
      "brand": "Bitwarden",
      "mentioned": true,
      "mentionCount": 11,
      "firstMentionOffset": 7,
      "firstMentionRank": 1,
      "cited": true,
      "citationPosition": 4
    }
  ],
  "brandsMentioned": [
    "1Password",
    "Bitwarden"
  ],
  "brandsCited": [
    "Bitwarden"
  ],
  "model": "Gemini (logged-out)",
  "country": "US",
  "language": "en",
  "responseSeconds": 5.9,
  "scrapedAt": "2026-09-30T20:25:38Z"
}
```

### What you can do with it

- **AI share of voice:** how often your brand shows up next to competitors for the questions that matter in your market.
- **Citation tracking:** which pages and domains the AI trusts for your category, so you know where to earn coverage.
- **GEO / AEO reporting:** run the same question set every week or month and chart the change.
- **Market research:** which brands AI recommends first for "best X for Y" questions, by country.

### Input

| Field | What it does |
|---|---|
| `prompts` | Short search-style questions, up to 300 characters each |
| `engines` | `gemini` (default), `chatgpt`, `google_ai_mode`, `google_ai_overview`, any mix |
| `brands` | Your brand and competitors: a name (`HubSpot`), a domain (`hubspot.com`) or both (`HubSpot \| hubspot.com`) |
| `country` | Where the questions are asked from (IP location). Default `US` |
| `language` | Interface language. Default `en` |

```json
{
  "prompts": ["What is the best CRM for a small business?", "HubSpot vs Salesforce for startups"],
  "engines": ["gemini", "google_ai_overview"],
  "brands": ["HubSpot | hubspot.com", "Salesforce | salesforce.com", "Pipedrive"],
  "country": "US"
}
```

This Actor is built for brand-visibility questions. Content generation requests (write, generate, translate, code...) and prompts over 300 characters are returned as free `INVALID_INPUT` rows.

### Output fields

`engine`, `prompt`, `answer`, `answerLength`, `sourceCount`, `sources` (`position`, `url`, `title`, `domain`), `citedDomains`, `webSearchUsed`, `brands` (`brand`, `mentioned`, `mentionCount`, `firstMentionOffset`, `firstMentionRank`, `cited`, `citationPosition`), `brandsMentioned`, `brandsCited`, `model`, `country`, `language`, `responseSeconds`, `scrapedAt`.

A brand counts as **mentioned** when its name or domain appears in the answer text (whole word, any case). It counts as **cited** when one of the sources is on its domain (or, if you gave only a name, on a domain that contains it). `firstMentionRank` 1 means it was the first of your brands named in the answer.

#### Error codes (never charged)

| errorCode | Meaning |
|---|---|
| `INVALID_INPUT` | Prompt too long, a content generation request, or an unknown engine |
| `BLOCKED` | The engine did not answer after retries; run again |
| `NO_AI_ANSWER` | Google showed no AI Overview for that question (it does not show one for every search) |
| `NOT_REACHED`, `UNEXPECTED` | The run timeout arrived, or something unforeseen broke; only that prompt is lost |

### Pricing

| Event | Price |
|---|---|
| AI answer delivered | US$ 0.08 |

100 questions cost US$ 8. Error rows are free, and there is no Apify compute bill on top.

### Limitations

- Answers are what a logged-out visitor sees. AI answers change from one run to the next; track trends over several runs rather than a single answer.
- Questions are asked one at a time on each engine, with a short pause between them: about 10 to 15 seconds per Gemini answer, 15 to 30 seconds per Google AI Overviews or AI Mode answer and 30 to 60 seconds per ChatGPT answer. Gemini runs side by side with the others; ChatGPT, Google AI Mode and Google AI Overviews run one after the other.
- Those three engines need more memory: the default 2 GB of run memory is right for them. Below 1 GB their rows come back as free `INVALID_INPUT` with a note to raise Memory in the run options.
- Google AI Mode answers most reliably from the US. From other countries some of its rows may come back as free `BLOCKED`.
- Perplexity and Microsoft Copilot are not included: Perplexity asks logged-out visitors to sign up instead of answering, and the Copilot chat asks them to sign in.
- This Actor reads public answers only and respects the sites' terms.

### FAQ

**Do I need an account or API key for ChatGPT, Gemini or Google?**
No. Every engine is asked logged-out, as a visitor sees it, through the Apify proxy.

**What does a run cost?**
US$ 0.08 per AI answer delivered (one question on one engine), with no start fee. 100 questions on one engine cost US$ 8; the same 100 on two engines are 200 answers. Error rows are free, and there is no Apify compute bill on top.

**Which engines can I track?**
Set `engines` to any mix of `gemini` (default), `chatgpt`, `google_ai_mode` and `google_ai_overview`. Perplexity and Microsoft Copilot are not included, because they ask logged-out visitors to sign up or sign in.

**How is a brand counted as mentioned or cited?**
Mentioned when its name or domain appears in the answer text (whole word, any case). Cited when one of the sources is on its domain. `firstMentionRank` 1 means it was the first of your `brands` named in the answer.

**Why did a question come back as `NO_AI_ANSWER`?**
Google does not show an AI Overview for every search. That row is free.

**Can I track changes over time?**
Yes. Run the same `prompts` and `brands` every week or month and chart the change. AI answers vary from run to run, so trends over several runs say more than a single answer.

### Changelog

- **2026-10-17:** FAQ in this page.
- **2026-10-09:** Google AI Mode (`google_ai_mode`) and Google AI Overviews (`google_ai_overview`) added as optional engines, same output and price. A question with no AI Overview comes back as a free `NO_AI_ANSWER` row.
- **2026-10-09:** ChatGPT added as an optional engine (`engines: ["gemini", "chatgpt"]`). Default stays Gemini only, same output and price.
- **2026-09-30, 0.1:** first release. Google Gemini answers, cited sources with position, brand mention and citation checks, 13 countries, free error rows.

# Actor input Schema

## `prompts` (type: `array`):

Short search-style questions your customers would ask an AI assistant, up to 300 characters each (best CRM for a small business, is Bitwarden reliable, HubSpot vs Salesforce). Each question is asked once on each engine, in a fresh chat. Content generation requests (write, generate, translate...) are rejected for free.

## `engines` (type: `array`):

Which AI engines to ask. Each question on each engine is one answer. Gemini is the default; add ChatGPT, Google AI Mode or Google AI Overviews to also get what they answer (these run one after the other and need at least 1 GB of run memory). Google does not show an AI Overview for every search: those questions come back as free NO_AI_ANSWER rows.

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

Your brand and competitors. A name (HubSpot), a domain (hubspot.com) or both separated by | (HubSpot | hubspot.com). For each answer you get whether the brand was mentioned, how often, its rank among the brands mentioned, and whether its domain was cited as a source.

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

The country the questions are asked from (IP location). AI answers and cited sources change by country.

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

Interface language sent to Gemini and Google. The answer usually follows the language of the prompt.

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

Keep Apify Proxy on (datacenter, included in the price).

## Actor input object example

```json
{
  "prompts": [
    "What is the best CRM for a small business?"
  ],
  "engines": [
    "gemini"
  ],
  "brands": [
    "HubSpot | hubspot.com",
    "Salesforce | salesforce.com",
    "Pipedrive"
  ],
  "country": "US",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "prompts": [
        "What is the best CRM for a small business?"
    ],
    "engines": [
        "gemini"
    ],
    "brands": [
        "HubSpot | hubspot.com",
        "Salesforce | salesforce.com",
        "Pipedrive"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/ai-search-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 = {
    "prompts": ["What is the best CRM for a small business?"],
    "engines": ["gemini"],
    "brands": [
        "HubSpot | hubspot.com",
        "Salesforce | salesforce.com",
        "Pipedrive",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/ai-search-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 '{
  "prompts": [
    "What is the best CRM for a small business?"
  ],
  "engines": [
    "gemini"
  ],
  "brands": [
    "HubSpot | hubspot.com",
    "Salesforce | salesforce.com",
    "Pipedrive"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/ai-search-visibility-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/ai-search-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/B3Nz3WSEwr44aowbA/builds/eeuWrHS3zXTAyqhKI/openapi.json
