# AI Visibility Monitor: ChatGPT, Perplexity, Claude, Gemini (`donrulezz/ai-answer-engine-monitor`) Actor

Track whether ChatGPT, Perplexity, Claude, Gemini, Grok, Llama and Mistral recommend your brand. No API keys needed: answers with live web search, cited sources, rank, competitors, sentiment, share of voice. $0.01/answer + AI usage at cost.

- **URL**: https://apify.com/donrulezz/ai-answer-engine-monitor.md
- **Developed by:** [Ashish Agarwal](https://apify.com/donrulezz) (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 $7.00 / 1,000 answer analyseds

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 Visibility Monitor: ChatGPT, Perplexity, Claude, Gemini, Grok (no API keys)

Find out whether AI assistants recommend **your brand** when buyers ask them for a product or service, and which
competitors and sources they use instead. This Actor asks **ChatGPT (OpenAI), Perplexity, Claude, Gemini, Grok,
Llama (Meta AI) and Mistral** your buyers' questions with **live web search**, with **no API keys needed** (AI usage
runs through Apify's own OpenRouter actor and is billed at cost), then measures every answer:

- **Brand mentioned?** And in which position among all brands in the answer.
- **Rank in the list**: answers to "best X for Y" are usually lists; you get your list position (1 = top pick).
- **Your site cited?** Every cited URL and domain, and whether your domain is among them.
- **Competitors**: mentioned or not, rank, citations, for each competitor you list.
- **Sentiment** toward your brand (positive / neutral / negative / mixed) with a one-line reason.
- **Share of voice per engine**, top cited domains, and the questions where you are missing (free summary + HTML report).
- **AI crawler access** (free): which AI crawlers and answer fetchers your robots.txt blocks (OAI-SearchBot, GPTBot,
  ClaudeBot, PerplexityBot, Google-Extended...) and whether you have an /llms.txt — blocked crawlers can't cite your pages.

No browser scraping of chatgpt.com or perplexity.ai: model APIs only (directly or through Apify's OpenRouter actor), so
no CAPTCHAs, no timeouts, no terms risk.

### Input

```json
{
  "prompts": ["best project management software for small teams", "Asana alternatives that are cheaper"],
  "brand": "ClickUp | clickup.com",
  "competitors": ["Asana | asana.com", "Monday.com | monday.com", "Trello | trello.com"],
  "engines": ["openai", "perplexity", "anthropic", "gemini"],
  "repeats": 2,
  "country": "US"
}
```

- **No questions yet?** Leave `prompts` empty and set `category` (e.g. "project management software for small agencies"):
  typical buyer questions are written for you for free, never naming your brand, and saved as `generated-prompts`.
- **brand / competitors**: `Name | domain | alias1, alias2`. The domain is used for the "cited" check; aliases catch
  other spellings. Matching is case-insensitive and whole-word ("Acme" does not match "Acmeville").
- **engines**: `openai` (ChatGPT models), `perplexity` (Sonar), `anthropic` (Claude), `gemini`, `grok` (xAI), `llama`
  (Meta AI's models), `mistral` (Le Chat's models) — all with live web search — and `deepseek` (model knowledge only).
- **repeats**: AI answers vary between runs; asking 2-3 times shows how stable your visibility is.
- **No API keys needed**: all web-search engines run through Apify's own OpenRouter actor, which bills the
  AI usage to your Apify account at OpenRouter's price (about $0.01 per answer with web search on paid Apify plans;
  Apify charges 10x on its free plan). Prefer your own keys? Add them and you pay the provider directly.

### Output

One dataset item per answer:

```json
{
  "engine": "perplexity",
  "prompt": "best project management software for small teams",
  "brandMentioned": true,
  "brandMentionOrder": 3,
  "brandListRank": 3,
  "brandCited": false,
  "competitors": [{"name": "Asana", "mentioned": true, "mentionOrder": 1, "listRank": 1, "citedCount": 1}],
  "brandsInOrder": ["Asana", "Monday.com", "ClickUp"],
  "citedDomains": ["asana.com", "g2.com", "zapier.com"],
  "sentiment": "positive",
  "sentimentReason": "Recommended as the most flexible option for small teams.",
  "answer": "...",
  "citations": [{"url": "https://www.g2.com/...", "title": "..."}]
}
```

The key-value store holds `summary` (JSON) and `report.html`: per engine, brand visibility %, average list rank, how
often your site is cited, share of voice against competitors, the top cited domains (the sites to get mentioned on),
and the questions where your brand is missing.

### Pricing

> On Apify's **free plan**, AI usage through Apify's OpenRouter actor is billed at 10x (roughly $0.10-0.20 per
> web-search answer); on paid plans it is about $0.01. Start with a few questions to see your cost.

$0.01 per answer analysed (brand mention, rank, citations, competitors, sentiment, summary and report
included), plus the AI usage itself, billed by Apify's OpenRouter actor at cost (or by your provider if you use your
own key). Failed calls are free, and the run stops at your spending limit. Compare: browser-based ChatGPT/Perplexity
scrapers on the Store charge around $0.20 per answer.

### Good to know

- API answers can differ from what a logged-in user sees in the consumer apps (no personal history or exact
  location). They are consistent and repeatable, which makes them good for tracking change over time.
- Schedule the Actor weekly with the same questions: each run compares itself with the previous one for the same brand
  (`changesSincePreviousRun` in the summary: visibility and citation points, rank change, questions newly won or lost).
- The top cited domains show where to earn mentions (review sites, listicles, communities) to appear in AI answers.

### FAQ

**How do I check if ChatGPT recommends my brand?**
Add the questions your buyers ask ("best X for Y", "X alternatives"), your brand and competitors, and run the Actor. Each
answer shows whether you were mentioned, your position in the list and which sites were cited.

**How is this different from scraping ChatGPT or Perplexity?**
It uses the providers' official APIs with web search, so there are no CAPTCHAs, browser timeouts or terms-of-service
risks, and results are repeatable for tracking over time. API answers can differ slightly from the consumer apps, which
add personal history and exact location.

**What is share of voice in AI answers?**
Of all mentions of your brand and the competitors you list, the percentage that are yours, per engine. The summary also
shows how often your own site is cited and which domains the engines cite most.

**How do I improve my visibility in AI answers (GEO)?**
Look at the top cited domains and the questions where you are missing: those review sites, lists and communities are
where AI engines get their recommendations, so earning mentions there helps.

**How often should I run it?**
Weekly with the same questions works well (use Apify Schedules); use `repeats` 2-3 because AI answers vary.

### More tools from the same author

- [Google Merchant Center Q\&A Writer](https://apify.com/donrulezz/merchant-center-qa-writer): write the new question_and_answer attribute for every product, as a ready supplemental feed.
- [Shopify Script Tag Shutoff Scanner](https://apify.com/donrulezz/shopify-script-tag-scanner): which apps on a Shopify store stop on 1 March 2027, and legacy customer accounts.
- [PayPal Legacy Button Finder](https://apify.com/donrulezz/paypal-legacy-button-finder): every old PayPal Buy Now / Add to Cart button before PayPal retires them.
- [SSL Root Certificate Distrust Checker](https://apify.com/donrulezz/root-certificate-distrust-checker): which sites, APIs and mail servers break when Mozilla removes 19 roots on 15 April 2027.
- [Azure Classic CDN & Front Door Retirement Checker](https://apify.com/donrulezz/azure-classic-cdn-front-door-checker): hostnames and page assets still on Front Door (classic) or azureedge.net.
- [Drupal Version & End-of-Life Checker](https://apify.com/donrulezz/drupal-version-eol-checker): which sites run Drupal 10 (end of life 9 December 2026) or older.
- [Website 2027 Breakage Audit](https://apify.com/donrulezz/website-2027-breakage-audit): every 2026-2027 deadline (certificates, Shopify, PayPal, Azure, Drupal, PHP) in one report per site.

*ChatGPT and OpenAI, Perplexity, Claude and Anthropic, Gemini and Google, DeepSeek are trademarks of their owners. This Actor is independent and not affiliated with or endorsed by any of them.*

# Actor input Schema

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

One question per line, the way a buyer would type it into ChatGPT or Perplexity, e.g. 'best project management tool for a 10-person agency'. Leave empty and fill in Category to have them written for you. Tip: on Apify's free plan, AI usage through Apify's OpenRouter actor costs 10x (roughly $0.10-0.20 per web-search answer), so start with 2-3 questions.

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

e.g. 'project management software for small agencies'. Used only when Questions is empty: typical buyer questions are generated for free (they never name your brand).

## `promptCount` (type: `integer`):

Only with Category.

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

Name, optionally followed by '| domain | aliases', e.g. 'ClickUp | clickup.com | Click Up'. The domain is used to check whether your site is cited.

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

Same format as the brand, one per line: 'Asana | asana.com'.

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

Works out of the box: ChatGPT (OpenAI models with web search), Perplexity (Sonar, web search), Claude, Gemini, Grok, Llama (Meta AI) and Mistral (with web search) run through Apify's own OpenRouter actor, which bills the AI usage to your Apify account at OpenRouter's price (about $0.01 per answer on paid plans; Apify charges 10x on its free plan). Or add your own API keys below. DeepSeek = model knowledge only, no live web.

## `repeats` (type: `integer`):

AI answers vary; 2-3 repeats show how stable your visibility is.

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

Optional. Approximate searcher location for engines that support it (OpenAI, Claude), e.g. US, GB, DE.

## `sentiment` (type: `boolean`):

positive / neutral / negative / mixed with a one-line reason, for answers that mention you. Free.

## `compareWithPreviousRun` (type: `boolean`):

Keeps the last summary per brand in a key-value store named 'ai-visibility-history' in your account, so scheduled runs show the change: visibility and citation points, rank change, questions newly won or lost.

## `checkCrawlerAccess` (type: `boolean`):

Free: reads your domain's robots.txt and reports which AI crawlers and answer fetchers (OAI-SearchBot, GPTBot, ClaudeBot, PerplexityBot, Google-Extended...) are blocked, and whether /llms.txt exists.

## `openaiApiKey` (type: `string`):

Optional. With your own key you pay the provider directly and no OpenRouter usage is billed.

## `perplexityApiKey` (type: `string`):

Optional. With your own key you pay the provider directly and no OpenRouter usage is billed.

## `anthropicApiKey` (type: `string`):

Optional. With your own key you pay the provider directly and no OpenRouter usage is billed.

## `geminiApiKey` (type: `string`):

Optional. With your own key you pay the provider directly and no OpenRouter usage is billed.

## `maxConcurrency` (type: `integer`):

How many questions are sent at the same time.

## Actor input object example

```json
{
  "prompts": [
    "best project management software for small teams",
    "Asana alternatives that are cheaper"
  ],
  "promptCount": 10,
  "brand": "ClickUp | clickup.com",
  "competitors": [
    "Asana | asana.com",
    "Monday.com | monday.com",
    "Trello | trello.com"
  ],
  "engines": [
    "deepseek"
  ],
  "repeats": 1,
  "sentiment": true,
  "compareWithPreviousRun": true,
  "checkCrawlerAccess": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `report` (type: `string`):

Per engine: brand visibility, average rank, citations, share of voice, top cited domains.

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

Same as the report, plus the questions where your brand is missing.

## `overview` (type: `string`):

One row per answer.

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

Full answers and citations.

# 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": [
        "best project management software for small teams"
    ],
    "brand": "ClickUp | clickup.com",
    "competitors": [
        "Asana | asana.com",
        "Monday.com | monday.com",
        "Trello | trello.com"
    ],
    "engines": [
        "deepseek"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("donrulezz/ai-answer-engine-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 = {
    "prompts": ["best project management software for small teams"],
    "brand": "ClickUp | clickup.com",
    "competitors": [
        "Asana | asana.com",
        "Monday.com | monday.com",
        "Trello | trello.com",
    ],
    "engines": ["deepseek"],
}

# Run the Actor and wait for it to finish
run = client.actor("donrulezz/ai-answer-engine-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 '{
  "prompts": [
    "best project management software for small teams"
  ],
  "brand": "ClickUp | clickup.com",
  "competitors": [
    "Asana | asana.com",
    "Monday.com | monday.com",
    "Trello | trello.com"
  ],
  "engines": [
    "deepseek"
  ]
}' |
apify call donrulezz/ai-answer-engine-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,donrulezz/ai-answer-engine-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/QYbbyk2VwzftFHfdm/builds/Y2Q0wil2t0gsbtzqo/openapi.json
