Why a curated prompt set
A raw list of every query a brand ranks for is not a useful measurement instrument. It is dominated by branded navigation queries, long-tail noise, and queries that no LLM user would type. The platform curates:- For question-shape: queries that look like natural language questions
- For intent coverage: prompts that span the six registered intents
- For demand: queries with real search volume from GSC
- For bias: prompts that do not lead, favour, or name the tracked brand
The six intents
Every prompt carries one intent label. The intents are defined insrc/geo/prompts/__init__.py:
The
comparison intent allows competitor names (the tracked brand is still forbidden). The brand_research intent is the only one that requires the tracked brand name — this is the intent for branded reputation measurement.
What quotas mean
A quota is the target number of prompts per intent. The prompt generator produces candidates per intent, scores them by demand and importance, and selects the best candidates up to the quota. Quotas are set per workspace and vary with the prompt set size. Quotas prevent any single intent from dominating the set. A prompt set with 80%discovery prompts would under-represent comparison and problem-solution visibility, which are often where brand mentions cluster.
How prompts are seeded from GSC
The seed pipeline (src/geo/prompts/seed.py) reads GSC queries, filters for question-shaped text, deduplicates, and ranks by impressions. Seeds are tagged by source:
brand_seed: the query matched the brand’s regexgsc: organic query that did not match the brandbrain: from the workspace’s ICP research artifacts
discovery prompt seeded from a 10,000-impression query carries more weight than one from a 50-impression query.
Generation and discrimination
The generator (src/geo/prompts/generate.py) takes seeds, intent templates, and the workspace ICP description, and calls an LLM (Claude Sonnet 5 via OpenRouter) to produce candidate prompts.
Each candidate passes through discrimination (src/geo/prompts/discriminate.py):
- Deterministic checks. Rejects prompts that name the tracked brand (except
brand_research), use leading language, or contain prohibited terms. - Model-assisted critic. A second LLM evaluates the candidate for bias, leading questions, and unnatural phrasing.
- Deduplication. Semantic clustering prevents near-duplicate prompts.
Why prompts are not hand-written
Hand-written prompt sets have three problems:- Scale. A useful measurement instrument needs hundreds of prompts across all intents and categories. Hand-writing that many is expensive and slow.
- Bias. A human writing prompts naturally includes known brands and preferred categories. This inflates visibility for familiar brands and deflates it for unknowns.
- Freshness. Search demand changes. A hand-written set from three months ago misses new queries.