Originally published on the ATI Lab blog. Full context, including our 23-prompt AI Overview study, is there.
You can build a working AI visibility tracker in about 200 lines of Python. It polls Google AI Overviews for a fixed prompt set, records which domains get cited, captures your own organic position on the same query, and writes dated JSON so months compare cleanly. Our 23-prompt run cost $0.092 in API credit. The commercial tools that rank for this term start at $99–$165 a month. Here is the build, and an honest account of what it cannot do.
This guide is written from our own tracker, which we run against atilab.io. The code below is the code we actually execute — not pseudocode. Research and drafting were AI-assisted; every number is from our own run files or a source linked in-line, and a human checked each one.
Three things, and most dashboards report only the first: Does an AI answer appear at all for the query? Trigger rate is the denominator for everything else. If AI Overviews fire on 20% of your category's queries, this whole exercise is a side project. In ours they fired on 21 of 23. Are you cited? Split branded from non-branded and never blend them. Branded citations tell you your entity is understood. Non-branded citations tell you whether you are in the consideration set. Only the second is a growth metric. Where do you rank in classic organic on that same query? This is the column almost nobody captures, and it is the one that converts "we are invisible" into a specific instruction. More on why below.
Everything else — sentiment, share-of-voice indices, a single blended visibility score — is a presentation layer over those three fields. You can add it later. You cannot add the third field later, because it has to be captured in the same request, on the same day, against the same SERP.
Our numbers, from the run files. The Google signal uses DataForSEO's live advanced SERP endpoint, which returned an API-reported cost of $0.0040 per query on every call in our run. Twenty-three prompts is $0.092. Run it monthly and the year costs about $1.10.
For comparison, published pricing on the tools currently ranking for "ai visibility tracker" (checked 12 August 2026): Rankscale lists Pro at $99/month for 1,200 credits, Growth at $385/month, Enterprise at $780/month. Semrush bundles AI visibility into its main plans — Starter at $165.17/month billed annually, with 50 prompts tracked daily, rising to 200 daily prompts on Advanced at $455.67/month.
Those are not equivalent products and we are not going to pretend they are. The subscriptions sample answers from ChatGPT, Gemini, Perplexity, Claude and others, schedule the runs, store history, and produce reports somebody else maintains. The DIY build covers two surfaces and produces a JSON file. What the cost comparison establishes is narrower and still useful: the underlying measurement is cheap. Price the subscription against convenience and coverage, not against access to data you could not otherwise get.
The single biggest determinant of whether your tracker is useful is the prompt set, and it is the part no tool can do for you. Ours is 23 prompts: 4 branded, 19 non-branded, tagged by funnel stage and by the page each one should ideally send traffic to. Each record carries two forms of the same intent:
The prompt is the conversational form a person types into an assistant. The query is the search-shaped form you send to Google. They are different strings on purpose, and collapsing them into one field is the most common way these projects produce uninterpretable data.
Two rules that matter more than the prompt wording: Keep the ids stable forever. The value of this tracker is the diff between months. Change a prompt and its history is worthless; add prompts at the end with new ids instead. Tag each prompt with the page it should serve. When a prompt shows an AI Overview and you are absent, the target field tells you instantly which page has failed, rather than starting a research project.
One request per query. The parameter that matters is loadasyncai_overview — without it the AI Overview block is frequently missing from the response even when it fires on the live SERP, and you will conclude your trigger rate is low when it is not.
Note the fallback on the reference: some entries carry a url, some carry only a domain. Read one field and you will silently drop citations.
Because citation is mostly downstream of ranking. In our study we took six non-branded queries where an AI Overview fired, captured all 31 citations, and checked each cited domain against the classic results for the identical query: 74% also ranked in the organic top 20, 48% in the top 10, and only 25% were cited without ranking on the first two pages. Small sample, and we would not present it as a universal law — but the direction is clear enough to plan against. Google is largely drawing its citations from a pool it has already decided to rank. A tracker that reports citations without reporting your position on the same query has hidden the causal variable, and its output is a number you cannot act on.
With both fields, every row falls into one of four cells, and each cell has a different instruction attached:
That distribution is the reason we are unsentimental about AEO tactics. Nineteen of twenty-three prompts told us the same thing: rank first. We published the full findings in our measurement of 23 AI Overviews in our category, including the queries where Google ignored vendor sites entirely.
The second surface worth polling is the embeddings layer that many AI applications query before generating an answer. We use Exa: send the conversational prompt form, and record whether your domain comes back and at what rank.
This signal behaves very differently from the Google one and that is the point of having it. We surfaced in retrieval on 5 of 23 prompts, at ranks 1, 1, 1, 1 and 6 — four first places on a set where Google cited us three times, all branded. Retrieval visibility and citation visibility are not the same thing, and a tracker with one surface will tell you a confident, incomplete story.
