DEV Community

Benedict Mendoza
Benedict Mendoza

Posted on

How to Track Your Brand's Visibility in ChatGPT, Perplexity & Gemini (GEO Monitoring, With Code)

This week I ran a simple test. I asked ChatGPT, Perplexity, and Gemini the same question — "what is the best note-taking app for teams?" — and compared how they treated the brands in the answer.

ChatGPT flat-out recommended Notion, by name, ten times in one answer. Perplexity refused to pick a winner ("there is no single best note-taking app for teams") but still mentioned Notion three times and cited ten sources. Gemini mentioned it eight times and name-dropped Obsidian once. Evernote — a brand that owned this category for a decade — got two mentions across all three engines combined.

If you're Evernote, nobody sends you a report about this. There's no Search Console for ChatGPT. A growing share of product research now happens inside AI assistants, the answers steer real purchase decisions, and most brands have no idea what's being said.

The practice of measuring and improving this is getting called GEO (Generative Engine Optimization). Fancy name, but the underlying job is plain: figure out what the AI engines say when your buyers ask about your category, and track how it changes. Here's how to do it with actual data instead of vibes.

What's worth measuring

While building the tracker, I settled on four numbers per prompt, per engine:

  1. Mention — does the answer name your brand at all?
  2. Position — first name in the answer, or an afterthought behind three competitors?
  3. Share of voice — across your whole prompt set, how often do you appear vs. each competitor?
  4. Citations — which pages did the engine cite, and is your site one of them?

The citations one is underrated. Engines with web search build answers from a small pool of pages they trust. In my Notion test, the sources were things like Zapier's "best note-taking apps" listicle. If the engines keep citing the same three roundups for your category, getting into those roundups probably moves your AI visibility more than anything you publish on your own domain. Citations are the new backlinks, basically.

The problem is doing this every week

Checking by hand works exactly once. Open each engine, ask, read, tally mentions in a spreadsheet. For three prompts that's twenty minutes. For a real setup — say 25 prompts across 3 engines, weekly, because answers drift with every model update — it's hours of tedium that nobody sustains past week two.

There are SaaS tools for this now (Otterly, Peec, Profound, Ahrefs Brand Radar), and some are good, but pricing runs from $29 to over $800 a month with seat licenses and prompt quotas. For an agency juggling ten client brands, or a solo founder who wants one weekly number, the economics are annoying.

What I built instead

I made an Apify Actor that does single prompt-checks and charges per check rather than per month: AI Search Visibility Tracker. Disclosure: I'm the author, so weigh that however you like — the methodology below works whether or not you use my tool.

You give it a brand, aliases, competitors, and the prompts your buyers actually ask. It runs every prompt through ChatGPT, Perplexity, and Gemini with live web search and returns a structured row per prompt-engine pair:

{
  "prompt": "What is the best note-taking app for teams?",
  "engine": "chatgpt",
  "brandMentioned": true,
  "brandMentionCount": 10,
  "brandRank": 1,
  "competitorsMentioned": { "Obsidian": 0, "Evernote": 2, "Coda": 0 },
  "brandCited": true,
  "citations": [{ "url": "https://zapier.com/blog/best-note-taking-apps/" }],
  "answerText": "..."
}
Enter fullscreen mode Exit fullscreen mode

plus a run summary with overall visibility %, per-engine breakdown, and share of voice. Those numbers at the top of this post came straight out of it.

Automating the weekly run

One run is a snapshot; the value is the trend line. The whole loop via API:

curl -X POST "https://api.apify.com/v2/acts/benedictmendoza~ai-search-visibility-tracker/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d @tracking-config.json
Enter fullscreen mode Exit fullscreen mode

Or in JavaScript:

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('benedictmendoza/ai-search-visibility-tracker').call({
    brandName: 'YourBrand',
    competitors: ['CompetitorA', 'CompetitorB'],
    prompts: yourPromptList,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
Enter fullscreen mode Exit fullscreen mode

The lazy-but-solid production setup: an Apify Schedule every Monday morning, dataset auto-exported to Google Sheets. After four Mondays you have a trend line per engine, and the data starts saying interesting things.

Picking prompts (don't invent them)

Bad prompt sets produce useless dashboards. Mine yours from places where real phrasing lives:

  • your highest-converting search queries, reworded as questions
  • "best X for Y" patterns in your category — these dominate AI product recommendations
  • questions your sales team actually gets asked on calls
  • "[competitor] alternative" phrasings

Twenty well-chosen prompts beat two hundred generic ones, and they cost 10x less to track.

Reading the results

A few patterns I've already seen and what they mean:

You're invisible, competitors aren't. Go read the citations field before touching your own site. The pages the engines trust for your category are your outreach hit-list.

Mentioned, but always last. The engines know you exist and don't prefer you. Diff the answerText descriptions of you vs. the leader — the gap is usually positioning or recency of third-party coverage, not product.

Great on Perplexity, absent on ChatGPT. Normal. They cite different source pools. Start with whichever engine your audience actually uses.

brandCited: false even when you're mentioned. The engines describe you from other people's pages. Structured comparison content on your own domain tends to move this one first.

Start the clock now

Whatever tooling you choose, the thing that matters is starting the time series. AI answers about your category are drifting right now, quietly, and you can't retroactively measure last quarter. Fixed prompt set, three engines, weekly cadence — the trend line does the rest.

If you try the Actor and want another engine (Google AI Overviews is next on my list), sentiment scoring, or Slack alerts — the Issues tab is the fastest way to reach me. I answer fast.

Top comments (0)