# AI Search Visibility Tracker: ChatGPT, Gemini and More

> AI Search Visibility Tracker is an Apify actor (API) by CheapAPI Labs. Asks ChatGPT, Gemini, Claude and Perplexity about your market and records whether they mention you and which sites they cite. It costs $8.00 per 1,000 AI answers on the Apify Free plan and $4.50 on Gold, billed through your Apify account with no API key. Compared with the most used AI brand monitor on Apify Store (about 240 users): one AI answer costs $0.008 to $0.012 here and $0.08 there (Apify Store listing prices, checked September 2026).

- Page: https://cheapapilabs.com/actors/ai-search-visibility-tracker/
- Run on Apify: https://apify.com/cheapapi/ai-search-visibility-tracker
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $8.00 per 1,000 AI answers on Free, $4.50 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| AI answer, standard model | $0.008 | $0.005 | $0.0045 | $0.0045 |
| AI answer, Perplexity Sonar, Claude Haiku or Gemini 3 Flash | $0.012 | $0.012 | $0.01 | $0.0093 |
| AI answer, premium model | $0.05 | $0.05 | $0.05 | $0.05 |
| Live web search add on | $0.06 | $0.06 | $0.06 | $0.06 |
| Mentions database lookup | $0.13 | $0.13 | $0.13 | $0.13 |
| Stored AI answer mentioning your target | $0.002 | $0.002 | $0.002 | $0.002 |
| AI keyword volume batch | $0.015 | $0.015 | $0.015 | $0.015 |
| AI keyword volume result | $0.0005 | $0.0005 | $0.0005 | $0.0005 |

Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.

## Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~ai-search-visibility-tracker/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"brandName":"HubSpot","brandDomain":"hubspot.com","competitors":["Salesforce","Pipedrive","Zoho CRM"],"prompts":["What is the best CRM software for a small business?","Which CRM is easiest to use for a startup sales team?"]}'
```

## Example output row

```json
{
  "id": "62a8ca3184f069b6",
  "rowType": "answer",
  "answerStatus": "ok",
  "brand": "HubSpot",
  "prompt": "What is the best CRM software for a small business?",
  "promptType": "unbranded",
  "promptGenerated": false,
  "engine": "chatgpt",
  "engineName": "ChatGPT",
  "model": "gpt-4.1-mini",
  "modelVersion": "gpt-4.1-mini-2025-04-14",
  "mentioned": true,
  "mentionCount": 3,
  "mentionPosition": 1,
  "listRank": 1,
  "excerpt": "1. **HubSpot CRM** – Free to start, very easy to use and great for marketing teams. I recommend it for most small teams.",
  "sentiment": "positive",
  "sentimentScore": 1,
  "recommended": true,
  "visibilityScore": 10,
  "shareOfVoice": 0.6,
  "brandDomainCited": true,
  "brandCitationPosition": 1,
  "competitorsMentioned": [
    "Salesforce",
    "Pipedrive"
  ],
  "brandsInOrder": [
    "HubSpot",
    "Salesforce",
    "Pipedrive"
  ],
  "competitorMentions": [
    {
      "name": "Salesforce",
      "mentioned": true,
      "mentionCount": 1,
  …
}
```

## Fields

One row per **prompt × AI engine** (`rowType: "answer"`):

| Field | Type | Example |
|---|---|---|
| `prompt` | string | `What is the best CRM software for a small business?` |
| `promptType` | string | `unbranded` (or `branded` if the prompt names your brand) |
| `promptGenerated` | boolean | `false` (`true` when created from a topic) |
| `engine` / `engineName` | string | `chatgpt` / `ChatGPT` |
| `model` / `modelVersion` | string | `gpt-4.1-mini` / `gpt-4.1-mini-2025-04-14` |
| `mentioned` | boolean | `true` |
| `answerStatus` | string | `ok` (or `empty` / `noResponse`: charged answer without text, see Pricing) |
| `mentionCount` | integer | `3` |
| `mentionPosition` | integer | `1` (rank among all tracked brands by first appearance) |
| `listRank` | integer | `1` (item number in the AI's numbered or bulleted list) |
| `excerpt` | string | `1. **HubSpot CRM** – Free to start, very easy to use…` |
| `sentiment` / `sentimentScore` | string / number | `positive` / `1` (−1 to 1) |
| `recommended` | boolean | `true` ("I recommend", "best choice", …) |
| `visibilityScore` | number 0 to 10 | `10` |
| `shareOfVoice` | number 0 to 1 | `0.6` (your share of all brand mentions in the answer) |
| `brandDomainCited` / `brandCitationPosition` | boolean / integer | `true` / `1` |
| `competitorsMentioned` | array | `["Salesforce", "Pipedrive"]` |
| `brandsInOrder` | array | `["HubSpot", "Salesforce", "Pipedrive"]` |
| `competitorMentions` | array | `[{ "name": "Salesforce", "mentioned": true, "mentionCount": 1, "position": 2, "domainCited": false }]` |
| `citationCount` / `citedDomains` | integer / array | `2` / `["hubspot.com", "g2.com"]` |
| `citations` | array | `[{ "position": 1, "title": "HubSpot pricing", "url": "https://www.hubspot.com/pricing", "domain": "hubspot.com" }]` |
| `webSearchRequested` / `webSearchUsed` | boolean | `false` / `false` |
| `followUpSearches` | array | web searches the AI ran, when it searched |
| `answer` / `answerLength` | string / integer | full answer text / `545` |
| `webSearchCountry` / `webSearchCity` | string | `US` / `null` |
| `answeredAt` / `scrapedAt` | ISO date | `2026-09-27T16:16:13.000Z` |
| `brand` / `rowType` | string | `HubSpot` / `answer` |
| `id` | string | `62a8ca3184f069b6` (stable: same brand + prompt + engine + model + run date → same id) |

`domainCited` (per competitor) and `brandDomainCited` are `true` when one of the answer's cited sources is that brand's website. If you give a domain (`"Pipedrive | pipedrive.com"`), it is matched exactly, subdomains included. If you give only a name, the cited site's main name must equal the name without spaces (`Salesforce` → `salesforce.com`).

Plus one free **summary row** (`rowType: "summary"`, also saved as `SUMMARY` in the key value store) with mention rate, share of voice, average position, average sentiment, average visibility score, answers recommending or citing you, each competitor's mention rate and share of voice, and the 10 most cited domains. You get these numbers for the whole run and per engine (`byEngine`).

## Compared with alternatives

Typical run: **10 prompts × ChatGPT + Gemini + Perplexity = 30 AI answers**. Prices are shown for the Free plan and, in brackets, the Gold plan.

| Alternative | Price per AI answer | Typical run (30 answers) | Claude | Live Google AI Overview |
|---|---|---|---|---|
| Most used AI brand monitor in the Store (~240 users) | $0.08 (same on Gold) | **$2.40** ($2.40) | ✓ | ✗ |
| 5-platform AI rank tracker (~110 users) | $0.05 ($0.04 on Gold) + $0.001 per run | **$1.50** ($1.20), + $0.25 ($0.20) for its optional aggregated report | ✓ | ✓ |
| LLM visibility & citation tracker with live web search in every check (~110 users) | $0.09 (same on Gold) | **$2.70** ($2.70) | ✓ | ✗ |
| Per question bundle (~4 variants × 5 to 7 fixed engines per question, ~110 users) | $0.30 per question ($0.18 on Gold) | **$3.00** ($1.80) for 10 questions | ✗ | ✓ |
| Flat per run brand analysis, ChatGPT + Gemini only (~110 users) | one $0.30 fee per run ($0.15 on Gold), + Apify platform usage | **$0.30** ($0.15) per run; its listing does not say how many prompts or answers one analysis covers | ✗ | ✗ |
| **This Actor** | **$0.008 to $0.012** ($0.0045 to $0.0093 on Gold), + Apify platform usage | **$0.28** ($0.18); **$1.48** ($1.38) with live web search on for ChatGPT and Gemini | ✓ | ✗ ([use our SERP scraper](https://cheapapilabs.com/actors/google-serp-scraper/)) |

Platform usage: the flat per run brand analysis and this Actor both bill Apify platform usage to the user on top of their event prices (here, at the default 256 MB a small run typically uses about $0.001 to $0.005); the other four listings do not. Prices from public Apify Store listings, checked September 2026. Where the others are ahead: the flat per run brand analysis costs $0.15 per run on Gold, less than our $0.18 for 30 answers, though it covers only ChatGPT and Gemini (the same 10 prompts on ChatGPT + Gemini cost $0.16 on Free and $0.09 on Gold here); two of the others include live Google AI Overview answers, the per question bundle rewrites each question into several variants for you, and one runs live web search in every check. Here you choose each engine and model yourself, web search is optional (Perplexity always searches), and the share of voice summary row is free.

## Not included

- **Live Google AI Overview and Google AI Mode answers.** This Actor asks the AI assistants directly; Google's AI answers appear on the search results page. Use our [Google SERP Scraper](https://cheapapilabs.com/actors/google-serp-scraper/): it returns the AI Overview with every cited source and your domain's citation position, and has a separate Google AI Mode search type. This Actor's mentions database still covers stored Google AI Overview answers.
- **Microsoft Copilot, Meta AI, Grok and DeepSeek.** Only ChatGPT, Gemini, Claude and Perplexity are asked live.
- **Automatic prompt variants.** Each prompt is asked exactly as you write it. Add rephrased versions yourself, or use a topic to generate 5 to 10 questions for free.
- **Dashboards, alerts and run to run comparison inside the Actor.** Results go to a dataset and a `SUMMARY` record; use schedules, webhooks and the stable `id` to compare runs in your own tools.
- **Classic keyword research and rankings.** For search volume, difficulty and ideas use our [Keyword Research Tool](https://cheapapilabs.com/actors/keyword-research-tool/); for your domain's Google rankings, the [Google SERP Scraper](https://cheapapilabs.com/actors/google-serp-scraper/) or [Domain SEO Analyzer](https://cheapapilabs.com/actors/domain-seo-analyzer/).

## Limits

- Brand detection matches your brand name, the extra names you give, your domain and its main part (for example "hubspot" from hubspot.com). Very generic brand names (for example "Apple" used as a fruit) can produce false matches.
- A competitor given only by name is matched to cited sites by its main name (`Salesforce` → `salesforce.com`). If its website has a different name, add the domain (`Zoho CRM | zoho.com`).
- Sentiment and "recommended" are word list heuristics with no measured accuracy figure. They can misread sarcasm, mixed verdicts or complex comparisons, so read the `excerpt` before acting on a single answer.
- Answers can differ from the consumer chat apps, which add personalization, memory and their own instructions.
- Some advanced settings are not supported by every engine: Gemini has no search location or forced search, Perplexity has no city, and reasoning models ignore temperature and top p. The Actor then uses the engine default and logs a note.
- At most 200 prompts and 20 competitors per run. Model lists change often, and new models are added after testing.
- In the mentions database, stored ChatGPT answers cover the United States in English only. Google AI Overview answers cover many more countries. AI search volume figures are estimates.

## FAQ

**Is there a limit on the Apify Free plan?**
Yes: up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.

**Do I need OpenAI, Google, Anthropic or Perplexity API keys?**
No. The Actor asks the AI engines through its own paid access, and that cost is already included in the per answer price. You only need an Apify account.

**Is it legal?**
The Actor sends your questions to AI assistants and analyzes the answers, just as a person typing the same questions would see them. It does not log in to anyone's account or collect private data. You are responsible for how you use the results.

**How fresh is the data?**
Visibility checks are live: every answer is generated when you run the Actor, and `answeredAt` shows the exact time. The mentions database contains stored answers with `firstSeenAt` and `lastSeenAt` dates. AI keyword volume is a monthly estimate.

**Why did I get fewer results than expected?**
Answers the AI engine rejects are not delivered and not charged. Empty or lost answers get a row with `answerStatus` `empty` or `noResponse` (charged, see below). The run also stops when it reaches your maximum cost per run. The `RUN_SUMMARY` record in the key value store lists skipped and failed answers. In the mentions lookup, strict filters or a small brand can return few stored answers.

**Why was I charged for an answer without text, or for a lookup that found nothing?**
The AI providers and the answers database bill every request they process, also when the result is empty. So: an answer that came back empty (for example, a reasoning model used its whole length limit for thinking; raise "Max answer length") or was lost in transit after the question was sent is charged like a normal answer and shown with `answerStatus` `empty` or `noResponse`; a mentions lookup that finds no stored answers is charged `mentions-lookup` ($0.13); a keyword request where no keyword has data is charged `keyword-batch` ($0.015). A lost lookup or keyword request is charged as if the requested rows had arrived. `RUN_SUMMARY` shows the count as `chargedWithoutAnswer`. Errors (a rejected question, an unavailable model) are never charged. A system message or conversation history counts as one more answer event per answer because it is sent with every question and the AI provider bills it as input.

**How do I control my budget?**
Set **Maximum cost per run** when you start the Actor. The Actor checks the price before it asks for each answer and never starts work it cannot pay for within that limit. Use the worked examples above to estimate a run.

**Can I monitor visibility over time?**
Yes. Save your input as a task and add a weekly schedule. Every run asks the AI engines again, so every answer is new and is charged once. To see changes, compare `brandMentionRate`, `shareOfVoice` and `averageVisibilityScore` in the `SUMMARY` record of each run (for example with the Google Sheets integration). Answer rows carry a stable `id` (brand + prompt + engine + model + run date), so you can join the same prompt across runs. For the mentions database, the `id` of a stored answer stays the same in every run: keep the ids you have seen and filter them out downstream to get only new answers. AI answers vary from run to run. Track trends over several runs rather than relying on one answer. A low temperature makes answers more stable, but less like what real users see.

**Why is live web search off by default?**
Without web search you see what the model itself "knows" about your brand. Live web search adds citations but costs more, because each answer then includes a live web search. Perplexity always searches, so the default run already includes cited sources.

**How are sentiment and position calculated?**
Sentiment is a heuristic, not a trained model: it counts positive and negative words, with negation handling ("not good" is negative), in the sentences around each mention. It runs locally and costs nothing. We do not publish an accuracy figure, because we have not measured it against human labels. Treat it as a quick signal and check the `excerpt` when a result matters. `mentionPosition` ranks your brand among all tracked brands by first appearance, and `listRank` is the item number when your brand appears in a list.

**Which export formats are available?**
JSON, CSV, Excel, XML, HTML and RSS, from the Output tab or the API. The "Brand visibility per answer" and "Share of voice summary" views give you ready made tables.

**Where do I get help?**
Open an issue on the Actor's **Issues** tab in Apify Console. Include the run ID so we can look at the log.
