GEO tracking you run yourself

Five categories. One brand never came up.

Engineering software, Indian equities, Kubernetes monitoring, UK accounting, running shoes. Five real questions put to a real model, kept word for word. Pick one and read what it said, which brands it chose to name, and in what order it named them.

The question asked

01The problem

Search could be counted. An answer cannot.

- 01Search could be countedTen ranked links, a position you could track, and a visit that arrived with a referrer attached. Every part of that loop was countable.

- 02An answer replaces all of itThe assistant reads the pages for your buyer and writes one paragraph naming two or three products. No list, no position, and usually no click.

- 03Nothing tells you when you are left outA rank tracker watches a page your buyer never opened. Analytics can only count visits that happened. The answer that omitted you sends nothing at all.

- 04So put the question yourselfCiteGEO asks the models what your buyers ask, keeps every answer whole, and links every figure back to the sentence it was counted from.

02The evidence

Every answer, kept whole.

A score is a summary of something, and you cannot audit a summary. CiteGEO writes down the answer itself: the question that produced it, every brand it named, the model, the date, and the sentences in the order they arrived. The corridor behind is one card per answer already on disk.

One model is an opinion. Five of them are a measurement.

Take one of those five categories and go deeper. The same question, put to five providers within the same minute. Each one came back with a different shortlist. Each shortlist makes a number, and the numbers do not agree.

Put to all five, same runwhat is the best stock screening website for indian stocks

- 1Tickertape

- 2Screener.in

- 3TradingView

- 68visibility

- 1Screener.in

- 2Trendlyne

- 3Chartink

- 81visibility

- 1TradingView

- 2Moneycontrol

- 3Tickertape

- no mention of Screener.in

- 0never named

- 1Screener.in

- 2StockEdge

- 74visibility

- 1Moneycontrol

- 2Groww

- 3Tickertape

- no mention of Screener.in

- 0never named

Read the anthropic run on its own and you would report that you lead the category. Read the google run and you would report that you do not exist. Both figures are true about a model. Neither is true about the brand.

What the run actually measured

44.6mean across five providers

0 to 81the spread it came from

This is why the provider list is the method rather than a compatibility table. OpenAI, Anthropic, Gemini, Perplexity, an Azure OpenAI deployment, or a model rented through a cloud account you already hold on Bedrock, Vertex AI, Databricks or watsonx: CiteGEO puts the question to every provider you configure and keeps the spread attached to the mean. A brand at 81 on one provider and 0 on another has a different problem from one sitting at 45 everywhere, and a single figure hides which of the two you have.

Your turn

Move them and watch the score lie.

The run above already happened, so it stays as it came back. These five are yours to drag. Everything underneath recomputes as you move them, which is the argument in one control: the mean is not the finding, the distance between the ends is.

44.6citation score

0 to 81the spread behind it

never name you at all

03The fix

An answer is assembled from pages somebody already wrote.

A model with search on does not invent the shortlist. It reads the open web and returns the pages it used. You cannot edit the answer, but you can change what it reads, and that list is the only actionable thing in this whole category.

Three names, one paragraph, no list and no position.

- a forum thread comparing the tools

- a roundup post naming five of them

- a documentation page

- one of your own pages

CiteGEO keeps the sources a provider returns apart from URLs that merely appear in the answer text, because the two are not the same evidence. Then it names the pages worth going after.

The pages you have to get into

Every page a model cited for one of your topics, with the question it was cited for. An opening is one a rival won on a question that never named you at all. That is the shortest route to being in the answer: the page already ranks with the model, so earn a mention on it or write the one that replaces it.

What kind of page wins this topic

- Community threads42%

- Comparison posts26%

- Reference pages18%

- Video walkthroughs14%

This is the part worth acting on. Chasing five URLs is a week of outreach. Knowing that four in ten citations on this topic are forum threads tells you what to make, and a model that reaches for one thread will reach for the next one like it.

Four of these five are pages you do not control, and every one of them was cited on a question where no answer named you. Nearby topics on the same page count too: a model that reaches for a page once tends to reach for it again.

What you get

Measurement you can argue with.

An absence is reported as an absence. Never as a zero, never as a default, never as a plausible looking value.

- Visibility score

- presence84%

- prominence82%

- sentiment96%

- Never the composite on its own. The three figures that made it, with the counts they came from.

- Share of voice

- you87%

- rival73%

- rival47%

- rival27%

- Every brand named, run over run, with the standings beside the chart instead of a colour key.

- Topics by competitor

- Every topic against every rival, three levels deep, down to the question itself.

- Citation gap

- a forum thread

- a roundup post

- not one of yours

- The pages models cite for your topics that you do not own. That list is the work.

- Prompt volume

- How often anyone actually asked, counted in an openly licensed corpus of real conversations.

- AI crawler analytics

- Which crawlers reached your site, and the three states a frequency chart hides.

Self-host

Four commands

and it is yours.

You hold the provider key, you pay the provider directly, and the answers stay on your disk. CiteGEO adds no cost of its own and sends nothing anywhere except to the APIs you configure.

Get the source$ git clone https://github.com/ankit373/citegeo

$ npm ci

$ cp .env.example .env

$ npm run server

listening on http://127.0.0.1:8787Contact

There is one person at the other end.

Questions about running it, a provider you want supported, a figure that looks wrong, or a patch worth reviewing. Mail reaches the person who maintains CiteGEO rather than a queue, so say what you are trying to measure and you will get a useful answer back.

- Running itSetup, provider keys, self-hosting, anything in the readme that did not survive contact with your machine.Mail about setup

- A provider to addA model or gateway you want measured alongside the rest. Bedrock arrived this way.Request a provider

- A number you doubtEvery figure links to the answers behind it, so send the figure and the answer you think it got wrong.Challenge a figure