Look here's the deal. If your marketing team is about to spend real money on AI visibility software, someone will ask you the engineer, to "just evaluate the options".
Before you start an enterprise geo monitoring software comparison, build the smallest possible version of the thing yourself. You'll learn what you actually need to measure, and you'll have a baseline to judge every vendor against.
This post walks through a minimal setup based on the measurement framework in Kiyado's guide to GEO metrics. The example is an exhibitions company in Dublin that runs trade shows and wants to know whether AI assistants recommend its events. The company and the prompts are illustrative
What we're measuring
Kiyado's guide lists seven GEO metrics. Three are things you can record directly from AI answers:
Brand mention rate: how often the brand appears across a fixed set of prompts
Citation rate: how often the brand's own content is used as a source
Competitor visibility: who appears for the same prompts
Two need human judgement:
Brand accuracy: is the description correct?
Citation quality: is the cited source relevant and authoritative?
And two come from your existing analytics:
AI-referred traffic, where reliable referral data exists
Conversions, such as exhibitor enquiries or visitor registrations
The point of this build is to get the first five into a consistent, repeatable format.
A note on terms of service
Don't scrape AI assistants' consumer interfaces with headless browsers. That usually breaks their terms of service. Either record answers manually (it's fine for 20 to 50 prompts) or use the official APIs each provider offers, within their terms. Check each provider's current documentation, because API access to search-grounded answers varies and changes.
Step 1: Define a fixed prompt set
The guide is emphatic: use the same prompts every time. Store them in version control so changes are deliberate and visible.
prompts.yaml : fixed prompt set, version 1 (do not edit in place; add v2 if needed)
version: 1
brand: "Example Expo Ireland"
competitors: ["Competitor Events A", "Competitor Events B"]
prompts:
- id: info-01 intent: informational text: "What are the biggest B2B trade shows in Ireland?"
- id: comp-01 intent: comparison text: "Which Dublin exhibition is better for food industry suppliers?"
- id: comm-01 intent: commercial text: "Where can I book an exhibitor stand at a Dublin trade show?"
- id: brand-01 intent: brand text: "Is Example Expo Ireland worth exhibiting at?"
- id: ind-01 intent: industry text: "Trade shows in Dublin for medical device manufacturers" The five intent types match the guide: informational, comparison, commercial, brand and industry-specific. Step 2: Record each run in a flat table Each time you run the set, log one row per prompt per assistant. Keep it boring. CREATE TABLE geo_runs ( run_date DATE NOT NULL, assistant TEXT NOT NULL, -- e.g. 'chatgpt', 'perplexity', 'google_ai' prompt_id TEXT NOT NULL, brand_mentioned BOOLEAN NOT NULL, brand_cited BOOLEAN NOT NULL, -- own site used as a source competitors TEXT, -- comma-separated names that appeared accurate BOOLEAN, -- NULL until a human reviews it notes TEXT, PRIMARY KEY (run_date, assistant, prompt_id) ); The accurate column is deliberately nullable. Someone who knows the business has to review descriptions. The guide's warning applies: a mention with outdated or wrong information isn't a positive result. Step 3: Compute the core rates import csv from collections import Counter, defaultdict
def rates(path):
runs = defaultdict(list)
with open(path) as f:
for row in csv.DictReader(f):
runs[(row["run_date"], row["assistant"])].append(row)
for (date, assistant), rows in sorted(runs.items()):
n = len(rows)
mentioned = sum(r["brand_mentioned"] == "true" for r in rows)
cited = sum(r["brand_cited"] == "true" for r in rows)
reviewed = [r for r in rows if r["accurate"] in ("true", "false")]
wrong = sum(r["accurate"] == "false" for r in reviewed)
rivals = Counter(c.strip() for r in rows for c in r["competitors"].split(",") if c.strip())
print(f"{date} {assistant}: mention {mentioned}/{n}, cited {cited}/{n}, "
f"inaccurate {wrong}/{len(reviewed)} reviewed, top rivals {rivals.most_common(3)}")
rates("geo_runs.csv")
That's it: mention rate, citation rate, accuracy issues and the competitors who show up most. Run it monthly.
Step 4: Join it to business data
The guide's fourth step is to connect visibility to business data. Export monthly exhibitor enquiries and visitor registrations, plus branded search volume if you track it, and put them next to the rates. You're looking for direction over several months, not proof from one.
Be honest about attribution. AI can influence someone before they ever visit your site, so a rising mention rate with flat traffic isn't necessarily a failure. It's one reason the guide says traffic shouldn't be the only GEO KPI.
Step 5: Now evaluate vendors
With a month or two of baseline data, you can ask vendors sharp questions:
Can I import or define my own fixed prompt set, and version it?
Do you distinguish mentions from citations?
How do you handle accuracy? Is there a review workflow, or only counts?
Which assistants do you cover, and how do you collect answers within their terms?
Can I export raw rows, not just charts?
Any tool that can't beat your 50 lines of Python on these points isn't worth the licence. The guide also mentions audit tools such as Geoptie and SEOmator for content and technical readiness. They answer a different question, why you're missing, and complement monitoring rather than replace it. Verify their current features before relying on them.
Step 6: Add a simple review workflow
The accuracy column is where most teams cut corners, so make it easy. After each run, export every row where brand_mentioned is true and accurate is still empty. Send that list to someone in the business who knows the facts, such as the events director for an exhibitions company. They mark each description as right or wrong and add a note on what's wrong: an old venue, last year's dates, a show that no longer runs.
That review is the part software can't fully automate. A tool can tell you the brand was mentioned. Only someone who knows the business can tell you the mention was correct.
What the first month usually tells you
For most teams, the first baseline is humbling, and that's useful. It typically shows three things:
A handful of prompts where you appear, often brand prompts you'd expect to win
A cluster of commercial and comparison prompts where competitors appear and you don't
At least one description that's out of date
Each of those becomes a ticket: a page to improve, a listing to correct, a topic to cover. The guide's fifth step, "find the gaps", is really just this list.
Limits of this approach
AI answers vary between runs. Consider running each prompt more than once and recording the majority result.
Location and personalisation can change answers. Note where and how you ran them.
Manual collection doesn't scale to thousands of prompts. That's exactly when buying software makes sense.
If you'd rather have the prompt set, review process and reporting set up for you, Kiyado works with Dublin teams remotely.
Talk to Kiyado about AI visibility measurement in Dublin →