AI Search Visibility Tracker: ChatGPT, Perplexity
Pricing
from $28.00 / 1,000 prompt checks
AI Search Visibility Tracker: ChatGPT, Perplexity
Track brand mentions, share of voice and cited URLs in ChatGPT, Perplexity, Gemini, Google AI Overviews, AI Mode and Claude. Per prompt x engine: full answer, mention rank, sentiment, citations, your domain cited or not. Monitoring mode flags gained/lost mentions. GEO/AEO rank tracker.
Pricing
from $28.00 / 1,000 prompt checks
Rating
0.0
(0)
Developer
Wrenfield Data
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
6
Monthly active users
7 hours ago
Last modified
Share
AI Search Visibility Tracker: brand mentions in ChatGPT, Perplexity, Gemini & Google AI Overviews
AI Search Visibility Tracker shows whether ChatGPT, Perplexity, Gemini, Google AI Overviews, Google AI Mode and Claude mention your brand when buyers ask them for recommendations. For every prompt and engine you get the full AI answer, whether your brand and each competitor is mentioned, the rank of the first mention, a sentiment snippet, every cited URL, and whether your domain is cited. Each run ends with share of voice, mention rate and citation rate per engine and brand. Turn on monitoring mode and schedule it to get alerts on gained and lost AI mentions. It's a GEO / AEO rank tracker that works without proxies, logins or API keys.
💸 $0.04 per prompt check (one prompt on one AI engine, with brand, competitor and citation analysis). Engine errors are never charged. Try it on Apify's free plan ($5 of monthly credit, no credit card).
- 🆓 Free Apify plan: runs are limited to 10 checks per run. Any paid Apify plan removes the limit and adds volume discounts.
Wrenfield Search Data: keyword and AI-search visibility data, priced per result
- Keyword data: Keyword Search Volume · Keyword Difficulty · Keyword Research · Autocomplete Expander · Google Trends · People Also Ask · Competitor Keywords · Keyword Gap
- AI search visibility: AI Search Visibility Tracker · Google AI Overview Scraper · AI Answer Scraper · Agency AI Visibility Reports
- Site and domain SEO: Domain Authority & Traffic · Bulk PageSpeed · SEO Toolkit · SEO Agency Report
Sample output
| Prompt | Engine | HubSpot mentioned | Position | Domain cited |
|---|---|---|---|---|
| What is the best CRM for a small… | Google AI Mode | yes | 1 | yes |
| What is the best CRM for a small… | ChatGPT | yes | 1 | yes |
What does AI Search Visibility Tracker do?
Enter your brand, your domain, a few competitors and the questions your customers ask, or just a product category, and pick the AI engines. For each prompt x engine you get one row:
- 🤖 Full answer text (markdown) from the real ChatGPT Search, Gemini, Google AI Overview and AI Mode answers, plus Perplexity Sonar and Claude
- ✅ Brand mentioned? for your brand and every competitor, with mention count
- 🥇 Rank of first mention among tracked brands (1 = mentioned first) and how early in the answer it appears
- 🙂 Sentiment (positive / neutral / negative / mixed) and the sentence that mentions you
- 🔗 Cited URLs and domains, and whether your domain is cited
- 🔍 Fan-out queries: the web searches ChatGPT ran to build its answer
- 📊 Summary rows: share of voice, mention rate, average rank and citation rate per engine and per brand
- 🔔 Monitoring mode: gained/lost mentions, citations and rank changes compared with your previous run
Why track AI search visibility?
More and more buyers ask ChatGPT, Perplexity or Google's AI Overviews "what's the best ... ?" instead of clicking ten blue links. If the AI doesn't name you, you're invisible in that conversation. This Actor turns that into numbers you can track, report and improve:
- All major AI engines in one run. Six engines in one dataset, with the same metrics for each.
- Real answers, localized. ChatGPT, Gemini, AI Overviews and AI Mode come from the actual consumer products for the country you choose (190+ countries).
- Built for comparison. Competitors, share of voice and rank are part of every run, not an extra.
- Monitoring built in. Schedule it weekly and every row tells you what changed since the last run.
- Reliable and fast. It uses a licensed AI-answer data API, so there are no browsers, proxies or CAPTCHAs and runs rarely fail. Failed checks are free.
- Clean JSON for agents and dashboards. Small, flat rows that work in Google Sheets, Looker Studio, n8n, Make, Zapier or an AI agent.
Use cases
- GEO / AEO tracking: measure how generative engines rank your brand for your money keywords.
- Competitor benchmarking: see who ChatGPT recommends first and which sources it trusts.
- Content & PR planning: find the domains (review sites, listicles, Reddit, YouTube) that AI engines cite, then get featured there.
- Agency reporting: share of voice per engine and per client, every week.
- Brand monitoring: get flagged when an engine stops mentioning you or starts describing you negatively.
How to track your brand in AI search
- Enter Your brand(s) (add spelling variants after
|, e.g.HubSpot | HubSpot CRM) and Your domain(s). - Add Competitors (optional):
Salesforce | salesforce.com. - Add Prompts (the questions buyers ask), or Seed topics such as
CRM softwareto generate buyer-intent prompts automatically. - Pick AI engines and the Country.
- Optional: turn on Monitoring mode and give the project a Tracking ID, then schedule the Actor.
- Click Start and export the results as Excel, CSV or JSON, or fetch them through the API.
Input example
{"brands": ["HubSpot"],"domains": ["hubspot.com"],"competitors": ["Salesforce | salesforce.com", "Pipedrive | pipedrive.com", "Zoho CRM | Zoho | zoho.com"],"prompts": ["What is the best CRM for a small business?"],"seedTopics": ["CRM software"],"promptsPerTopic": 3,"engines": ["chatgpt", "perplexity", "gemini", "google_ai_overview", "google_ai_mode", "claude"],"country": "United States","language": "English","monitoringMode": true,"trackingId": "hubspot-us"}
| Field | Description |
|---|---|
brands | Your brand name(s). Variants after |. A domain-looking token becomes your domain. |
domains | Your domain(s), for the "is my site cited?" check. Subdomains count. |
competitors | Name | variant | domain.com, one per line. |
prompts | Questions to ask (max 500 characters each). |
seedTopics | Product categories to generate buyer-intent prompts from. |
promptsPerTopic | Prompts per seed topic (1-10, default 3). |
promptGeneration | templates (default, stable wording, best for monitoring) or ai (natural questions written by an AI model, free). |
engines | chatgpt, perplexity, gemini, google_ai_overview, google_ai_mode, claude. Default: ChatGPT, Perplexity, AI Overviews. |
country / language | e.g. Germany / German, or DE / de. Default: United States / English. |
monitoringMode | Compare with the previous run that has the same trackingId. |
trackingId / monitoringStoreName | Project name and named key-value store that keep the previous results. |
maxChecks | Cap on prompt x engine checks per run (default 200). |
chatgptWebSearch | Force ChatGPT to search the web and cite sources (default on). |
caseSensitive | Count only capitalized mentions (for brands that are common words). |
Output example (one check)
{"type": "check","prompt": "What is the best CRM for a small business?","engine": "chatgpt","engine_name": "ChatGPT","model": "gpt-5-6","country": "United States","status": "ok","brand": "HubSpot","brand_mentioned": true,"brand_position": 1,"brand_mention_count": 9,"brand_sentiment": "positive","brand_snippet": "If you mean the best CRM for a typical small business in 2026, my pick is HubSpot.","your_domain_cited": true,"your_cited_urls": ["https://www.hubspot.com/pricing/sales", "https://www.hubspot.com/products/crm"],"competitors_mentioned": ["Pipedrive", "Zoho CRM"],"first_mentioned_brand": "HubSpot","cited_domains": ["hubspot.com", "zoho.com", "stackbytrade.com"],"citations_count": 4,"fan_out_queries": ["best CRM for small business 2026 HubSpot Zoho Pipedrive Freshsales pricing features"],"brand_results": [{ "name": "HubSpot", "is_yours": true, "mentioned": true, "mention_count": 9, "position": 1,"sentiment": "positive", "cited": true, "cited_urls": ["https://www.hubspot.com/products/crm"] },{ "name": "Salesforce", "is_yours": false, "mentioned": false, "mention_count": 0, "position": null,"sentiment": null, "cited": false, "cited_urls": [] }],"citations": [{ "url": "https://www.hubspot.com/pricing/sales", "domain": "hubspot.com", "title": "Sales Software Pricing | HubSpot" }],"answer_text": "If you mean **the best CRM for a typical small business in 2026**, my pick is **HubSpot**. ...","change_status": "first_check","checked_at": "2026-10-08T15:14:10Z"}
Summary rows (share of voice)
After the checks, the dataset gets one "type": "summary" row per engine (plus "engine": "all") and brand:
| Brand | Mention rate | Share of voice | Avg. rank | Citation rate |
|---|---|---|---|---|
| HubSpot | 100% | 30% | 1.17 | 33% |
| Zoho CRM | 100% | 30% | 2.17 | 67% |
| Pipedrive | 100% | 30% | 3.0 | 0% |
| Salesforce | 33% | 10% | 3.0 | 17% |
(1 prompt on all 6 engines, United States, October 2026.)
- Mention rate = checks that mention the brand / completed checks.
- Share of voice = the brand's mentions / mentions of all tracked brands.
- Avg. rank = average rank among tracked brands when mentioned (1 = named first).
- Citation rate = checks citing the brand's domain / completed checks.
The dataset has Visibility, Share of voice, Full answers, Citations and Changes views. The SUMMARY record holds the run statistics. In monitoring mode, the CHANGES record lists every prompt x engine that changed.
Monitoring mode
With monitoringMode: true, results are saved in the named key-value store ai-visibility-monitor (in your account) under your trackingId. Each new run compares every prompt x engine with the last time it was checked:
change_status:gained_mention,lost_mention,gained_citation,lost_citation,position_changed,competitors_changed,unchangedorfirst_checkbrands_gained/brands_lost,position_change(+ = moved up),previous_checked_at- Summary rows get
mention_rate_change,share_of_voice_changeandcitation_rate_change.
Schedule the Actor weekly and connect a webhook or the Slack/email integration to get notified.
Pricing
This Actor uses pay-per-event pricing: you pay per prompt check, meaning one prompt answered by one AI engine. Checks that fail are free.
| Event | Price |
|---|---|
Prompt check (prompt-check) | $0.04 per prompt × engine |
Upcoming change: from November 2, 2026 a prompt check costs $0.06. The examples below use today's $0.04 price; multiply by 1.5 for the new one.
| Example run | Checks | Cost |
|---|---|---|
| 1 prompt on ChatGPT + Google AI Mode | 2 | $0.08 |
| 10 prompts on ChatGPT, Perplexity, AI Overviews | 30 | $1.20 |
| 25 prompts on all 6 engines (weekly monitoring) | 150 | $6.00 |
To control spend, set Maximum cost per run in the run options, or maxChecks. The Actor works out how many checks fit before it starts and stops cleanly at the limit. Free Apify plan: runs are limited to 10 checks.
Related tools
Pair AI visibility with classic SEO data: keyword volume, authority, traffic and competitor ads.
- Keyword Search Volume (Google Keyword Planner): search volume, CPC and keyword ideas in bulk
- Domain Authority & Traffic Checker: bulk domain authority, backlinks and organic traffic
- Google Ads Transparency Scraper: see competitors' Google, YouTube and Shopping ads
- Google Trends Scraper: interest over time, by region, related queries and Trending Now
- People Also Ask Scraper: Google PAA questions, related searches and AI Overviews
- SEO Toolkit All-in-One: domain overview, ranked keywords, backlinks and SERPs in one API
- AI Answer Scraper: full answers and citations from ChatGPT, Perplexity, Gemini and AI Mode
All of these are maintained by the same developer and export flat JSON, CSV or Excel, so you can feed one tool's dataset into the next.
AI search visibility API: REST, Python, JavaScript, n8n and MCP
Actor ID for every client: wrenfield-data/ai-search-visibility-tracker (in URLs: wrenfield-data~ai-search-visibility-tracker). You need an Apify API token; send it in an Authorization: Bearer header. Every example below sets maxTotalChargeUsd, a hard spend cap for the run.
One request, rows back (runs up to 5 minutes):
curl -X POST "https://api.apify.com/v2/acts/wrenfield-data~ai-search-visibility-tracker/run-sync-get-dataset-items?maxTotalChargeUsd=5" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"brands": ["HubSpot"], "domains": ["hubspot.com"], "competitors": ["Salesforce | salesforce.com", "Pipedrive | pipedrive.com"], "prompts": ["What is the best CRM for a small business?"], "engines": ["chatgpt", "perplexity"]}'
Python (pip install apify-client):
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("wrenfield-data/ai-search-visibility-tracker").call(run_input={'brands': ['HubSpot'], 'domains': ['hubspot.com'], 'competitors': ['Salesforce | salesforce.com', 'Pipedrive | pipedrive.com'], 'prompts': ['What is the best CRM for a small business?'], 'engines': ['chatgpt', 'perplexity']},max_total_charge_usd=5,)for row in client.dataset(run.default_dataset_id).iterate_items(): # apify-client 1.x/2.x: run["defaultDatasetId"]print(row.get("engine"), row.get("prompt"), row.get("brand_mentioned"))
JavaScript / TypeScript (npm i apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('wrenfield-data/ai-search-visibility-tracker').call({"brands": ["HubSpot"], "domains": ["hubspot.com"], "competitors": ["Salesforce | salesforce.com", "Pipedrive | pipedrive.com"], "prompts": ["What is the best CRM for a small business?"], "engines": ["chatgpt", "perplexity"]},{ maxTotalChargeUsd: 5 },);const { items } = await client.dataset(run.defaultDatasetId).listItems();
Long or scheduled jobs (async + webhook): start with POST https://api.apify.com/v2/acts/wrenfield-data~ai-search-visibility-tracker/runs?maxTotalChargeUsd=5 (returns at once with data.id and data.defaultDatasetId), wait with GET /v2/actor-runs/{id}?waitForFinish=60, then read GET /v2/datasets/{defaultDatasetId}/items?clean=true&format=json (or csv, xlsx). To be called back instead of polling, add &webhooks= with the base64 of [{"eventTypes":["ACTOR.RUN.SUCCEEDED"],"requestUrl":"https://your-app.example/hook"}]. For recurring pulls, save the input as a task and put it on an Apify schedule.
n8n: Apify node → Resource Actors → Run an Actor and Get Dataset → Actor wrenfield-data/ai-search-visibility-tracker → custom input {"brands": ["HubSpot"], "domains": ["hubspot.com"], "prompts": ["What is the best CRM for a small business?"], "engines": ["chatgpt", "perplexity"]}. Make and Zapier have the same "run Actor" + "get dataset items" steps. Or call the run-sync-get-dataset-items URL above from any HTTP node.
MCP (Claude, Cursor, VS Code, any MCP client): https://mcp.apify.com?tools=wrenfield-data/ai-search-visibility-tracker. The tool exposes the input schema and output fields to the agent.
Output fields
Main fields (the Output tab and the dataset schema list every field with its type):
| Field | Type | Meaning |
|---|---|---|
type | string | check = one prompt answered by one AI engine; summary = share-of-voice row for one engine (or "all") and one brand |
prompt | string or null | The question sent to the AI engine |
engine | string or null | chatgpt, perplexity, gemini, google_ai_overview, google_ai_mode, claude (summary rows: also "all") |
status | string or null | ok = answer received; no_answer = the engine showed no AI answer (e.g. no AI Overview for this query); error = check failed (not charged); incomplete = the engine returned a cut-off answer twice (not charged) |
brand_mentioned | boolean or null | Your brand is mentioned in the answer |
brand_position | integer or null | Rank of your brand among all tracked brands by first mention (1 = mentioned first) |
brand_sentiment | string or null | positive, neutral, negative or mixed (wording around your brand) |
your_domain_cited | boolean or null | One of your domains is cited as a source (null if you gave no domain) |
competitors_mentioned | array or null | Tracked competitors mentioned in the answer |
cited_domains | array or null | Unique domains cited as sources |
citations | array or null | Check rows: cited sources. Summary rows: checks citing the brand domain |
answer_text | string or null | Full answer (markdown) |
share_of_voice | number or null | Summary: brand mentions / all tracked-brand mentions (0-1) |
mention_rate | number or null | Summary: mentions / checks (0-1) |
change_status | string or null | Monitoring: first_check, gained_mention, lost_mention, gained_citation, lost_citation, position_changed, competitors_changed, unchanged |
checked_at | string or null | When the row was produced (UTC) |
Field names and types stay stable within version 1.x: we add fields but don't rename or remove them. Anything that changes a field will be announced in this README first. Optional fields can be null or absent depending on the options you set, so read them with a default.
Cost per 1,000 results
| Volume | Cost (free plan prices) | How it adds up |
|---|---|---|
| 1,000 prompt checks (prompt × engine) | $40.00 | $0.04 per check (current price) |
| 1,000 prompt checks from Nov 2, 2026 | $60.00 | $0.06 per check |
| 25 prompts × 6 engines, weekly | $6.00 / week | 150 checks; $9.00 from Nov 2 |
Failed checks are free. maxChecks (default 200) is a second spend limit next to the run cost cap.
Pipeline tips
- Two row types:
type: "check"(one prompt on one engine) andtype: "summary"(share of voice per engine and brand). Filter ontypebefore loading. - Set
"monitoringMode": truewith a fixedtrackingIdand schedule the run: each run then addschange_status,mention_changeand*_changefields against the previous one. - A run with many prompts takes several minutes (each engine answers live), so use the async pattern or a webhook rather than
run-sync.
Use it from an AI agent (MCP)
Add one line to Claude, Cursor, VS Code or any MCP client and the agent gets this Actor as a tool (it appears as wrenfield-data--ai-search-visibility-tracker):
https://mcp.apify.com?tools=wrenfield-data/ai-search-visibility-tracker
Try asking: Check whether ChatGPT and Perplexity name HubSpot for "What is the best CRM for a small business?" and tell me which competitors they name instead.
Fields your agent reads: brand_mentioned, brand_position, brand_sentiment, your_domain_cited, competitors_mentioned, first_mentioned_brand, cited_domains.
Real output (one row from a run on Oct 22, 2026, trimmed):
{"prompt": "What is the best CRM for a small business?", "engine": "perplexity", "brand": "HubSpot", "brand_mentioned": true, "brand_position": 1, "your_domain_cited": true, "competitors_mentioned": ["Salesforce", "Pipedrive"]}
Booleans and positions come back as fields, so the agent does not have to parse prose. One run is a sample, not a ranking. Set a maximum cost per run (maxTotalChargeUsd over the API, call options over MCP) so an agent loop cannot overspend.
FAQ
Where does the data come from? From a licensed AI-answer data provider. ChatGPT (with web search), Gemini, Google AI Overviews and Google AI Mode are collected from the live consumer products for your country. Perplexity uses the Sonar model with web search. Claude uses Claude Haiku without web search, so Claude rows have no citations.
Why does the same prompt give different answers on different runs? AI engines aren't deterministic. Answers change with time, location and model updates. That's why share of voice over many prompts and repeated runs is more reliable than a single answer. Use monitoring mode to track the trend.
What does no_answer mean?
The engine didn't show an AI answer, most often because Google showed no AI Overview for that query. That's still a valid visibility result (your brand isn't visible), so it counts as a completed check.
How is the rank calculated?
By order of first mention among your brand and the competitors you entered: 1 = named first. ChatGPT rows also include position_among_all_brands when ChatGPT marks brand entities.
How is sentiment detected?
With a fast word-list model applied to the sentences that mention the brand. It flags clear praise ("best", "easy", "recommended") or criticism ("expensive", "limited", "clunky"). Read brand_snippet for context.
My brand name is a common word. Will it over-count?
Turn on Case-sensitive brand matching and add precise variants (e.g. Monday.com | monday CRM).
Can I use it through the API, on a schedule or from an AI agent? Yes. Use the Apify API, schedules, webhooks, or integrations like Make, Zapier, n8n and Google Sheets. The small JSON rows also work well for MCP and AI agents.
Is this affiliated with OpenAI, Google, Perplexity or Anthropic? No. ChatGPT, Gemini, Google, Perplexity and Claude are trademarks of their owners.
Found a problem or need another engine? Open an issue on the Issues tab with your run ID.
Feedback and support
Missing a field, hit an error, or need another country or option? Open an issue on the Issues tab and include the run ID. We read every issue and reply there.
Acceptable use
- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Google, DataForSEO, OpenAI, Perplexity or Anthropic.
- Don't use the data to build a competing search engine, or otherwise to compete with or harm the search engines and AI assistants the data comes from.
- The Actor may not be used from, or for people or organizations in, Russia, Belarus, Cuba, Iran, Syria, Myanmar, North Korea, Crimea or the Russian-occupied territories of Ukraine.
- You are responsible for using the results lawfully, including privacy laws such as GDPR for any personal data they contain.