# AI Share of Voice — ChatGPT, Perplexity, Gemini (GEO) (`fuze/ai-share-of-voice`) Actor

Track your brand's share of voice across ChatGPT, Perplexity, Gemini & Google AI Overviews — confidence scoring, competitor comparison and citation-source mining. Pairs with the Fuze AI Search Visibility Platform for the full GEO report. Reliable, no API keys.

- **URL**: https://apify.com/fuze/ai-share-of-voice.md
- **Developed by:** [Fredrik Hansson](https://apify.com/fuze) (community)
- **Categories:** AI, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $44.00 / 1,000 prompt × engine checkeds

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 Share of Voice — Multi-Engine GEO Tracker

Track how visible your brand is across **AI answer engines** for the buyer questions that matter — with **confidence scoring**, competitor share of voice, citation-source mining, and ready-to-publish content to close the gaps.

AI answers are the new search results, and they change every day. Most GEO tools take a single snapshot of a non-deterministic engine and report a number you can't trust. This one **samples each question N times** and reports a visibility score **with a confidence rating** — the credibility gap the incumbents fall into.

![AI Share of Voice — Multi-Engine GEO Tracker — input and sample output](https://datatools-hub.vercel.app/actor-shots/ai-share-of-voice.png)

### Quick start

1. **Fill in the input** — set the fields in the input tab (prefilled with a working example).
2. **Click Start** — the Actor runs and writes one record per item to the dataset.
3. **Get your data** — export to **JSON, CSV or Excel**, or pull it via the API.

### 👉 Make this continuous with Citely

This actor gives you a **one-time snapshot**. [**Citely**](https://datatools-hub.vercel.app/citely) turns it into an **always-on SEO + AEO system**: weekly AI-citation / share-of-voice tracking with trends, a self-learning CTR title optimizer that auto-applies to your pages, Google Search Console insights with click-collapse alarms, and JSON-LD validation. Connect once, it runs daily → **https://datatools-hub.vercel.app/citely**

### What it does

For each buyer prompt × engine, it:

1. **Samples the answer N times** → a visibility score (mention rate) with a `confidence` level and a noise flag
2. Computes **share of voice** vs. named competitors, and your average **rank** among recommended players
3. **Mines the cited sources** — which domains each engine cites (so you know where to earn a mention), flagging the ones you already own
4. For questions where you're **invisible**, optionally generates **ready-to-publish content** to help you get cited

Plus a run-level **trend report**: overall visibility, visibility by engine, top cited domains, and the content-gap list.

### Engines

Works out of the box on **OpenAI web search**. Add your own keys and these activate automatically:

| Engine | Enable with env var |
|---|---|
| OpenAI (ChatGPT-style web search) | `OPENAI_API_KEY` (included) |
| Perplexity (Sonar) | `PERPLEXITY_API_KEY` |
| Google Gemini | `GEMINI_API_KEY` |
| Google AI Overviews | `DATAFORSEO_LOGIN` + `DATAFORSEO_PASSWORD` |

All queries go through official APIs — no scraping of consumer AI UIs.

### Input

| Field | Type | Description |
|---|---|---|
| `brand` | string | The brand to track. Required. |
| `domain` | string | Your domain — flags cited sources you own. |
| `competitors` | array | Competitor names for share of voice. |
| `prompts` | array | Buyer questions (leave empty to auto-generate). |
| `promptCount` | integer | How many to auto-generate (default 5). |
| `engines` | array | Which engines to use (default `["openai"]`). |
| `samplesPerPrompt` | integer | Samples per prompt for confidence (default 5). |
| `generateGapContent` | boolean | Generate gap-closing drafts (default false). |

```json
{
  "brand": "Linear",
  "domain": "linear.app",
  "competitors": ["Jira", "Asana", "Trello"],
  "topic": "project management for software teams",
  "promptCount": 5,
  "samplesPerPrompt": 5
}
```

### Output

One record per prompt × engine:

```json
{
  "prompt": "What are the best project management tools for engineers?",
  "engine": "openai",
  "visibilityScore": 100,
  "confidence": "high",
  "shareOfVoice": 38,
  "avgBrandRank": 1,
  "competitorMentions": { "Jira": 2, "Asana": 2, "Trello": 1 },
  "citedDomains": [{ "domain": "toolradar.com", "count": 3, "youOwnIt": false }],
  "brandAbsent": false
}
```

### Pricing (pay-per-event)

| Event | When | Price |
|---|---|---|
| `prompt-engine-checked` | per prompt × engine (the N-sample batch) | $0.10 |
| `gap-content-generated` | per gap-closing content draft | $0.25 |
| `trend-report` | per run (aggregated rollup) | $1.00 |

### Who it's for

Brands, SEO/GEO agencies, performance marketers and PMMs who need to measure — and improve — their presence in AI answers.

### Notes

- Requires an OpenAI API key (`OPENAI_API_KEY`).
- **Cost control:** a daily schedule across many prompts × engines × samples adds up. Set a sensible *maximum cost per run* and start with a small prompt set.

### Related actors

- [AI Brand Visibility Tracker (GEO/AEO)](https://apify.com/fuze/ai-brand-visibility) — Track how visible your brand is in AI answer engines — are you recommended when people
- [Competitor Pulse — AI Competitor Intelligence Monitor](https://apify.com/fuze/competitor-pulse) — Watch competitors holistically — pricing, website, hiring, tech, news and
- [AI Citation Source Miner (GEO/AEO)](https://apify.com/fuze/ai-citation-miner) — Discover which websites AI answer engines cite for your category — so you know where to

# Actor input Schema

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

The brand/product name to track in AI answers (exactly as it should appear). Example: 'Linear'.

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

Optional. Your website domain — used to flag which cited sources you already own. Example: 'linear.app'.

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

Competitor brand names to compute share of voice against — one per line.

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

The questions to ask the AI engines. Leave empty to auto-generate realistic buyer-intent questions for your category.

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

If no prompts are given, how many buyer questions to auto-generate.

## `topic` (type: `string`):

Optional category hint to steer auto-generated prompts. Example: 'project management software for engineering teams'.

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

Which AI engines to check. OpenAI web-search works out of the box. Perplexity/Gemini/Google-AIO activate when you add their API keys (PERPLEXITY_API_KEY, GEMINI_API_KEY, DATAFORSEO_LOGIN/PASSWORD) — otherwise they're skipped.

## `samplesPerPrompt` (type: `integer`):

How many times to ask each prompt per engine. AI answers vary run-to-run; more samples = a visibility score you can trust (with a confidence rating). Raise to 5 for a score you can fully trust.

## `generateGapContent` (type: `boolean`):

For prompts where your brand is invisible, generate a ready-to-publish answer snippet to help you get cited. Adds a per-draft charge.

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

Market/country context for the questions (ISO code or name).

## `model` (type: `string`):

OpenAI model for prompt generation, the OpenAI engine, and gap content. gpt-4o-mini is the cost-effective default.

## Actor input object example

```json
{
  "brand": "Notion",
  "competitors": [
    "Jira",
    "Asana",
    "Trello"
  ],
  "prompts": [],
  "promptCount": 3,
  "engines": [
    "openai"
  ],
  "samplesPerPrompt": 2,
  "generateGapContent": false,
  "country": "US",
  "model": "gpt-4o-mini"
}
```

# Actor output Schema

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

All visibility and gap-content records in the default dataset.

# 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": "Notion",
    "competitors": [
        "Jira",
        "Asana",
        "Trello"
    ],
    "prompts": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("fuze/ai-share-of-voice").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": "Notion",
    "competitors": [
        "Jira",
        "Asana",
        "Trello",
    ],
    "prompts": [],
}

# Run the Actor and wait for it to finish
run = client.actor("fuze/ai-share-of-voice").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": "Notion",
  "competitors": [
    "Jira",
    "Asana",
    "Trello"
  ],
  "prompts": []
}' |
apify call fuze/ai-share-of-voice --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fuze/ai-share-of-voice"
        }
    }
}
```

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/jjnZDxtggraVjt6zU/builds/ewM3kSdavXeAd5bbw/openapi.json
