Integration Guide
How to Check if ChatGPT Mentions Your Brand
There's no Search Console for ChatGPT. Here's how to actually check whether it mentions your brand, cites your site, and where you rank against competitors — without mistaking one lucky answer for a trend.
Written by Alex P.
- ChatGPT
- AI visibility
- brand mentions
- GEO
- AI search
- share of voice
You can’t check Search Console for ChatGPT. There’s no dashboard that tells you how often it mentions your brand, whether it links to your site when it does, or how you stack up against the three competitors it always seems to name instead of you.
So most people improvise: they open ChatGPT, type a prompt they care about, and read the answer. If their brand shows up, great. If it doesn’t, they conclude they have a visibility problem — or worse, that they don’t.
Both conclusions can be wrong, for the same reason: a single ChatGPT answer is a sample of one from a system that gives a different answer to the same prompt a few minutes later. Treating it like a search ranking that holds still is the first mistake to fix.
Two different questions, not one
“Does ChatGPT mention us” collapses two separate things that need separate answers:
- Mentioned — your brand name appears somewhere in the answer’s prose.
- Cited as a source — one of your pages is actually listed among the sources the answer points to.
A brand can be named in the text and never sourced. A page can be read and cited without the brand it belongs to being recommended at all. If you only check one of these, you’ll misread what’s actually happening — a mention with no citation means ChatGPT knows who you are but isn’t sending anyone to you, which is a different problem than not being mentioned at all.
Start by asking, and reading everything back
Before tracking anything, see what a full answer actually contains — not just the visible text, but the searches it ran and the pages it looked at along the way:
const res = await fetch('https://api.fetchlayer.dev/chatgpt/ask', {
method: 'POST',
headers: {
'Authorization': 'Bearer ss-your-api-key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'What are the best tools for monitoring Reddit mentions?',
webSearch: 'on',
}),
});
const { answer } = await res.json();
console.log(answer.text);
console.log(answer.sources); // pages it cites, each with position and domain
console.log(answer.retrievedPages); // every page it looked at, cited or not
console.log(answer.searchQueries); // the web searches it actually ran
retrievedPages is worth pausing on: a page can be read and never cited. If your site shows up there but not in sources, ChatGPT is finding you and choosing not to use you — which points at a content or authority problem, not a discoverability one.
Check specific brands in one answer
Once you know what an answer looks like, ask a more direct question: does it mention you, specifically, and does it mention your competitors too?
const res = await fetch('https://api.fetchlayer.dev/chatgpt/mentions', {
method: 'POST',
headers: {
'Authorization': 'Bearer ss-your-api-key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'What are the best tools for monitoring Reddit mentions?',
targets: [
{ name: 'FetchLayer', domains: ['fetchlayer.dev'] },
'Brandwatch',
'Mention',
],
}),
});
const { results, otherBrandsMentioned } = await res.json();
Give aliases and domains for any name that’s also an ordinary word — a bare "Notion" or "Twenty" will under- or over-match on plain text alone. Each target comes back with mentioned, citedAsSource, and contexts (the sentence it appeared in). otherBrandsMentioned is the more interesting field, most of the time: it’s ChatGPT’s own competitor set for that prompt, ranked, whether or not you asked about those brands by name.
The part that actually matters: track it over several runs
This is the fix for the “I asked once and got a different answer than my coworker” problem. Because answers vary run to run, the useful signal isn’t any single run — it’s the aggregate across several:
const res = await fetch('https://api.fetchlayer.dev/chatgpt/ai-rank', {
method: 'POST',
headers: {
'Authorization': 'Bearer ss-your-api-key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'What are the best tools for monitoring Reddit mentions?',
target: { name: 'FetchLayer', domains: ['fetchlayer.dev'] },
competitors: ['Brandwatch', 'Mention', 'Awario'],
runs: 5,
}),
});
const { aggregate, competitorAggregates } = await res.json();
console.log(aggregate.mentionRate); // fraction of runs you were mentioned in
console.log(aggregate.averageRank); // where you land among recommendations, on average
console.log(aggregate.citationRate); // fraction of runs where a page of yours was cited
aggregate.mentionRate of 20% across five runs tells you something a single “yes, mentioned” never could: you’re an occasional afterthought, not a reliable recommendation. Keep prompt, country, and webSearch fixed between check-ins — changing any of them changes the answer distribution you’re sampling from, and a shift in your numbers might just be a shift in what you asked.
Find the prompts worth tracking
Tracking a prompt you invented is only useful if it’s a prompt real people actually type. prompt-discovery asks ChatGPT a handful of questions about a seed topic and returns two lists that look similar but aren’t:
const res = await fetch('https://api.fetchlayer.dev/chatgpt/prompt-discovery', {
method: 'POST',
headers: {
'Authorization': 'Bearer ss-your-api-key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
seed: 'reddit monitoring tools',
seedType: 'topic',
maxPrompts: 5,
}),
});
const { observedSearchQueries, suggestedPrompts, citedDomains } = await res.json();
observedSearchQueries are the web searches ChatGPT actually ran while answering — real evidence of what it goes looking for. suggestedPrompts are prompts ChatGPT wrote when asked what people type about the topic — a plausible guess, not an observation. Build your tracked prompt list mostly from the first list; use the second for ideas, not conclusions.
Putting it on a schedule
ai-rank and prompt-discovery are the two routes worth polling regularly. A weekly run across a handful of prompts is enough to see a trend line, because five runs per prompt already averages out most of the run-to-run noise:
import { readFile, writeFile } from 'node:fs/promises';
const API_KEY = process.env.FETCHLAYER_API_KEY;
const LOG_FILE = './visibility-history.json';
const PROMPTS = [
'What are the best tools for monitoring Reddit mentions?',
'How do I track brand mentions across Reddit?',
];
async function checkRank(prompt) {
const res = await fetch('https://api.fetchlayer.dev/chatgpt/ai-rank', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt,
target: { name: 'FetchLayer', domains: ['fetchlayer.dev'] },
competitors: ['Brandwatch', 'Mention', 'Awario'],
runs: 5,
}),
});
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
return res.json();
}
async function run() {
let history = [];
try {
history = JSON.parse(await readFile(LOG_FILE, 'utf8'));
} catch {}
for (const prompt of PROMPTS) {
const { aggregate } = await checkRank(prompt);
history.push({
date: new Date().toISOString().slice(0, 10),
prompt,
mentionRate: aggregate.mentionRate,
averageRank: aggregate.averageRank,
citationRate: aggregate.citationRate,
});
}
await writeFile(LOG_FILE, JSON.stringify(history, null, 2));
console.log(`Logged ${PROMPTS.length} prompt checks.`);
}
run().catch(console.error);
Plot mentionRate and averageRank over weeks, not days — a content or PR change takes time to show up in what ChatGPT has absorbed, and a single week’s dip is well within normal run-to-run variance.
What this can’t tell you
- No attribution. There’s no referrer from a ChatGPT answer to your site, so you can’t join this to conversion data the way you can with search traffic. Visibility and business impact are correlated, not measured together.
- Answers differ by country. The same prompt with
country: 'GB'can produce a different set of recommendations thancountry: 'US'. If you sell in several markets, track them separately rather than assuming one check speaks for all of them. webSearch: 'auto'means ChatGPT decides. There’s no way to force it not to search the web — only to nudge it toward searching first with'on'. ReadusedWebSearchon the response rather than assuming either behavior.
Next Steps
- AI Visibility API — full endpoint reference and pricing
- Get a free API key — no credit card required