From nodeshub-seo-skills
Provides a shared Python API client for NodesHub, enabling SERP extraction, keyword expansion, and intent classification. Use for checking API balance, testing endpoints, or troubleshooting connectivity.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nodeshub-seo-skills:nod-nodeshub-apiThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
```bash
# Check setup
python3 .claude/skills/nod-nodeshub-api/scripts/check_setup.py
# Check balance
python3 .claude/skills/nod-nodeshub-api/scripts/balance.py
# Test SERPdata
python3 .claude/skills/nod-nodeshub-api/scripts/serpdata.py "seo tools" --gl us --hl en
# Test Query Fan-out
python3 .claude/skills/nod-nodeshub-api/scripts/fanout.py "seo tools" --hl en --mode standard
# List countries/languages
python3 .claude/skills/nod-nodeshub-api/scripts/params.py countries
python3 .claude/skills/nod-nodeshub-api/scripts/params.py languages
# Sync skills registry (updates SKILL.md + CLAUDE.md)
python3 .claude/skills/nod-nodeshub-api/scripts/sync_skills.py
# Scaffold a new skill (auto-syncs after creation)
python3 .claude/skills/nod-nodeshub-api/scripts/create_skill.py \
--name "nod-new-skill" --description "What it does" --cost "1 token"
If NodesHub is not set up: Walk the user through the full process: (1) Get API key from nodeshub.io (API Playground). (2) Save to .claude/settings.local.json under env.NODESHUB_API_KEY, or run python3 .claude/skills/nod-nodeshub-api/scripts/save_key.py YOUR_KEY. (3) Point to setup/README.md for details and security. (4) Have them run check_setup.py to verify.
This skill is the base API client. The real power is in skills that use it:
| Skill | What it does | Cost per keyword |
|---|---|---|
/nod-competitor-tracker | Tracks competitor domains across keyword sets, shows who ranks where | 1 token |
/nod-content-auditor | Audits content against SERP reality — finds gaps, missing keywords | ~8.5 tokens (standard) / ~31 tokens (reasoning) |
/nod-content-brief | Combines SERP + keyword research into a ready-to-write content brief | ~8.5 tokens (standard) / ~31 tokens (reasoning) |
/nod-featured-snippet-hunter | Finds Featured Snippet opportunities — steal, defend, or target for your domain | 1 token |
/nod-intent-classifier | Classifies search intent (info/commercial/transactional/navigational) from SERP signals | 1 token |
/nod-keyword-research | Expands a seed keyword into related phrases, questions, long-tail variations, topic clusters | 7.5 tokens (standard) / 30 tokens (reasoning) |
/nod-paa-miner | Mines People Also Ask questions from SERPs, deduplicates, optionally clusters by topic | 1 token + optional OpenRouter |
/nod-rank-tracker | Tracks keyword positions for a domain over time, compares changes | 1 token |
/nod-serp-analysis | Analyzes Google top 10 for a keyword — who ranks, SERP features, intent, content gaps | 1 token |
/nod-serp-clusters | ||
/nod-visibility-monitor | Calculates weighted SEO visibility score, compares with competitors | 1 token |
After checking balance, always tell the user what they can do with their remaining tokens. Example for 75 tokens: ~10 SERP analyses, ~5 keyword researches (standard), or ~3-4 full content briefs.
| Endpoint | Script | Cost | Key Params |
|---|---|---|---|
/search | serpdata.py | 1 token | keyword, gl, hl, device |
/query-fanout | fanout.py | 7.5 (standard) / 30 (reasoning) | keyword, hl, mode |
/intent-classifier | beta | 2 tokens | keyword, gl, hl |
/api-key/balance | balance.py | 0 | — |
/google-params/gl | params.py countries | 0 | — |
/google-params/hl | params.py languages | 0 | — |
Other skills import the shared client:
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / 'nod-nodeshub-api' / 'scripts'))
from client import NodeshubClient
client = NodeshubClient() # auto-resolves key from settings/env/prompt
results = client.search("keyword", gl="us", hl="en")
fanout = client.query_fanout("keyword", hl="en", mode="standard")
balance = client.get_balance()
The client resolves NODESHUB_API_KEY in this order:
api_key argumentNODESHUB_API_KEY environment variable.claude/settings.local.json → env.NODESHUB_API_KEY (repo-level)~/.claude/settings.local.json (user-level)~/.claude/settings.json (user-level).claude/settings.local.jsonFirst run: If no key is found, the script will ask for it and save automatically.
Get your key at nodeshub.io — scroll to API Playground, click "Copy to clipboard". Free plan includes 100 tokens.
| Symptom | Cause | Fix |
|---|---|---|
401 Unauthorized | Invalid or expired key | Get new key from nodeshub.io |
Insufficient balance | No tokens left | Buy credits at nodeshub.io |
| Connection timeout | Network issue | Check internet, retry |
npx claudepluginhub senuto/nodeshub-seo-skills --plugin nodeshub-seo-skillsInteractive onboarding guide for the NodesHub SEO Skills toolkit. Helps users understand available skills, agents, and how to get started based on their goal.
Generates ready-to-paste cURL/Python/TypeScript recipes and wires up Project API state (projects, keywords, audits, AIRT prompts) for the SE Ranking API.
Performs SEO keyword research using DataForSEO API: keyword analysis, YouTube research, competitor analysis, SERP analysis, and trend tracking. Requires DataForSEO credentials.