GEO analysis skill
Run a full GEO/SEO client analysis for a domain via the Enception external API — start the analysis, poll its status, and download the PDF report covering AI visibility, market research, and competitors.
by OpenClaudia·MIT license·★ 705 Stars on the repo·GitHub ↗
npx degit OpenClaudia/openclaudia-skills/skills/geo-analysis#main ~/.claude/skills/geo-analysisChecked ·commit main
Files of GEO analysis
Show the full text64 lines
GEO Analysis
Run a full GEO/SEO analysis for a domain and get a client-ready PDF report: AI visibility (is the brand recommended by ChatGPT / Google AI), deep market research, and competitor landscape.
Thin wrapper over the Enception client-analysis API. Three operations: start, status, report (plus an optional brand-name correction).
Disclosure: contributed by Enception AI and calls Enception's paid external API. Docs: https://www.enception.ai/doc/api-client-analysis
Requirements
ENCEPTION_ANALYSIS_API_KEY— sent as thex-api-keyheader. Self-serve: sign up at https://www.enception.ai, then generate a free-tier key under Account → API Key (2 analyses/month free; contact the team for higher limits). Rate limit: 10 requests/minute.
1. Start
POST https://www.enception.ai/api/external/client-analysis/start
Required: website_url, primary_region, core_goals. Sensible defaults: primary_region=us, core_goals=traffic, output_language=en, competitors=[]. The API normalizes URLs to a bare domain and rejects IPs. Returns { id, message } — save the id.
Pick output_language from an explicit request first, then the user's conversation language, then the domain TLD (.cn → zh; otherwise en).
curl -s -X POST "https://www.enception.ai/api/external/client-analysis/start" \
-H "x-api-key: $ENCEPTION_ANALYSIS_API_KEY" -H "Content-Type: application/json" \
-d '{"website_url":"https://example.com/","primary_region":"us","competitors":[],"core_goals":"traffic","output_language":"en"}'
Only override primary_region / core_goals / competitors if the user specifies. core_goals is free text (e.g. traffic, ranking). Competitors: [{"name":"X","domain":"x.com"}, ...] (max 5). For multiple domains, fire one POST each and collect the ids.
2. Status
POST https://www.enception.ai/api/external/client-analysis/status with body { "id": "<id>" } and the same x-api-key header. Returns { status: 'pending' | 'failed' | 'succeeded', progress_percent?, pdf_url? }.
A full run takes ~20–45 minutes — the bottleneck is the deep market-research step. Poll on a long interval (minutes, not seconds). succeeded ⇒ ready to fetch the report. If a run fails or stalls indefinitely, report that to the user rather than inventing results.
3. Report
GET https://www.enception.ai/api/external/client-analysis/report/<id> — public, no auth; shareable by id. Works once status is succeeded (also serves partial runs).
curl -s -o geo-analysis-example.pdf \
"https://www.enception.ai/api/external/client-analysis/report/<id>"
Confirm it's a real PDF (file geo-analysis-example.pdf), then give the user the file and/or the public URL.
4. Fix "zero visibility" (brand-name correction)
POST https://www.enception.ai/api/external/client-analysis/update-brand with body { "id", "brand_name"?, "alternative_names": [...] } and the x-api-key header.
When a report shows zero/low AI visibility but the brand IS recommended by ChatGPT/Google, it's almost always because the brand is only known by its fused domain label (e.g. pudurobotics) while AI engines say "Pudu Robotics". Supply the real name + aliases and the route recomputes visibility from the already-stored answers (no re-query — fast), then re-fetch the report.
curl -s -X POST "https://www.enception.ai/api/external/client-analysis/update-brand" \
-H "x-api-key: $ENCEPTION_ANALYSIS_API_KEY" -H "Content-Type: application/json" \
-d '{"id":"<id>","brand_name":"Pudu Robotics","alternative_names":["Pudu","PuduBot"]}'
Returns { success, mention_rate, overall_score, average_position, analysis_regenerated }. New analyses resolve the brand name automatically; this is the manual correction path for existing reports.
| 1 | |
| 2 | name geo-analysis |
| 3 | description "Run a full GEO/SEO client analysis for a domain via the Enception external API — start the analysis, poll its status, and download the PDF report covering AI visibility, market research, and competitors. Use when the user says 'run a client analysis', 'analyze <domain> for GEO', 'GEO analysis for <domain>', or 'check analysis status'." |
| 4 | |
| 5 | |
| 6 | # GEO Analysis |
| 7 | |
| 8 | Run a full GEO/SEO analysis for a domain and get a client-ready PDF report: AI visibility (is the brand recommended by ChatGPT / Google AI), deep market research, and competitor landscape. |
| 9 | |
| 10 | Thin wrapper over the Enception client-analysis API. Three operations: **start**, **status**, **report** (plus an optional brand-name correction). |
| 11 | |
| 12 | **Disclosure:** contributed by Enception AI and calls Enception's **paid** external API. Docs: https://www.enception.ai/doc/api-client-analysis |
| 13 | |
| 14 | ## Requirements |
| 15 | |
| 16 | `ENCEPTION_ANALYSIS_API_KEY` — sent as the `x-api-key` header. Self-serve: sign up at https://www.enception.ai, then generate a free-tier key under Account → API Key (2 analyses/month free; contact the team for higher limits). Rate limit: 10 requests/minute. |
| 17 | |
| 18 | ## 1. Start |
| 19 | |
| 20 | `POST https://www.enception.ai/api/external/client-analysis/start` |
| 21 | |
| 22 | Required: `website_url`, `primary_region`, `core_goals`. Sensible defaults: `primary_region=us`, `core_goals=traffic`, `output_language=en`, `competitors=[]`. The API normalizes URLs to a bare domain and rejects IPs. Returns `{ id, message }` — **save the `id`**. |
| 23 | |
| 24 | Pick `output_language` from an explicit request first, then the user's conversation language, then the domain TLD (`.cn` → `zh`; otherwise `en`). |
| 25 | |
| 26 | |
| 27 | curl -s -X POST "https://www.enception.ai/api/external/client-analysis/start" \ |
| 28 | -H "x-api-key: $ENCEPTION_ANALYSIS_API_KEY" -H "Content-Type: application/json" \ |
| 29 | -d '{"website_url":"https://example.com/","primary_region":"us","competitors":[],"core_goals":"traffic","output_language":"en"}' |
| 30 | |
| 31 | |
| 32 | Only override `primary_region` / `core_goals` / `competitors` if the user specifies. `core_goals` is free text (e.g. `traffic`, `ranking`). Competitors: `[{"name":"X","domain":"x.com"}, ...]` (max 5). For multiple domains, fire one POST each and collect the ids. |
| 33 | |
| 34 | ## 2. Status |
| 35 | |
| 36 | `POST https://www.enception.ai/api/external/client-analysis/status` with body `{ "id": "<id>" }` and the same `x-api-key` header. Returns `{ status: 'pending' | 'failed' | 'succeeded', progress_percent?, pdf_url? }`. |
| 37 | |
| 38 | A full run takes **~20–45 minutes** — the bottleneck is the deep market-research step. Poll on a long interval (minutes, not seconds). `succeeded` ⇒ ready to fetch the report. If a run fails or stalls indefinitely, report that to the user rather than inventing results. |
| 39 | |
| 40 | ## 3. Report |
| 41 | |
| 42 | `GET https://www.enception.ai/api/external/client-analysis/report/<id>` — public, no auth; shareable by id. Works once status is `succeeded` (also serves partial runs). |
| 43 | |
| 44 | |
| 45 | curl -s -o geo-analysis-example.pdf \ |
| 46 | "https://www.enception.ai/api/external/client-analysis/report/<id>" |
| 47 | |
| 48 | |
| 49 | Confirm it's a real PDF (`file geo-analysis-example.pdf`), then give the user the file and/or the public URL. |
| 50 | |
| 51 | ## 4. Fix "zero visibility" (brand-name correction) |
| 52 | |
| 53 | `POST https://www.enception.ai/api/external/client-analysis/update-brand` with body `{ "id", "brand_name"?, "alternative_names": [...] }` and the `x-api-key` header. |
| 54 | |
| 55 | When a report shows zero/low AI visibility but the brand IS recommended by ChatGPT/Google, it's almost always because the brand is only known by its fused domain label (e.g. `pudurobotics`) while AI engines say "Pudu Robotics". Supply the real name + aliases and the route recomputes visibility from the already-stored answers (no re-query — fast), then re-fetch the report. |
| 56 | |
| 57 | |
| 58 | curl -s -X POST "https://www.enception.ai/api/external/client-analysis/update-brand" \ |
| 59 | -H "x-api-key: $ENCEPTION_ANALYSIS_API_KEY" -H "Content-Type: application/json" \ |
| 60 | -d '{"id":"<id>","brand_name":"Pudu Robotics","alternative_names":["Pudu","PuduBot"]}' |
| 61 | |
| 62 | |
| 63 | Returns `{ success, mention_rate, overall_score, average_position, analysis_regenerated }`. New analyses resolve the brand name automatically; this is the manual correction path for existing reports. |
| 64 |
Discussion
Alternatives
Browse more free Claude skills or everything in Marketing.