AI Search Visibility Tracker - ChatGPT, Perplexity, Gemini (EU) avatar

AI Search Visibility Tracker - ChatGPT, Perplexity, Gemini (EU)

Pricing

from $10.00 / 1,000 ai answer checks

Go to Apify Store
AI Search Visibility Tracker - ChatGPT, Perplexity, Gemini (EU)

AI Search Visibility Tracker - ChatGPT, Perplexity, Gemini (EU)

Track if ChatGPT, Perplexity & Gemini mention, rank and cite your brand. Native Dutch, German, French, Spanish, Italian & Polish prompts. Your own API keys.

Pricing

from $10.00 / 1,000 ai answer checks

Rating

0.0

(0)

Developer

Dave West

Dave West

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

AI Search Visibility Tracker: brand mentions in ChatGPT, Perplexity & Gemini (Dutch & EU languages)

Track whether ChatGPT, Perplexity and Gemini mention, rank and cite your brand when customers ask them for advice, in Dutch, German, French, Spanish, Italian, Polish, Portuguese or English. Get share of voice against your competitors, the rank of your first mention, the sources the AI cites and whether your own website is one of them. Built for generative engine optimization (GEO), AI search visibility monitoring and brand monitoring in AI answers for European markets. It uses the official APIs with your own API keys: you pay the AI providers directly, and the Actor fee is $0.01 per successful answer check.

Engine status: Gemini is tested against the live Gemini API. ChatGPT and Perplexity are beta (not yet tested against the live APIs): they are built from the official API docs and tested with mocked responses only.

Use cases

  • GEO / AI search visibility: see whether AI assistants recommend your brand for the questions your customers ask, and track it weekly.
  • Brand monitoring in AI answers: mention rate, rank, sentiment and share of voice versus up to 25 competitors, per engine.
  • Citation and PR targeting: see which websites ChatGPT and Perplexity cite (your PR and content targets) and whether your own domain is cited.
  • Local EU markets: native-language prompts and matching for the Netherlands, Belgium, Germany, Austria, Switzerland, France, Spain, Italy, Poland, Portugal and more.
  • Agencies: one saved task per client and market, scheduled weekly, exported to Sheets, Looker Studio or BI tools.

What you get

✅ Brand mention tracking per AI engine: ChatGPT (OpenAI Responses API with web search, beta), Perplexity (Agent API with web search, beta) and Gemini (Gemini API, model knowledge) ✅ Share of voice against up to 25 competitors, per engine and overall ✅ Rank tracking: was your brand named first, second or third, and at which position in the AI's top-5 list? ✅ Citations / sources (ChatGPT, Perplexity): every URL the AI cites, the domains it relies on, and whether your domain is cited ✅ Native EU-language prompts: realistic, unbranded customer questions generated in nl, de, fr, es, it, pl, pt or en, for 16 countries ✅ Language-aware matching: Coolblue's, Zalandos, d'Amazon, dell'Esselunga, w Biedronce, L’Oréal and Mueller/Müller all count as mentions; Bolton never counts as Bol ✅ Simple, documented sentiment about your brand (positive / neutral / negative / mixed) in each language ✅ History & trends: compare every run with the previous one (mention rate, share of voice, visibility score, prompts won or lost). Ideal with a weekly schedule ✅ Bring your own keys: keys are encrypted secret inputs and never logged or stored in the output ✅ Reliable: retries with exponential backoff, Retry-After / 429 handling (also for Gemini's free-tier limits), timeouts, clear errors for invalid keys or empty credit, and a cost cap you control

Why EU languages matter for AI search visibility

AI answers differ by language and country. Someone in the Netherlands asks "Wat zijn de beste webwinkels voor elektronica?", not "best electronics stores", and gets different brands and sources back. Most AI visibility tools only send English prompts and match English spellings. This Actor:

  • generates prompts in the target language with grammar handled per language and country (in den Niederlanden, aux Pays-Bas, w Polsce, negli Stati Uniti);
  • sends the user's country to ChatGPT web search and Perplexity (user_location) and Perplexity's language_preference, plus an optional locale hint in the target language;
  • matches brand names the way each language writes them: possessives and genitives (nl/de/en), elision (fr/it), hyphenated compounds (Coolblue-bezorger, Zalando-Shop), Polish case endings (Biedronka → Biedronki, Biedronce, Biedronką), German umlaut spellings, curly apostrophes and diacritics.
LanguageExample generated prompt
Dutch (NL/BE)Wat zijn de beste webwinkels voor elektronica in Nederland?
German (DE/AT/CH)Welche Online-Shops für Elektronik sind in Österreich am zuverlässigsten?
French (FR/BE/CH/LU)Quel est le top 5 des banques en ligne en Belgique en 2026 ?
Spanish¿Qué tiendas online de electrónica me recomiendas para un portátil gaming?
ItalianQuali sono delle buone alternative a MediaWorld?
PolishJakie są najlepsze sklepy internetowe z elektroniką w Polsce?
Portuguese (PT)Quais são as opções mais fiáveis de lojas online de eletrónica em Portugal?

Quick start

  1. Get the API key(s) for the engines you want: Google AI Studio (Gemini), OpenAI, Perplexity. One key is enough to start; a free Gemini key works within Google's free-tier limits.
  2. Enter your brand name, your domain and a few competitors (Name, alias, domain per line).
  3. Pick a language and country, then either type your own prompts or enter a category (e.g. webwinkels voor elektronica) and some keywords.
  4. Paste your keys into the secret key fields and click Start. Results appear in the dataset; the share-of-voice summary is in the SUMMARY record.

Without any key the Actor runs in preview mode. It lists every planned prompt × engine check (status skipped) so you can review the prompts, sends nothing and charges nothing. Dry run does the same even when keys are filled in.

How each engine is queried

EngineStatusOfficial APILive web searchCitationsLocale
Gemini✅ tested against the live APIGemini API generateContent (default) or the Interactions API (beta at Google), default model gemini-3.5-flash❌ no (model knowledge only)nonelocale hint (system instruction)
ChatGPTbeta, not yet tested against the live APIOpenAI Responses API (/v1/responses), default model gpt-6-luna✅ web_search tool (the model decides when to search, like ChatGPT)url_citation annotations + all consulted sourcesuser_location.country + locale hint
Perplexitybeta, not yet tested against the live APIPerplexity Agent API (/v1/agent), preset fast✅ web_search toolnumbered citations mapped to search resultslanguage_preference, user_location.country

Gemini answers reflect the model's own knowledge, not live search. The Actor calls Gemini without Google Search grounding, so a Gemini check measures how well the model "knows" and recommends your brand, has no cited URLs (citedUrls is empty and brandDomainCited is null), and may not reflect very recent changes. ChatGPT and Perplexity measure live AI search visibility.

The Actor never scrapes chat interfaces, Google AI Overviews or search result pages.

Input example

Keys are secret inputs: paste them in the Console form. Never put keys in prompts, task names or shared JSON.

{
"brandName": "Coolblue",
"brandAliases": ["Cool Blue"],
"brandDomains": ["coolblue.nl", "coolblue.be"],
"competitors": ["Bol, bol.com", "MediaMarkt, Media Markt, mediamarkt.nl", "BCC, bcc.nl", "Amazon, amazon.nl"],
"language": "nl",
"country": "NL",
"category": "webwinkels voor elektronica",
"keywords": ["een nieuwe wasmachine", "een gaming laptop"],
"maxGeneratedPrompts": 5,
"engines": ["gemini"],
"runsPerPrompt": 1,
"historyStoreName": "ai-visibility-coolblue",
"geminiApiKey": "<your Gemini API key>"
}
OptionWhat it doesDefault
brandName, brandAliases, brandDomainsBrand to track, other spellings, your website domain(s)required
competitorsName, alias, domain per line (max 25)none
language, countryPrompt and matching language; market sent to the enginesen / main country of the language
promptsYour own prompts (max 200). If set, category/keywords are ignorednone
category, keywords, maxGeneratedPromptsGenerate prompts in the chosen language5 prompts
includeBrandPromptsAlso generate prompts that name your brand ("What do you think of …?")off
engineschatgpt (beta), perplexity (beta), geminiall three
runsPerPromptAsk each prompt several times to measure how often you appear1
openaiModel, openaiWebSearch, openaiSearchContextSizeChatGPT model and web search settingsgpt-6-luna, on, medium
perplexityPreset, perplexityModelPerplexity Agent API preset or modelfast
geminiModel, geminiEndpointGemini model and API endpointgemini-3.5-flash, generateContent
geminiFallbackModelSecond Gemini model, used only while the main one keeps answering 503 "high demand" (none = off)gemini-3.5-flash-lite
localeHint"The user is in on
maxChecksSafety cap on prompt × engine × run checks200
maxConcurrency, maxConcurrencyPerEngineParallel API calls overall / per provider4 / 2
requestTimeoutSecs, maxRetriesPer-call timeout and retries120 s / 3
historyStoreNameNamed key-value store for run-over-run comparisonnone
includeAnswerText, dryRunStore full answers; plan onlyon / off

Gemini model choice: gemini-3.5-flash is the default because it works on Google's free tier (tested Oct 2026; gemini-3.8-flash was repeatedly "busy" for free-tier keys). With a paid key, gemini-3.8-flash (newest Flash, introductory price until 31 Dec 2026) or gemini-3.1-flash-lite (cheapest) are good alternatives. Free-tier users: set Max concurrency per engine to 1.

Output

One dataset row per prompt × engine × run (views: Visibility overview, Citations, Answers). Real Gemini example (answer shortened):

{
"engine": "gemini",
"model": "gemini-3.5-flash",
"language": "nl",
"country": "NL",
"prompt": "Wat zijn de beste webwinkels voor elektronica in Nederland?",
"run": 1,
"status": "ok",
"answerText": "Wat de \"beste\" webwinkel is voor elektronica in Nederland, hangt erg af van wat je zoekt … ### 1. De Allrounders (Beste Service & Snelheid) * **Coolblue** …",
"brandMentioned": true,
"brandMentionCount": 2,
"brandFirstMentionRank": 1,
"brandListPosition": 1,
"brandDomainCited": null,
"sentiment": "positive",
"sentimentScore": 1,
"competitorsMentioned": ["Bol", "MediaMarkt", "BCC"],
"competitorMentions": [{ "name": "Bol", "mentioned": true, "mentionCount": 2, "firstMentionRank": 2, "listPosition": 2, "domainCited": false }],
"citedUrls": [],
"webSearchUsed": false,
"inputTokens": 30,
"outputTokens": 1954,
"durationMs": 18002
}

ChatGPT and Perplexity rows have the same fields, plus citedUrls, citedDomains, brandCitationUrls, brandDomainCited (true/false), searchQueries and, for Perplexity, providerCostUsd.

The SUMMARY record (key-value store) contains, overall and per engine: mention rate, share of voice, visibility score, average first-mention rank and list position, domain citation rate, a sentiment breakdown, statistics for each competitor, the top cited domains, tokens used, a prompt × engine matrix and, with a history store, the change since the previous run. It is written even when a run is cut short: shortly before the run timeout the Actor stops starting new checks and saves the results so far (status: "partial", stopReason: "timeout"); an aborted run and a platform migration also leave a SUMMARY of the finished checks (stopReason "aborted" / "migrating").

Failed calls (status: "error", e.g. invalid key or timeout) and skipped checks (status: "skipped", e.g. missing key) are listed too, with a clear errorMessage, and are not charged.

Metrics explained

MetricDefinition
Brand mentionedBrand name, alias or domain appears in the answer text. Citation links and footnote markers alone do not count.
First-mention rank1 = your brand was the first tracked name (brand or competitor) in the answer.
List positionPosition of the first numbered / bulleted / table item that names your brand ("#2 in the AI's top 5"). Numbering continues across description paragraphs and restarts at a new "1."; bullets nested under numbered items are treated as details.
Mention rateAnswers mentioning the brand ÷ successful answers.
Share of voiceAnswers mentioning your brand ÷ the sum of answers mentioning your brand and each competitor (presence-based, so a long answer repeating one name does not inflate it).
Visibility score100 × the average of 1/first-mention rank over all answers (0 when not mentioned). 100 = always named first.
Domain citation rateAnswers citing a URL on your domain (subdomains included) ÷ successful answers from engines that cite URLs (ChatGPT, Perplexity). null for Gemini.
SentimentLexicon-based, per language: positive and negative words in the sentences that mention your brand, with negation handling (niet, nicht, pas, no, nie …). score = (pos − neg) / (pos + neg). Good for spotting trends, not a full classifier; a sentence that also names competitors counts fully.

History and scheduling

Set History store name (e.g. ai-visibility-coolblue) and create a weekly Schedule for a saved task. Each run is compared with the previous run for the same brand + language + country: deltas per engine, prompts where your brand newly appears or dropped out, and brandMentionedPreviously on every row. The last 30 runs are kept. To track several markets (for example Dutch for NL plus French for BE), create one task per market.

What does it cost?

Actor fee: $0.01 per successful answer check (answer-check event = one prompt answered by one engine, analysed and saved). Failed and skipped checks are free. You set the maximum cost per run, and the Actor never starts an AI call that the remaining budget could not pay for.

Your own AI API costs are billed by the providers to your own key (typical per check with the default settings, Oct 2026 list prices):

EngineTypical cost on your key
Gemini, gemini-3.5-flash$0 on Google's free tier (within its rate limits). Paid tier ≈ $0.01–0.02 (answers use ~2,000 output tokens including thinking); gemini-3.8-flash ≈ $0.005–0.008, gemini-3.1-flash-lite ≈ $0.002–0.004
ChatGPT (beta), gpt-6-luna + web search≈ $0.011–0.02 (OpenAI charges $10 per 1,000 web search calls + tokens)
Perplexity (beta), fast preset≈ $0.002–0.004 (the exact cost per call is in providerCostUsd)

Example: 10 prompts × 3 engines = 30 checks = $0.30 Actor fee plus roughly $0.15–0.45 on your own API keys.

Methodology and limitations

  • API answers are not identical to the consumer apps. ChatGPT, Perplexity and Gemini apps add their own system prompts, personalisation, memory and model routing. The APIs are the closest official, reproducible way to measure the same models and search, which is how GEO tools measure AI visibility. For answers closer to ChatGPT itself, use a larger model such as gpt-6.1-sol.
  • Answers vary between calls. Use runsPerPrompt > 1 and track trends over time rather than single answers.
  • Gemini answers come from model knowledge (no live web search, no citations). That measures how well the model "knows" your brand, while ChatGPT and Perplexity measure live AI search visibility.
  • ChatGPT and Perplexity are beta: the request and response handling follows the official API docs and is covered by mocked tests, but has not yet been run against the live APIs.
  • Matching is literal (with language-aware variants). Add aliases for product names and old names, and avoid generic words as aliases.

Privacy and data

  • The Actor collects no personal data. It sends only your prompts to the AI providers and stores their answers and citations. Do not put personal data in prompts, and track brands and companies, not private individuals.
  • API keys are secret inputs (encrypted by Apify, never logged, and removed from error messages). The Actor developer cannot see them.
  • OpenAI and Gemini Interactions requests are sent with store: false. Each provider's own data policy applies; on Google's free Gemini tier, Google may use prompts and answers to improve its products.
  • Gemini is called without Google Search grounding, so no Google Search results are stored or analysed.

FAQ

Do I need all three API keys? No. Engines without a key are skipped and listed with status skipped.

What happens with an invalid key or empty credit? The first call to each engine runs on its own as a probe. If the key is rejected (401/403), the account is out of credit, or the model does not exist, that engine stops immediately with a clear message, and the other engines continue. If nothing succeeds, the run fails with the reason.

What about rate limits? HTTP 429 and 5xx responses (including Gemini's "high demand" 503) are retried with exponential backoff and jitter. Retry-After headers and Gemini's retry delay ("retry in 54 s") are respected, and the engine pauses so parallel calls don't pile up. Gemini gets a longer backoff (5 s doubling up to 60 s), and if its model stays overloaded it switches to a second Flash model (geminiFallbackModel). Free-tier 429s with a retry hint are waited out and retried; only when Google still refuses does Gemini stop for the run with the message "daily free-tier quota reached" (the quota resets at midnight Pacific time). Lower Max concurrency per engine (1 for free tiers).

Is this generative engine optimization (GEO) software? It is the measurement part: it shows where you stand in AI answers, which sources the engines trust (your PR and content targets) and how that changes after you optimise.

Can I track only one engine? Yes. Select only gemini, chatgpt or perplexity as the engine.

Why does Gemini show no citations? Gemini runs without Google Search grounding (Google's terms restrict storing and analysing grounded results), so its answers come from model knowledge and contain no source links.

Can I export to Google Sheets or Looker Studio? Yes, via the dataset export (CSV/Excel/JSON), the Apify API, or integrations such as Make, Zapier and n8n.

Support

Found a bug or need another language, country or engine? Open an issue on the Actor's Issues tab. Feature requests for EU markets are very welcome.