# AI Visibility Monitor: ChatGPT & Google AI Overviews (`evergreen_silvermaple/ai-visibility-monitor`) Actor

Bulk-check whether Google AI Overviews and ChatGPT mention your brand, cite your website, and which competitors they name. Replaces manual screenshots for SEO/GEO teams.

- **URL**: https://apify.com/evergreen_silvermaple/ai-visibility-monitor.md
- **Developed by:** [lianghai wu](https://apify.com/evergreen_silvermaple) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 query checks

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 Visibility Monitor: brand mentions and citations in Google AI Overviews and ChatGPT

**Check hundreds of questions at once and see whether AI answers mention your brand, cite your website, and which competitors they name. No more manual screenshots.**

Your customers now ask Google and ChatGPT questions like *"best tool for X"* and act on the AI answer without visiting ten blue links. This Actor runs your list of questions against **Google AI Overview** and **ChatGPT (with web search)** and returns one structured row per question and source:

- ✅ Did an AI answer appear at all?
- ✅ Was your brand mentioned, and how many times?
- ✅ Was your website cited as a source, and at which position?
- ✅ Which competitors were mentioned, and what is your **share of voice**?
- ✅ Every cited URL, an answer excerpt, and a link to check the answer yourself.

### Who it's for

- **SEO / GEO agencies** that report AI visibility to clients every month.
- **Brands selling internationally** that want to know how AI assistants describe them compared with local competitors.
- **Product marketers** who track whether launches, comparison pages and PR show up in AI answers.

### How to use it

1. Enter your **brand name**, plus any **aliases** (product names, alternative spellings).
2. Enter your **website domain**. `https://` and `www.` are ignored, and subdomains count.
3. Paste up to **200 questions** your customers would ask an AI.
4. Optionally list **competitors**. Leave the list empty and the Actor picks out the brands that the AI answers name most often.
5. Pick the **sources** (Google AI Overview, ChatGPT, or both) and click **Start**.

Schedule the Actor weekly or monthly in Apify to build a trend line.

#### Input example

```json
{
  "brand": "LaunchHome",
  "brandAliases": ["launchhome.app", "Launch Home"],
  "domain": "launchhome.app",
  "queries": [
    "best launchpad replacement for macOS",
    "macOS 26 launchpad alternative",
    "how to get launchpad back on macOS Tahoe",
    "best mac app launcher 2026",
    "LaunchHome vs Launchpad"
  ],
  "competitors": [],
  "sources": ["google_aio", "chatgpt"]
}
```

### Output

Each **dataset row** is one question × source. You can export it as CSV, Excel, JSON or HTML from the Storage tab:

| Field | Meaning |
|---|---|
| `query`, `source` | The question and the AI source (`google_aio` / `chatgpt`) |
| `aiAnswerPresent` | Whether an AI Overview / ChatGPT answer was returned |
| `brandMentioned`, `brandMentionCount` | Brand or alias named in the visible answer text (case-insensitive, whole word) |
| `domainCited`, `domainCitationPosition` | Your domain among the cited sources, and its 1-based position |
| `citationsCount`, `citedUrls`, `topCitedDomains` | All de-duplicated sources the answer cited, in order. Google sometimes gives only an opaque `google.com/goto` redirect; those are labelled with the publisher name and left out of domain statistics |
| `competitorsMentioned` | Competitors named in the answer, with mention counts |
| `answerExcerpt`, `checkUrl`, `fetchedAt` | Excerpt of the answer, a link to reproduce it, and the capture time |
| `status`, `error` | `ok`, `error` (the source failed after retries) or `skipped` (your budget limit was reached) |

The **key-value store** also holds:

- `results.json`: the full report, including the complete answer text, every citation, per-source summaries and share of voice.
- `summary.csv`: the same flat table as the dataset, ready for Excel.
- `OUTPUT`: the summary only (mention rate, citation rate, share-of-voice ranking, top cited domains).

#### Sample output

This is a real run for the brand **LaunchHome** (launchhome.app), a macOS Launchpad replacement: 5 questions, both sources, United States / English, captured on 30 October 2026. Competitors were left empty, so they were auto-detected.

| Query | Source | AI answer | Brand mentioned | Own-domain citation # | Citations | Competitors mentioned |
|---|---|---|---|---|---|---|
| best launchpad replacement for macOS | Google AI Overview | ✅ | ❌ | — | 13 | AppGrid, Launchie, LaunchOS |
| macOS 26 launchpad alternative | Google AI Overview | ✅ | ❌ | — | 12 | Launchie |
| how to get launchpad back on macOS Tahoe | Google AI Overview | — | ❌ | — | 0 | — |
| best mac app launcher 2026 | Google AI Overview | ✅ | ❌ | — | 3 | Raycast, Alfred |
| LaunchHome vs Launchpad | Google AI Overview | ✅ | ✅ | — | 6 | Raycast, LaunchOS |
| best launchpad replacement for macOS | ChatGPT | ✅ | ❌ | 8 | 11 | Raycast, Alfred, AppGrid, Launchie |
| macOS 26 launchpad alternative | ChatGPT | ✅ | ✅ | 3 | 3 | Raycast, AppGrid, Launchie |
| how to get launchpad back on macOS Tahoe | ChatGPT | ✅ | ❌ | — | 8 | AppGrid, LaunchOS |
| best mac app launcher 2026 | ChatGPT | ✅ | ❌ | — | 10 | Raycast, Alfred |
| LaunchHome vs Launchpad | ChatGPT | ✅ | ✅ | 1 | 3 | LaunchOS |

| Metric | Google AI Overview | ChatGPT |
|---|---|---|
| AI answer shown | 4 / 5 | 5 / 5 |
| Brand mention rate | 25% | 40% |
| Own-domain citation rate | 0% | 60% |
| Share of voice, top 3 | Raycast, Launchie, LaunchOS (22% each) | Raycast, AppGrid (21% each), LaunchHome (14%) |

In this sample, ChatGPT cites launchhome.app more often than it names the brand. Google mentions the brand only on the branded query. That is exactly the kind of gap this Actor is built to surface.

A second run five minutes later gave different answers to some of the same questions. Treat each run as a sample, and compare trends over time.

Summary metrics:

- **Brand mention rate** = answers that mention the brand ÷ answers that were shown.
- **Own-domain citation rate** = answers that cite your domain ÷ answers that were shown.
- **Share of voice** = answers that mention an entity ÷ the sum of those counts across your brand and all competitors.

### Pricing

This Actor uses **pay-per-event** pricing. You pay for each **check**, meaning one question run against one source, and only when an answer was retrieved. Failed or skipped checks are free.

| Example | Checks | Price |
|---|---|---|
| 5 questions × 2 sources | 10 | $0.50 |
| 100 questions × Google only | 100 | $5.00 |
| 200 questions × 2 sources | 400 | $20.00 |

The price is **$0.05 per check**. The Pricing tab always shows the current price. Set **Maximum cost per run** in the run options and the Actor stops before going over it.

### FAQ

**Where does the data come from?**
The data comes from third-party data provider APIs (DataForSEO), which query Google Search and ChatGPT live when your run executes. The Actor does not log into any account, and you need no API keys.

**How fresh is it?**
Each run fetches live answers. Nothing is served from a cache. Results reflect the moment of the run, for the selected location and language (default: United States, English).

**Why did a question return no AI Overview?**
Google shows AI Overviews for only some queries, and that changes over time. A missing AI Overview is a valid result and is reported as `aiAnswerPresent: false`.

**How often should I run it?**
AI answers vary from run to run and change as models and indexes update. Weekly or monthly runs on a fixed question set give the most useful trend.

**How does competitor auto-detection work?**
When you leave competitors empty, the Actor collects brand names from the brand entities that ChatGPT tags and from the bolded product names in the answers. It keeps the names that appear across several answers. For client reports, give an explicit competitor list.

**Can I track other countries or languages?**
Yes. Set `locationCode` and `languageCode` under Advanced. Coverage depends on the upstream provider.

### Important disclaimer

- The data comes from **third-party APIs**. AI answers are **non-deterministic**: the same question can get a different answer minutes later, and other users can see different answers depending on location, account and personalization.
- Mention and citation rates are **sample-based monitoring results** for the questions you supply at the time of the run. They are not a complete measure of your AI visibility.
- This Actor **does not promise or influence any ranking, mention or citation** in Google, ChatGPT or any other AI product. It only measures.
- The Actor is not affiliated with, endorsed by or sponsored by Google or OpenAI. Product names belong to their respective owners.

# Actor input Schema

## `brand` (type: `string`):

The brand to look for in AI answers (case-insensitive, whole-word match).

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

Other spellings that count as a brand mention, e.g. product names or 'Brand Inc'. Your domain is always included automatically.

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

Your website. Citations to this domain or any subdomain are counted; 'https://' and 'www.' are ignored.

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

Questions your customers ask an AI (max 200). Each query is checked once per selected source, e.g. "best launchpad replacement for macOS", "LaunchHome vs Launchpad".

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

Competitor brand names to track. Leave empty to auto-detect the brands that AI answers name most often.

## `sources` (type: `array`):

Which AI answers to check. Each query × source is one billed check.

## `locationCode` (type: `integer`):

DataForSEO location code (2840 = United States, 2826 = United Kingdom, 2276 = Germany). See https://docs.dataforseo.com/v3/serp/google/locations/

## `languageCode` (type: `string`):

Answer language, e.g. en, de, fr, ja.

## Actor input object example

```json
{
  "brand": "LaunchHome",
  "brandAliases": [
    "launchhome.app"
  ],
  "domain": "launchhome.app",
  "queries": [
    "best launchpad replacement for macOS"
  ],
  "competitors": [],
  "sources": [
    "google_aio",
    "chatgpt"
  ],
  "locationCode": 2840,
  "languageCode": "en"
}
```

# Actor output Schema

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

No description

## `summaryCsv` (type: `string`):

No description

## `fullReport` (type: `string`):

No description

## `overview` (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 = {
    "brand": "LaunchHome",
    "brandAliases": [
        "launchhome.app"
    ],
    "domain": "launchhome.app",
    "queries": [
        "best launchpad replacement for macOS"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("evergreen_silvermaple/ai-visibility-monitor").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 = {
    "brand": "LaunchHome",
    "brandAliases": ["launchhome.app"],
    "domain": "launchhome.app",
    "queries": ["best launchpad replacement for macOS"],
}

# Run the Actor and wait for it to finish
run = client.actor("evergreen_silvermaple/ai-visibility-monitor").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 '{
  "brand": "LaunchHome",
  "brandAliases": [
    "launchhome.app"
  ],
  "domain": "launchhome.app",
  "queries": [
    "best launchpad replacement for macOS"
  ]
}' |
apify call evergreen_silvermaple/ai-visibility-monitor --silent --output-dataset

```

## MCP server setup

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

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/NKiEqPPgKa5nHsQxc/builds/bDp964eksZWfT4i8e/openapi.json
