Build or Buy an AI Visibility Stack: The Five Silent Wrong Answers an In House Build Produces
What it actually takes to run a multi engine tracker yourself, measured from the defects in our own build, with rupee prices for the alternative.
Published by AI Knows Us · Updated 17 October 2026
The expensive part of building your own AI visibility tracker is not the API bill. It is that a tracker returns a confident number whether or not it is right, and five classes of defect in ours each produced a figure that looked reasonable until somebody went looking. If you are weighing an in house build against a subscription in India, these five are the maintenance you are buying, and none appears on a cost sheet.
We sell the subscription, so take this as an interested party showing you its own bug list. The measurement is genuinely buildable, we built it, and four of the five defects below were found by a check we had to write after the fact.
One: the classifier that counted Google's own documentation as marketing
Our first published source mix said 91.3% of citations went to a vendor's or an agency's own website. It was wrong. The pattern doing the sorting insisted on a literal string being present in a URL, which pushed Google's and OpenAI's own documentation into the bucket labelled vendor marketing. The corrected figure is 85.6%, and the gap between those two numbers is the whole headline of the report.
Classification now passes through a single tested module, and the module refuses to start unless all 24 of its named examples land in the right bucket. That is the first line item in a build: not the sorting code, the test that stops it running when it is broken.
Two: the counting unit, chosen once or argued about forever
Each domain scores once per reading. On that basis the 16 October 2026 run holds 20,143 citations from 1,260 readings, over 4,947 separate hostnames. Change the unit to one row per URL occurrence and the same stored rows come to 36,576. Neither is wrong. They are different measurements wearing the same word, and they sit about sixteen apart because each answer leaned on an average of 15.99 sources.
A build chooses that rule once and never changes it. Switch from deduped to raw between rounds and a client's visibility appears to have grown by a factor nobody can explain. Write the rule into the schema, not into a document.
Three: your data provider's own fetch infrastructure, arriving as publishers
712 cited URLs in that same run belonged to nobody who publishes anything. The source was our data provider's own fetching layer: an iframe proxy and a reverse proxy mirror that both hand Google's documentation back under hostnames of their own. Leave them in and a proxy service ends up listed beside real publishers in your top domains table. Trace each one back to the document it actually serves and the self published share drops from 82.4% to 82.0%. The same exercise on the 15 October run took 85.6% down to 85.3%.
Two of our own live pages printed those hostnames in a table of publishers before this was caught, and both now carry the correction. This defect is specific to buying data rather than fetching it: the artefacts come from how the data was collected, so they are in anybody's feed, and the only way to catch them is to open any cited URL you do not recognise before it reaches a table.
Four: an HTTP 403 that was a rate limiter, and a disproof pass that proved nothing
On 16 October 2026 we ran 220 dated fetches, 11 user agent strings against 16 URLs, and 23 requests came back refused with an HTTP 403. Four hosts answered differently to different agents, which looked like a finding about who blocks which crawler.
We re-ran those four the same day in reversed agent order, 44 requests, and all 44 statuses agreed. That felt like proof and was worthless, because 44 requests to the same four hosts inside one window reproduce a rate limiter rather than test for it. What settled it was a later reading from a different network. Two of the four served the whole article at HTTP 200, a desktop browser among the agents that got it, and one of them answered HTTP 429 outright. Of the 23 recorded failures, 20 arrived with a browser challenge page sitting in the body where a refusal should have been.
The working rule is three readings rather than two. A refusal only counts once a separate session hours later repeats it, and a single 429 anywhere invalidates the batch. Two findings did hold on both readings. OpenAI's own help site turned away every OpenAI crawler we sent, plus Anthropic's and Perplexity's, and a request carrying no agent string, while serving a desktop browser. The Verge turned away PerplexityBot and ClaudeBot and nothing else. Saving every response body made this answerable without re-running the set.
Five: a restated list going stale into a false claim
Read from the operators' own documentation on 16 October 2026, OpenAI documents four crawler identities and not three: GPTBot, OAI-SearchBot, ChatGPT-User and OAI-AdsBot. Two live pages of ours carried the three agent version, one of them with the number written into a sentence, and it had gone false while nothing broke. Any component that restates somebody else's list needs a date attached and a diary entry to re-read it, because the component does not fail when the list changes. It keeps returning the old answer confidently.
What the stack is not responsible for
One number stops a lot of wasted debugging. That engine has now been read 921 times across the two runs without our domain appearing in a single answer. A column reading zero for that long is telling you about the surface, not about a bug in your collector. Build the report so each engine has its own numerator and denominator and the zero is printed rather than averaged away.
The buy side, in rupees, with the date we read it
We do not restate another company's prices, including our competitors'. The reason is a measurement rather than caution. On 17 September 2026 an engine read two comparison pages whose competitor prices carried no link, no date and no source, verified those figures itself, found them accurate, and set both pages aside as advocacy in favour of official sources. So read each vendor's current page on your buying day and log the plan name, the amount, the currency, the term, the volume it covers and the date, together.
Our own rupee prices we will quote, because they are ours and dated. Read on our own pricing page on 16 October 2026, the plans run Rs 499, Rs 2,949, Rs 11,799 and Rs 35,399 a month. The second tier specifies what the money buys: 30 questions tracked, four apps read, 540 answers recorded each month. Extra capacity runs at Rs 353 a credit, each app consuming one credit per question and Claude three. Metered data costs behave the same way whichever side of the decision you land on, which is why the three billing models behind SERP API pricing are the closest map of it.
Questions Indian teams ask before building an AI visibility tracker
Is it cheaper to call the APIs directly than to buy a tool?
On tokens alone, usually. The five defects above are the part that is not on the token bill, and four of the five produced a comfortable looking number rather than an error. Cost the classifier test, the counting rule, the proxy resolution, the three reading rule for refusals and the diary entry to re-read operator documentation, then compare. Thirty questions on two engines in a spreadsheet is buildable in an afternoon; the same thing reported to a client monthly for a year is different work.
What is the first thing to build?
The test that stops the pipeline. Our classifier now refuses to load unless 24 named examples sort correctly, and that rule is what would have caught the 91.3% figure before publication rather than after. When a check reports good news, ask what it would have reported had it been handed nothing.
How many engines should an in house build cover?
Start with the two your buyers use. Our own runs covered ChatGPT and Gemini. Perplexity, Claude and Google AI Overviews were not in either, so a build claiming five surfaces on a dataset of two has the same defect as the pages it is trying to measure.
Can an Indian agency run this as a retainer line instead?
Many should, and the comparison in India is usually a retainer rather than a second subscription. The firms taking Indian AI answers on our 15 October data are small Indian agencies publishing their own pages: upgrowth.in cited in 52 readings, themediaverse.in in 48, nicodigital.com in 44 and hawkorbit.com in 33. Where a retainer already pays somebody to read those answers every week, a licence adds a second opinion rather than a capability.
What your own tracker will tell you on the first run
Probably a small number, because ours did. Our own Indian figure for 16 October 2026 is two source appearances on ChatGPT within 210 readings, and none on Gemini. AI Knows Us exists because that reading is worth having on a schedule across five surfaces and because the pages that change it have to be written by somebody. If you build it instead, build the five guards first and the collector second, and you will spend the year arguing about the result rather than about whether the result is real. The run those figures come from is published in full in the 597 reading benchmark across ChatGPT and Gemini in three markets.