There are two questions, and only the second one is actually useful.
First: does your brand appear in AI answers at all? That is the diagnosis. For most small brands the answer is zero, and then you are stuck.
Second: which pages do the models cite in your category? That is the instruction. Once you know that YouTube, Wikipedia, and Reddit are the sources in your field, you know where you need to show up.
The skill answers both. Data comes through AIsa via its AI Optimization endpoint, which indexes mentions inside AI answers. The skill runs in Claude Code, Cursor, OpenClaw, Hermes, and anything else that reads SKILL.md folders.
The skill is a folder holding a SKILL.md and a few Python files. Claude reads folders
like this at startup and volunteers itself when a request matches. Nothing to configure,
you only have to put it in the right place.
Download: geo-analyse-skill.zip · Source: github.com/e3xler/geo-analyser
| Scope | Folder | Applies to |
|---|---|---|
| Everywhere | ~/.claude/skills/ | all your projects |
| One project | <project>/.claude/skills/ | this repo, teammates included |
Start with the first one. The folder must be named geo-analyse or Claude will not
find the skill.
mkdir -p ~/.claude/skills
unzip ~/Downloads/geo-analyse-skill.zip -d ~/.claude/skills/
Better if you want to pull updates:
mkdir -p ~/.claude/skills
git clone https://github.com/e3xler/geo-analyser.git ~/.claude/skills/geo-analyse
Update later with git -C ~/.claude/skills/geo-analyse pull.
ls ~/.claude/skills/geo-analyse/SKILL.md
If the path comes back, the skill is installed. Restart Claude Code afterwards, skills are read at session start. A running session will not pick up the new folder.
You do not call the skill with a command, you just say what you want:
Run a GEO analysis for Personio, domain personio.de, category HR software.
Claude matches the description in SKILL.md, reads the instructions, and runs the
steps. If you prefer typing them yourself, the commands in step 4 work the same.
The format is not Claude-Code-only. Cursor, OpenClaw, Hermes, Codex, and other runtimes read the same skill folders, just at a different path. Drop the folder wherever your environment looks for skills, the contents stay identical.
No agent needed either. The package includes app/scan.html. Double-click it, enter
your key once, hit Scan. No Python, no terminal, no install. More on that at the end of
this page.
Python 3.10 or newer. Nothing else, no pip install. The client uses the standard
library only, so it runs inside any agent session. Check with python3 --version.
The skill pulls its data through AIsa, so you need your own access. Takes two minutes.
Use this link to AIsa and new accounts get 50 percent off their first top-up. Disclosure: I am an AIsa partner and the link is attributed to me. It costs you nothing extra, and if you would rather skip it, the rest of this guide works the same.
Then sign up in the AIsa Console. Three routes: email, Google, or GitHub. With email you verify the address first and set the password afterwards.
New accounts start with 2 US dollars in credit. That covers roughly twenty calls, enough for your first comparison runs. You only need to top up after that, which is exactly what the discount applies to.
Registration drops you straight onto the API Keys page, where a key has already been generated for you. Copy it right away and store it somewhere safe. It is tied to your billing, so it does not belong in client-side code, in a public repo, or in a chat.
An AIsa key starts with sk-aisa-.
This is the step most people skip, and it matters most. On the same page you can give every key a quota, a maximum amount that this specific key is allowed to spend.
That is not the same as your balance. Your balance is the pot, the quota is the brake on one key. Spending is always capped by whichever of the two is lower. If you use the key for an experiment or hand it to someone else, this keeps a runaway loop from burning your whole balance.
Five dollars is a sensible start. Around fifty calls, and you notice immediately if something goes sideways.
Funding happens on the Wallet page in the console, by card via Stripe or by stablecoin. The same page shows what you have spent so far and how many requests are behind it.
Volume discounts start at fifty dollars, documented as five percent up to twenty percent at a thousand. For monitoring a handful of brands per week you will not need them.
Two lines, and the key never touches your shell history:
read -rs "AISA_API_KEY?AIsa key: " && export AISA_API_KEY
python3 ~/.claude/skills/geo-analyse/scripts/install_key.py
read -rs echoes nothing and the shell does not interpret special characters in the key. The second script writes a backup and stores the key in ~/.claude/settings.local.json with file mode 600.
Verify it landed:
python3 ~/.claude/skills/geo-analyse/scripts/doctor.py
The doctor describes the shape of your key without printing it, and tests both API surfaces separately.
python3 ~/.claude/skills/geo-analyse/scripts/geo_analyse.py \
--brand "AI agent" --domain your-domain.com --out ~/geo-analyse
You get an HTML dashboard, the condensed metrics as JSON, and all four raw responses. Inside an agent session a sentence like "run a GEO analysis for my brand" works too, the skill is found through its description.
For the question of which category has any volume at all, there is a second entry point. It needs one API call per target instead of four:
python3 ~/.claude/skills/geo-analyse/scripts/compare.py \
--own-domain your-domain.com \
"AI agent" "AI agency" "AI consulting"
Domains and keywords can be mixed, detection is automatic.
Five categories, German market, measured on 4 August 2026:
| Category | Mentions | AI search volume |
|---|---|---|
| KI Agent | 2,007 | 1,319,940 |
| Claude Code | 809 | 458,510 |
| KI Beratung | 130 | 77,970 |
| KI Agentur | 30 | 22,020 |
| AI Automatisierung | 17 | 9,190 |
Three things in there I did not know before.
YouTube is the most cited source in every single category. For "KI Agent" it accounts for 1,253 of 2,007 mentions, more than half. Wikipedia, Reddit, and GitHub follow. The models cite video and community, not company blogs.
"KI Agentur" and "AI Automatisierung" barely exist. 30 and 17 mentions. Positioning on those terms means positioning on an empty field. "KI Agent" is worth sixty times as much.
My own domain shows up in none of the five. That is uncomfortable, and exactly why I built this thing.
Using your brand name as the target. Small brands return zero, which also leaves the domain and page lists empty. That is not a bug. I checked it against a control: "OpenAI" returns 50,926 mentions on identical settings, my own brand returns zero. Use your category as the target instead, at least then you see who owns the field.
Forgetting market and language. The defaults are Germany and German. For international brands you need --location "United States" --language English, otherwise you are measuring past your target market.
Passing brand and domain as targets together. The API intersects multiple targets, it does not add them up. "KI Agent" alone returns 2,007 hits, together with a third-party domain 290, together with my own domain zero. The skill handles this now: the brand defines the search space, the domain is only located inside the results.
Billing is per call, roughly 0.10 US dollars. A single analysis is four calls, so about 0.40. A comparison across five categories cost me 0.50. Actual cost is printed after every run and shown as a tile in the dashboard, so you never have to take my number for it.
Rejected requests cost nothing. Experimenting is free, only a valid response gets billed.
Your starting credit covers the first twenty calls. When you top up after that, the discount from step 2 applies.
The package includes app/scan.html, a single file with no dependencies. Double-click
it, enter your key once, then a brand and a category, and hit Scan. The key stays in
your browser's localStorage and never sits in the file.
It shows the same data as the command line, but additionally sorts the cited domains by type (video, encyclopedia, community, review site, social, vendor) and derives concrete next steps from that: which source type owns your field, where you are missing, which terms are too small to position on, and where competitors show up inside your own brand query.
Two things so there are no surprises. The page works locally only. On a server or as a shared page, the browser's security policy blocks the API call. And never pass on a copy with your key filled in, it bills straight against your balance.
No spam, unsubscribe at any time
