# AI Visibility Audit - Are You Named by ChatGPT & Perplexity? (`agentbuilt/ai-visibility-audit`) Actor

Ask ChatGPT, Perplexity, Gemini and Claude the questions your buyers ask, and measure how often your brand is named, who is named instead, and which sources those answers cite.

- **URL**: https://apify.com/agentbuilt/ai-visibility-audit.md
- **Developed by:** [Matthew Edward](https://apify.com/agentbuilt) (community)
- **Categories:** SEO tools, AI, MCP servers
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $60.00 / 1,000 check (chatgpt or perplexity)s

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 Visibility Audit — is your brand named by ChatGPT, Perplexity, Gemini and Claude?

Your buyers no longer start at Google. They ask an assistant "what is the best X?" and act on the answer. This Actor asks the assistants the questions your buyers actually type, and tells you what came back.

For every question, on every assistant, you get:

- **was your brand named** — the mention rate across all answers
- **was your site cited** — whether the assistant used your domain as a source, which is a different and usually much lower number
- **who was named instead** — rival brands, scored by how many separate answers named them
- **which sources the answer was built from** — the review sites, forums and articles shaping opinion in your category
- **the full answer text**, so you can read exactly what was said about you

### Why the two numbers differ

We audited Ghost (ghost.org) as a test: named in **91.7%** of answers, but ghost.org cited as a source in only **12.5%**. The assistants talk about Ghost constantly while reading Substack, Wix and WordPress pages to do it. Being talked about and being read are separate problems, and the fix for each is different.

### Input

| Field | What it does |
|---|---|
| `brandName` | The name to look for in answers, written as it normally appears |
| `domain` | Your site, used to detect citations. `linear.app`, no protocol needed |
| `category` | The category buyers search for — **not** your brand. This is what the questions are built from |
| `platforms` | `chatgpt`, `perplexity`, `gemini`, `claude`. ChatGPT and Perplexity cover most buyer behaviour |
| `prompts` | Optional. Your own questions, if you would rather track exact phrasing |
| `maxPrompts` | How many generated questions to ask each assistant (1–25, default 12) |
| `includeAnswers` | Store the full answer text in the dataset |
| `dataForSeoLogin` / `dataForSeoPassword` | Optional: bring your own DataForSEO account and pay wholesale for the model calls |

#### Example input

```json
{
  "brandName": "Linear",
  "domain": "linear.app",
  "category": "project management software for software teams",
  "platforms": ["chatgpt", "perplexity"],
  "maxPrompts": 12
}
```

### Output

One `check` row per question per assistant, plus one `summary` row:

```json
{
  "type": "summary",
  "brand": "Linear",
  "mentionRate": 66.7,
  "citationRate": 29.2,
  "byAssistant": { "ChatGPT": { "named": 11, "of": 12, "rate": 91.7 },
                   "Perplexity": { "named": 5, "of": 12, "rate": 41.7 } },
  "namedInstead": [{ "name": "Jira", "answers": 19, "shareOfAnswers": 79 },
                   { "name": "ClickUp", "answers": 16, "shareOfAnswers": 67 }],
  "sourcesCited": [{ "domain": "g2.com", "times": 17 }]
}
```

The summary is also written to the run's key-value store as `SUMMARY`.

### Pricing

Charged per **check** — one question asked of one assistant. A 12-question audit on ChatGPT and Perplexity is 24 checks. Nothing is charged for a question that fails to return an answer.

| Event | What it covers |
|---|---|
| `check` | One question on ChatGPT or Perplexity |
| `premium_check` | One question on Gemini or Claude — these models cost several times more to run, so they are billed separately rather than hidden in the average |
| `byok_check` | A check run on your own DataForSEO credentials, where you pay the model cost directly |

Start with the two default assistants. Add Gemini or Claude when you specifically need to know what those say.

### Limits and honesty notes

- Assistants are non-deterministic. The same question can return different names on different days, which is why the mention rate is measured across many questions rather than one. Re-run on a schedule to see a trend rather than a snapshot.
- Rival names are extracted from the text and require corroboration across at least two separate answers before being reported, which removes most noise but not all. A category term that looks like a brand can slip through.
- Gemini and Claude cost noticeably more per check than ChatGPT and Perplexity. Start with the default two.
- This measures what assistants say. It does not change it — for that, the answers point at the sources and the gaps, and the work is yours to do.

### Scheduling

Run it weekly with Apify Schedules to see whether the mention rate moves. The number only means something as a trend.

### About this Actor

Built and maintained by **agentbuilt** (https://agentbuilt.dev), an AI-operated studio: the code, docs and support are handled by an AI agent, with a human owner accountable for the account. If you want the gaps fixed as well as measured, that is what https://agentbuilt.dev/visibility does. Report issues in the **Issues** tab — they are triaged daily.

# Actor input Schema

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

The brand to look for in the answers, exactly as it would be written. Example: Allbirds

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

Used to detect when an assistant cites your site as a source. No protocol needed. Example: linear.app

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

The category, not the brand - this is what the questions are built from. Example: project management software for software teams

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

Which assistants to measure. ChatGPT and Perplexity cover most buyer behaviour; Gemini and Claude cost more per check.

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

Leave empty to use buyer-intent questions generated from your category. Supply your own to track exactly the questions you care about.

## `maxPrompts` (type: `integer`):

How many questions to ask each assistant when prompts are generated for you.

## `includeAnswers` (type: `boolean`):

Store each assistant's full answer in the dataset so you can read exactly what was said.

## `dataForSeoLogin` (type: `string`):

Bring your own DataForSEO account to pay wholesale for the model calls. Leave empty to use ours at the listed price.

## `dataForSeoPassword` (type: `string`):

Only used with your login above, never stored.

## Actor input object example

```json
{
  "brandName": "Linear",
  "domain": "linear.app",
  "category": "project management software for software teams",
  "platforms": [
    "chatgpt",
    "perplexity"
  ],
  "prompts": [],
  "maxPrompts": 12,
  "includeAnswers": true
}
```

# Actor output Schema

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

One item per question per assistant, plus one summary item with mention rate, citation rate, who was named instead, and the sources those answers cited.

# 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": "Linear",
    "domain": "linear.app",
    "category": "project management software for software teams"
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentbuilt/ai-visibility-audit").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": "Linear",
    "domain": "linear.app",
    "category": "project management software for software teams",
}

# Run the Actor and wait for it to finish
run = client.actor("agentbuilt/ai-visibility-audit").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": "Linear",
  "domain": "linear.app",
  "category": "project management software for software teams"
}' |
apify call agentbuilt/ai-visibility-audit --silent --output-dataset

```

## MCP server setup

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

```

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/mE7EREHxtHQEwety3/builds/Lyth9GeEO5VCiDNWO/openapi.json
