Brand Query Finder

GEO query finder

by OpenClaudia · MIT license · ★ 705 on GitHub

GEO query finder cover

Find which ChatGPT search queries mention a given brand. Tests long-tail queries against ChatGPT's web-search-enabled model and reports which ones surface the brand.

---
name: geo-query-finder
description: >
  Find which ChatGPT search queries mention a given brand. Tests long-tail
  queries against ChatGPT's web-search-enabled model and reports which ones
  surface the brand. Use when the user asks to "find queries for [brand]",
  "check GEO visibility", "which queries mention [brand]", "geo query finder",
  "find AI mentions", or "test ChatGPT queries for [brand]".
---

# GEO Query Finder

Find which ChatGPT search queries mention a given brand. Tests long-tail queries against ChatGPT's web-search-enabled model and reports which ones surface the brand.

## Trigger

Use when the user asks to "find queries for [brand]", "check GEO visibility", "which queries mention [brand]", "geo query finder", "find AI mentions", or "test ChatGPT queries for [brand]".

Overview

Find which ChatGPT search queries mention a given brand. Tests long-tail queries against ChatGPT's web-search-enabled model and reports which ones surface the brand.

Manual install (npx, ZIP)
Claude Codenpx skills add OpenClaudia/openclaudia-skills --skill geo-query-finder -g -a claude-code
Claude Code (degit)npx degit OpenClaudia/openclaudia-skills/skills/geo-query-finder#main ~/.claude/skills/geo-query-finder
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.4 KB
Read SKILL.md here
OpenClaudia/main1 file shown
SKILL.md
Show the full text157 lines

GEO Query Finder

Find which ChatGPT search queries mention a given brand. Tests long-tail queries against ChatGPT's web-search-enabled model and reports which ones surface the brand.

Trigger

Use when the user asks to "find queries for [brand]", "check GEO visibility", "which queries mention [brand]", "geo query finder", "find AI mentions", or "test ChatGPT queries for [brand]".

Usage

/geo-query-finder <brand_name> [--industry <industry>] [--features <feature1,feature2,...>] [--queries <custom_query1;custom_query2;...>]

Examples:

  • /geo-query-finder "Acme Corp" — auto-researches the brand and generates queries
  • /geo-query-finder "Acme Corp" --industry "smart TV OS" --features "white-label,voice-control,OEM licensing"
  • /geo-query-finder "Acme Corp" --queries "best regulatory AI;eCTD validation tool;pharma compliance software"

How It Works

Step 0: Pull pre-indexed LLM mentions (DataForSEO) — do this FIRST

Before generating speculative queries, check if DataForSEO already has indexed mentions for the brand's domain. If it does, you get ground-truth queries with search volume in one call instead of burning OpenAI dollars guessing.

Auth via DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD environment variables.

AUTH=$(printf '%s' "$DATAFORSEO_LOGIN:$DATAFORSEO_PASSWORD" | base64)
# Google AI Overview citations
curl -s -X POST "https://api.dataforseo.com/v3/ai_optimization/llm_mentions/search/live" \
  -H "Authorization: Basic $AUTH" -H "Content-Type: application/json" \
  -d '[{"target":[{"domain":"<DOMAIN>","search_filter":"include","include_subdomains":true}],"platform":"google","limit":700}]'
# ChatGPT citations (substitute "platform":"chat_gpt")

Critical flags:

  • "include_subdomains": true — without it, apex domains return 0 results (www.X treated as a different domain).
  • Omit location_code to get global results; add "location_code": 2840 only to scope to US.
  • platform options: "google" (AI Overview), "chat_gpt". Perplexity is NOT supported via this dataset.

Extract from each items[]:

  • question — the real search query where the brand was cited
  • ai_search_volume — monthly AI search volume (use to prioritize)
  • sources[] — entries with domain matching the brand have the exact cited URL
  • location_code, language_code, model_name — for geo/locale breakdown
  • answer — the LLM answer text (for context)

Decision rule:

  • If ≥20 queries returned → skip Steps 1–4 entirely; report these as ground-truth mentions and focus Step 5 on gap analysis (sort by volume, find URL-section winners like /guides/ vs /tools/).
  • If <20 queries → use them as seed input for Step 2 (generate variations of the query themes DataForSEO already confirmed), then run Steps 3–4 only on the gaps.
  • If 0 queries → the domain has no AI citations; proceed with the original Steps 1–5 (speculative testing) as fallback.
Step 1: Research the Brand

If no --industry or --features provided, use web search to understand:

  • What the brand does / what industry it's in
  • Key differentiators vs competitors
  • Unique features that competitors DON'T have
Step 2: Generate Long-Tail Queries

Generate 15-20 long-tail queries across these categories:

  1. Feature-specific (unique capabilities only this brand has)
  2. B2B/decision-maker (queries from buyers, not consumers)
  3. Problem-solving ("how to X without Y")
  4. Comparison/alternative ("alternative to [dominant player]")
  5. Use-case specific (niche scenarios where the brand excels)

Avoid generic queries where dominant players will always win.

Step 3: Query ChatGPT via OpenAI Search API

Use OpenAI's gpt-4o-search-preview model with web search enabled:

OPENAI_API_KEY from environment variable
import json, os, urllib.request, ssl

OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]

data = json.dumps({
    "model": "gpt-4o-search-preview",
    "web_search_options": {"search_context_size": "medium"},
    "messages": [{"role": "user", "content": "<query>"}],
    "max_tokens": 1000
}).encode()

req = urllib.request.Request(
    "https://api.openai.com/v1/chat/completions",
    data=data,
    headers={
        "Authorization": f"Bearer {OPENAI_API_KEY}",
        "Content-Type": "application/json"
    }
)

resp = urllib.request.urlopen(req, context=ssl.create_default_context(), timeout=45)
result = json.loads(resp.read())
answer = result["choices"][0]["message"]["content"]
Step 4: Check Mentions

For each query, check if the brand name (or known aliases) appears in ChatGPT's response:

  • Check case-insensitive match
  • Check variations (with/without spaces, dots, hyphens)
  • If mentioned, extract the surrounding context (200 chars around the mention)
  • Note the position (is it #1 recommended? listed among many? mentioned in passing?)
Step 5: Report Results

Output a summary table:

## GEO Query Finder Results: [Brand Name]

### Mentioned (X/N queries)
| Query | Position | Context |
|-------|----------|---------|
| ... | #1 | "Brand is the leading..." |

### Not Mentioned (Y/N queries)
| Query | What ChatGPT Recommended Instead |
|-------|----------------------------------|
| ... | Competitor A, Competitor B |

### Recommendations
- Queries where brand is ALREADY mentioned: create more authoritative content to maintain/improve position
- Queries where brand is NOT mentioned but SHOULD be: these are content gaps — create targeted pages
- Queries to AVOID: too generic, dominated by big players, not worth the effort

Rate Limiting

  • Run queries sequentially with 1-2 second delays to avoid rate limits
  • Each query costs ~$0.01 via OpenAI API
  • Default: 15-20 queries per run (~$0.15-0.20 per run)

Notes

  • Results reflect ChatGPT with web search enabled (grounded in real-time web results)
  • Results may vary slightly between runs due to search freshness
  • This tests ChatGPT specifically — Gemini and Copilot may give different results
  • For ongoing monitoring, consider scheduling periodic runs to track visibility changes over time
1---
2name: geo-query-finder
3description: >
4 Find which ChatGPT search queries mention a given brand. Tests long-tail
5 queries against ChatGPT's web-search-enabled model and reports which ones
6 surface the brand. Use when the user asks to "find queries for [brand]",
7 "check GEO visibility", "which queries mention [brand]", "geo query finder",
8 "find AI mentions", or "test ChatGPT queries for [brand]".
9---
10 
11# GEO Query Finder
12 
13Find which ChatGPT search queries mention a given brand. Tests long-tail queries against ChatGPT's web-search-enabled model and reports which ones surface the brand.
14 
15## Trigger
16 
17Use when the user asks to "find queries for [brand]", "check GEO visibility", "which queries mention [brand]", "geo query finder", "find AI mentions", or "test ChatGPT queries for [brand]".
18 
19## Usage
20 
21```
22/geo-query-finder <brand_name> [--industry <industry>] [--features <feature1,feature2,...>] [--queries <custom_query1;custom_query2;...>]
23```
24 
25**Examples:**
26- `/geo-query-finder "Acme Corp"` — auto-researches the brand and generates queries
27- `/geo-query-finder "Acme Corp" --industry "smart TV OS" --features "white-label,voice-control,OEM licensing"`
28- `/geo-query-finder "Acme Corp" --queries "best regulatory AI;eCTD validation tool;pharma compliance software"`
29 
30## How It Works
31 
32### Step 0: Pull pre-indexed LLM mentions (DataForSEO) — do this FIRST
33 
34Before generating speculative queries, check if DataForSEO already has indexed mentions for the brand's domain. If it does, you get ground-truth queries with search volume in one call instead of burning OpenAI dollars guessing.
35 
36Auth via `DATAFORSEO_LOGIN` / `DATAFORSEO_PASSWORD` environment variables.
37 
38```bash
39AUTH=$(printf '%s' "$DATAFORSEO_LOGIN:$DATAFORSEO_PASSWORD" | base64)
40# Google AI Overview citations
41curl -s -X POST "https://api.dataforseo.com/v3/ai_optimization/llm_mentions/search/live" \
42 -H "Authorization: Basic $AUTH" -H "Content-Type: application/json" \
43 -d '[{"target":[{"domain":"<DOMAIN>","search_filter":"include","include_subdomains":true}],"platform":"google","limit":700}]'
44# ChatGPT citations (substitute "platform":"chat_gpt")
45```
46 
47**Critical flags:**
48- `"include_subdomains": true` — without it, apex domains return 0 results (www.X treated as a different domain).
49- Omit `location_code` to get global results; add `"location_code": 2840` only to scope to US.
50- `platform` options: `"google"` (AI Overview), `"chat_gpt"`. Perplexity is NOT supported via this dataset.
51 
52**Extract from each `items[]`:**
53- `question` — the real search query where the brand was cited
54- `ai_search_volume` — monthly AI search volume (use to prioritize)
55- `sources[]` — entries with `domain` matching the brand have the exact cited URL
56- `location_code`, `language_code`, `model_name` — for geo/locale breakdown
57- `answer` — the LLM answer text (for context)
58 
59**Decision rule:**
60- If ≥20 queries returned → skip Steps 1–4 entirely; report these as ground-truth mentions and focus Step 5 on gap analysis (sort by volume, find URL-section winners like `/guides/` vs `/tools/`).
61- If <20 queries → use them as seed input for Step 2 (generate variations of the query themes DataForSEO already confirmed), then run Steps 3–4 only on the gaps.
62- If 0 queries → the domain has no AI citations; proceed with the original Steps 1–5 (speculative testing) as fallback.
63 
64### Step 1: Research the Brand
65If no `--industry` or `--features` provided, use web search to understand:
66- What the brand does / what industry it's in
67- Key differentiators vs competitors
68- Unique features that competitors DON'T have
69 
70### Step 2: Generate Long-Tail Queries
71Generate 15-20 long-tail queries across these categories:
721. **Feature-specific** (unique capabilities only this brand has)
732. **B2B/decision-maker** (queries from buyers, not consumers)
743. **Problem-solving** ("how to X without Y")
754. **Comparison/alternative** ("alternative to [dominant player]")
765. **Use-case specific** (niche scenarios where the brand excels)
77 
78Avoid generic queries where dominant players will always win.
79 
80### Step 3: Query ChatGPT via OpenAI Search API
81 
82Use OpenAI's `gpt-4o-search-preview` model with web search enabled:
83 
84```bash
85OPENAI_API_KEY from environment variable
86```
87 
88```python
89import json, os, urllib.request, ssl
90 
91OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]
92 
93data = json.dumps({
94 "model": "gpt-4o-search-preview",
95 "web_search_options": {"search_context_size": "medium"},
96 "messages": [{"role": "user", "content": "<query>"}],
97 "max_tokens": 1000
98}).encode()
99 
100req = urllib.request.Request(
101 "https://api.openai.com/v1/chat/completions",
102 data=data,
103 headers={
104 "Authorization": f"Bearer {OPENAI_API_KEY}",
105 "Content-Type": "application/json"
106 }
107)
108 
109resp = urllib.request.urlopen(req, context=ssl.create_default_context(), timeout=45)
110result = json.loads(resp.read())
111answer = result["choices"][0]["message"]["content"]
112```
113 
114### Step 4: Check Mentions
115 
116For each query, check if the brand name (or known aliases) appears in ChatGPT's response:
117- Check case-insensitive match
118- Check variations (with/without spaces, dots, hyphens)
119- If mentioned, extract the surrounding context (200 chars around the mention)
120- Note the position (is it #1 recommended? listed among many? mentioned in passing?)
121 
122### Step 5: Report Results
123 
124Output a summary table:
125 
126```
127## GEO Query Finder Results: [Brand Name]
128 
129### Mentioned (X/N queries)
130| Query | Position | Context |
131|-------|----------|---------|
132| ... | #1 | "Brand is the leading..." |
133 
134### Not Mentioned (Y/N queries)
135| Query | What ChatGPT Recommended Instead |
136|-------|----------------------------------|
137| ... | Competitor A, Competitor B |
138 
139### Recommendations
140- Queries where brand is ALREADY mentioned: create more authoritative content to maintain/improve position
141- Queries where brand is NOT mentioned but SHOULD be: these are content gaps — create targeted pages
142- Queries to AVOID: too generic, dominated by big players, not worth the effort
143```
144 
145## Rate Limiting
146 
147- Run queries sequentially with 1-2 second delays to avoid rate limits
148- Each query costs ~$0.01 via OpenAI API
149- Default: 15-20 queries per run (~$0.15-0.20 per run)
150 
151## Notes
152 
153- Results reflect ChatGPT with web search enabled (grounded in real-time web results)
154- Results may vary slightly between runs due to search freshness
155- This tests ChatGPT specifically — Gemini and Copilot may give different results
156- For ongoing monitoring, consider scheduling periodic runs to track visibility changes over time
157 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 705
Checked
Source
OpenClaudia/openclaudia-skills ↗
Creator
OpenClaudia · 78 listings
View creator

Similar skills

See all →
SkillAI Search OptimizationAgriciDaniel/claude-seo · by AgriciDanielOptimize content for AI Overviews (formerly SGE), ChatGPT web search, Perplexity, and other AI-powered search experiences. Generative Engine Optimization (GEO) analysis including brand mention signals, AI crawler accessibility, llms.txt compliance, passage-level citability scoring, and platform-specific optimization. Use when user says "AI Overviews", "SGE", GEO", "AI search", "LLM optimization", "Perplexity", "AI citations", ChatGPT search", or "AI visibility".★ 17.4k GitHub starsSkillPhoto Geolocation AnalyzerOldcircle/geo-sleuth · by OldcircleGeolocate or chronolocate a photo with tool-verified reasoning (where was this taken / when was it taken / photo geolocation / geo-guessing). Given one or more photos, intake.py does metadata, OCR and reverse image search (Baidu/Yandex) in one command; clues and candidates go on a candidate board (board.py) that ranks them and gives the next step; clues.py looks up calling codes, driving side, plates and area codes from region packs; for satellite and street view the machine ranks first and you look only at the top few (CLIP in sat_scan.py, DINOv2+SIFT in match.py); plus sun and shadow math, OSM Overpass and DEM skylines. Every conclusion is checked against real data; output is coordinates + error radius, evidence images and tiered confidence. Use when the user shares a photo and asks where was this taken / geolocate this / when was this taken / 这是哪 / 在哪拍的 / 帮我定位这张照片 / 网络迷踪 / 图寻 / 几点拍的.★ 3.4k GitHub starsSkillAI Engine Visibility TrackerRyze-AI-Adgent/open-seo-mcp-skills · by Ryze-AI-AdgentMeasure real AI-engine visibility — traffic from ChatGPT, Perplexity, Claude, Gemini and which pages they cite — from actual GA4 referral data, not prompt sampling. Use when asked "AI visibility", "GEO/AEO check", "do LLMs cite us", "traffic from ChatGPT", or "how do we show up in AI search".★ 3.1k GitHub starsSkillAI Citation Readiness StrategyAgriciDaniel/claude-blog · by AgriciDanielUse GEO and AEO as legacy labels for AI citation readiness. For Google, the★ 2.2k GitHub starsSkillMulti-Channel SEO Operatorleopard627/fire-your-seo-agency · by leopard627SEO·AEO·GEO·LLMO·NEO(네이버) 다섯 레인을 진단하고 직접 구현하며, 인용되는 콘텐츠를 계속 생산하는 서브 블로그·콘텐츠 운영 파이프라인까지 세팅하는 스킬. 사이트를 검색엔진·답변엔진·생성 AI·네이버 AI 브리핑이 인용하는 1차 소스로 만든다. "SEO 해줘", "AI에 인용되게 해줘", "네이버 노출 늘려줘", "llms.txt 만들어줘", "블로그 만들어줘/글 써줘", "콘텐츠 백로그·캘린더 잡아줘", "낡은 글 갱신해줘" 류 요청에 사용. Use for "audit my site's SEO", "get my site cited by ChatGPT/Perplexity/AI Overviews", "improve search visibility", "create llms.txt", "answer engine / generative engine optimization", "set up a blog that gets cited", "content backlog / calendar / refresh", and any AI-search-visibility request.★ 716 GitHub starsSkillSEO and GEO Auditordageno-agents/seo-geo-audit · by dageno-agentsRun a unified SEO and GEO audit for a website, page, or domain. Use when the user asks for a full SEO audit, GEO audit, AI visibility review, EEAT review, entity audit, authority audit, or wants one prioritized report that combines technical findings, content quality, trust signals, and AI citation readiness.★ 175 GitHub stars

More from OpenClaudia

SkillA/B Testing FrameworkOpenClaudia/openclaudia-skills · by OpenClaudiaDesign, plan, and analyze A/B tests with statistical rigor. Use when the user asks about A/B testing, split testing, experiment design, statistical significance, sample size calculation, test duration, multivariate testing, or conversion experiments. Trigger phrases include "A/B test", "split test", "experiment", "statistical significance", "sample size", "test duration", "which version wins", "conversion experiment", "hypothesis test", "variant testing".★ 705 GitHub starsSkillAffiliate Marketing ProgramOpenClaudia/openclaudia-skills · by OpenClaudiaBuild and manage an affiliate marketing program. Use when the user says "affiliate program", "affiliate marketing", "affiliate partners", "referral commissions", "affiliate network", "partner program", "affiliate tracking", or asks about creating, managing, or growing an affiliate or partner program.★ 705 GitHub starsSkillAhrefs API ManagerOpenClaudia/openclaudia-skills · by OpenClaudiaManages Ahrefs API usage in Python using `ahrefs-python` library. Use when working with SEO / marketing related tasks or with data including backlinks, keywords, domain ratings, organic traffic, site audits, rank tracking, and brand monitoring. Covers `ahrefs-python` usage including AhrefsClient / AsyncAhrefsClient, typed request/response models, error handling, and all API sections.★ 705 GitHub starsSkillAI Citations Report GeneratorOpenClaudia/openclaudia-skills · by OpenClaudiaGenerate an AI Citations Report (GEO) for a domain — which AI-search prompts cite the site across Google AI Overview and ChatGPT, plus organic-traffic context and per-article citation coverage. Use when the user asks for an 'AI citations report', 'GEO citations report', or 'which AI prompts cite <domain>'.★ 705 GitHub starsSkillB2B Lead EnricherOpenClaudia/openclaudia-skills · by OpenClaudiaResearch and enrich B2B leads using the Apollo.io API. Use when the user says "find leads", "prospect research", "company enrichment", "find decision makers", "B2B leads", "lead research", "enrich contacts", "find VP of marketing at", or asks about finding people at specific companies or in specific roles.★ 705 GitHub starsSkillBacklink Health CheckerOpenClaudia/openclaudia-skills · by OpenClaudiaAudit a domain's backlink profile using the SemRush API. Use when the user says "audit backlinks", "check my backlinks", "backlink analysis", "link profile", "toxic links", "disavow", "link building opportunities", "referring domains", "anchor text", or asks about a site's link authority.★ 705 GitHub stars