# AI Brand Visibility Tracker: ChatGPT, AI Overviews, Perplexity (`bridgeworks/ai-answer-watch`) Actor

Monitor what ChatGPT Search, Google AI Overviews, and Perplexity say about your brand. Run a prompt set on a schedule to measure share of voice vs competitors, see which domains get cited, and get webhook alerts when a mention or ranking changes. Built for GEO and answer engine optimization.

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

## Pricing

from $20.00 / 1,000 answer analyzeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AI Answer Watch: does AI recommend your brand?

Buyers ask ChatGPT, Google, and Perplexity what to buy. This Actor tells you what those AI engines actually say about **your brand**, scores your **share of voice** against competitors, extracts **which domains they cite**, and, run on a schedule, alerts you the moment anything **changes**: you appeared, you dropped, your rank moved, a competitor showed up, or the engines started (or stopped) citing your site.

Most tools in this category answer "what does AI say about me today?" once. The paid question is different: *what changed since last week, and tell me without me looking.* That is what this Actor does.

### What one run does

1. Asks your prompts (buyer-intent questions like "best travel coffee maker") to each engine you select: **ChatGPT Search**, **Google AI Overviews**, **Perplexity**.
2. Analyzes every answer deterministically: is your brand mentioned (word-boundary matching with aliases, so "Notion" never matches "notionally"), what rank is your first mention among all brands named, which competitors appear, which domains are cited, and whether YOUR domain is one of them.
3. Compares against the previous run's stored state and reports precise changes: `appeared`, `dropped`, `rank-up`, `rank-down`, `citation-gained`, `citation-lost`, `new-competitor`.
4. Optionally POSTs those changes to your webhook. No changes, no call, no noise.

Run it on an Apify **Schedule** (weekly is typical) and it becomes a standing watchtower: history accumulates, and the first run simply records your baseline.

### Try it free in 10 seconds

Press **Start** with no input at all. The Actor runs its full pipeline on a built-in sample brand with canned answers, so you can see exactly what the analysis, share-of-voice scoring, and output look like. Demo runs query nothing and are never charged.

### Output

**Dataset**: one row per engine x prompt: `brandMentioned`, `brandRank`, `competitorsMentioned`, `brandCited`, `citationDomains`, and the answer text.

**OUTPUT record**: the summary: share of voice (rank-weighted: first mention counts most), presence rate, and the change list.

### Pricing

| Event | Price |
| --- | --- |
| Run start | $0.01 |
| Answer analyzed | $0.02 per engine x prompt |

A weekly watch of 10 prompts across 3 engines costs about $0.61/week. The engines themselves are existing Apify Actors called on your account, so their per-result fees (typically a few cents) appear transparently on your bill next to this Actor's: no markup, no hidden pass-through. Demo runs are free. If your run has a spending cap, the Actor charges what the cap allows, trims the prompt list to exactly that, and says so.

### Input in 30 seconds

| Field | Notes |
| --- | --- |
| `brandName` | The brand to watch. Empty = free demo. |
| `brandAliases` | Other spellings the engines might use. |
| `brandDomains` | Your domains, to detect when engines cite you as a source. |
| `competitors` | Names to score share-of-voice against. |
| `prompts` | The questions buyers ask. Empty = three sensible defaults from your brand name. |
| `engines` | Any of ChatGPT Search, Google AI Overviews, Perplexity. |
| `webhookUrl` | POSTed only when changes are detected. |

### FAQ

**How is share of voice computed?**
Each answer's mentioned brands are rank-weighted (first mention 1.0, second 0.5, third 0.33...). Your share is your weight over the total. It rewards being the engines' first recommendation, not just being mentioned somewhere in paragraph four.

**Why deterministic matching instead of an LLM judging the answers?**
Reproducibility. A monitoring tool that scores the same answer differently on Tuesday is not a monitoring tool. Matching is word-boundary and alias-aware; the raw answer text is in every row if you want to run your own judgment on top.

**What exactly triggers the webhook?**
Any change relative to the previous run of the same brand: mention appeared or dropped, first-mention rank moved, your domain entered or left the citations, or a new competitor appeared in an answer. First run records a baseline and never alerts.

**Does it work for AI agents?**
Yes: pay-per-event pricing makes it callable through Apify's MCP server and agentic payments, and the output schema is machine-readable. An agent can watch a brand and act on the change list.

***

### More from Bridgeworks

We build small, dependable data plumbing for automations and AI agents. Every Bridgeworks Actor has a free demo run, plain-English errors, and pay-per-event pricing that AI agents can call directly.

- **[Google Sheets Import & Export](https://apify.com/bridgeworks/sheets-bridge)**: push any Apify dataset into Google Sheets (or pull a sheet back in) using service-account auth, so nothing ever expires mid-schedule.
- **[AI Answer Watch](https://apify.com/bridgeworks/ai-answer-watch)**: track what ChatGPT Search, Google AI Overviews, and Perplexity say about your brand, with share-of-voice scoring and change alerts.
- **[Job Board Monitor](https://apify.com/bridgeworks/ats-job-monitor)**: watch any company's Greenhouse, Lever, or Ashby board and get events the moment a job is added, changed, or closed.

Built by Bridgeworks: clear errors, honest metering, and nothing that expires.

# Actor input Schema

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

The brand or product to monitor, e.g. "AeroPress". Leave empty to run a FREE demo on a sample brand with canned answers: nothing is queried or charged.

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

Other spellings or names the AI engines might use (e.g. "Aero Press").

## `brandDomains` (type: `array`):

Your domains (e.g. aeropress.com), used to detect when engines CITE you as a source.

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

Competitor names to track alongside your brand for share-of-voice scoring.

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

The buyer-intent questions to ask each engine, one per entry (e.g. "best travel coffee maker"). Left empty, three sensible defaults are generated from the brand name.

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

Which AI engines to query. Each engine is an existing Apify Actor called on your account; its per-result fees are billed to you transparently by that Actor.

## `webhookUrl` (type: `string`):

Optional. POSTed with JSON when a change is detected (brand appeared/dropped, rank moved, citation gained/lost, new competitor). Silence costs nothing: no changes, no call.

## Actor input object example

```json
{}
```

# Actor output Schema

## `summary` (type: `string`):

Share of voice, presence rate, and the list of detected changes vs the previous run.

## `answers` (type: `string`):

One item per engine x prompt with mention, rank, competitor, and citation analysis.

# 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("bridgeworks/ai-answer-watch").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("bridgeworks/ai-answer-watch").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 bridgeworks/ai-answer-watch --silent --output-dataset

```

## MCP server setup

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

```

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/Qz4nfXGnjW9FbBI3a/builds/7ktOzv2kFmktyHuoa/openapi.json
