Install
openclaw skills install seo-keyword-research-aisa-apiUse this skill when a user asks for SEO keyword research, keyword discovery, search volume analysis, keyword difficulty, search intent mapping, topic clusters, content opportunities, competitor keyword gaps, or a keyword strategy for a domain, URL, product, market, or seed topic. When a website is provided, crawl and interpret the site first, then use AIsa API access to DataForSEO keyword, SERP, trend, Labs, and OnPage endpoints plus AIsa LLM reasoning to find non-brand keyword opportunities. Use when: the user needs web search, research, source discovery, or content extraction.
openclaw skills install seo-keyword-research-aisa-apiThis skill builds a practical SEO keyword strategy from a domain, URL, seed topic, product, market, or competitor set. When the user provides a website, start by crawling and interpreting that website. Use the crawl to understand the product, audience, features, use cases, and business direction before querying keyword data. Then combine structured DataForSEO data through AIsa with AIsa LLM reasoning for clustering, search-intent interpretation, opportunity scoring, SERP-based page recommendations, and content planning.
This skill requires an AIsa API key.
export AISA_API_KEY="your-aisa-api-key"
Use these AIsa endpoints:
https://api.aisa.one/apis/v1/...https://api.aisa.one/v1/chat/completionsNever print or commit API keys. If the key is missing, ask the user to set AISA_API_KEY.
Works with any agentskills.io-compatible harness, including Claude Code, Claude, OpenAI Codex, Cursor, Gemini CLI, OpenCode, Goose, OpenClaw, Hermes, and other agent runtimes that support skill folders.
Requires Python 3, curl, and AISA_API_KEY. Get an API key at https://aisa.one.
export AISA_API_KEY="your-aisa-api-key"
python3 scripts/site_crawler.py \
https://example.com \
--max-pages 12 \
--out site-profile.json
python3 scripts/aisa_client.py data \
/apis/v1/dataforseo/dataforseo_labs/google/keyword_suggestions/live \
payload.json \
--out keyword-suggestions.json
Use the crawl output to generate seed topics first. Then use AIsa DataForSEO endpoints to validate search demand, difficulty, intent, and SERP reality. Finally use the AIsa LLM gateway to cluster, score, and summarize the verified keyword data.
Use this skill for requests like:
Do not use this skill for full technical audits, backlink audits, schema implementation, or content writing unless the user specifically asks for keyword research as part of that workflow.
Collect or infer:
If country and language are missing, default to the user's market when obvious. Otherwise use United States and English, and note the assumption.
When the user provides a domain or URL, crawl the site before querying keyword tools.
python3 scripts/site_crawler.py \
https://example.com \
--max-pages 12 \
--out site-profile.json
Prioritize:
Use the crawl to produce a short business profile:
Do not start with brand or domain keywords unless the user explicitly asks for brand SEO. Keep brand keywords in a separate "brand validation" section only after the product and category opportunities are mapped.
If the local crawl is blocked, shallow, or heavily JavaScript-rendered, use AIsa/DataForSEO OnPage helpers as fallback evidence:
/apis/v1/dataforseo/on_page/content_parsing/live/apis/v1/dataforseo/on_page/task_post/apis/v1/dataforseo/on_page/pages/apis/v1/dataforseo/on_page/raw_html/apis/v1/dataforseo/on_page/summary/{id}Use AIsa LLM reasoning to turn the crawl into seed topics. These are hypotheses, not final keywords.
Generate seed topics from:
Require the LLM to explain why each seed topic matches the crawled site. Remove seeds that cannot be justified from the crawl.
Use AIsa DataForSEO endpoints in this order when inputs are available:
/apis/v1/dataforseo/dataforseo_labs/google/keyword_suggestions/live/apis/v1/dataforseo/dataforseo_labs/google/keyword_ideas/live/apis/v1/dataforseo/dataforseo_labs/google/related_keywords/live/apis/v1/dataforseo/keywords_data/google_ads/keywords_for_keywords/live/apis/v1/dataforseo/dataforseo_labs/google/keywords_for_site/live/apis/v1/dataforseo/keywords_data/google_ads/keywords_for_site/live/apis/v1/dataforseo/keywords_data/google_ads/search_volume/live/apis/v1/dataforseo/keywords_data/clickstream_data/global_search_volume/live/apis/v1/dataforseo/keywords_data/dataforseo_trends/explore/live/apis/v1/dataforseo/dataforseo_labs/google/bulk_keyword_difficulty/live/apis/v1/dataforseo/dataforseo_labs/google/search_intent/live/apis/v1/dataforseo/dataforseo_labs/google/keyword_overview/liveKeep source labels for each keyword: site, seed, suggestion, related, competitor, trend, serp, or llm-generated. Treat llm-generated keywords as hypotheses until validated by search volume or SERP data.
When competitors are provided, or when DataForSEO returns SERP competitors:
/apis/v1/dataforseo/dataforseo_labs/google/competitors_domain/live/apis/v1/dataforseo/dataforseo_labs/google/domain_intersection/live/apis/v1/dataforseo/dataforseo_labs/google/ranked_keywords/live/apis/v1/dataforseo/dataforseo_labs/google/serp_competitors/live/apis/v1/dataforseo/dataforseo_labs/google/relevant_pages/liveFor the strongest candidate keywords, inspect live search results:
/apis/v1/dataforseo/serp/google/organic/live/advanced/apis/v1/dataforseo/serp/ai_summary/apis/v1/dataforseo/serp/screenshotUse SERP data to identify ranking page types, dominant content formats, user intent, SERP features, freshness patterns, weak results, and content gaps.
Before scoring:
Use AIsa LLM reasoning to cluster validated keywords. Prefer compact structured output.
Suggested cluster dimensions:
Do not let the LLM invent metrics. It may classify, summarize, and prioritize, but metrics must come from AIsa/DataForSEO data or be marked as qualitative.
Each final keyword cluster must include five representative keywords with metrics when at least five validated keywords exist. If a cluster has fewer than five validated keywords, show every validated keyword and mark the cluster as needing more expansion.
High-opportunity keywords must meet both thresholds:
Do not loosen this threshold silently. If no keywords meet both thresholds, say so and provide a separate "near opportunities" section using the closest candidates.
For every high-opportunity keyword, explain:
Score each keyword or cluster from 0 to 25:
Use a simple label:
High priority: strong demand, clear fit, feasible SERP, valuable intentMedium priority: useful but constrained by difficulty, ambiguity, or lower demandLow priority: weak fit, weak demand, or poor feasibilityValidate first: interesting idea with incomplete dataInspect SERPs for high-opportunity keywords and the strongest representative keyword in each cluster. Recommend a page type based on observed ranking results:
vs, alternative, competitor, best, or SERP contains comparison lists and review pages.For each recommendation, explain the SERP evidence and the suggested page angle.
Return a concise keyword research report with:
Use references/report-template.md when a full report is requested.
Use the AIsa LLM gateway for:
Recommended request pattern:
curl -sS "https://api.aisa.one/v1/chat/completions" \
-H "Authorization: Bearer $AISA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-mini",
"messages": [
{
"role": "system",
"content": "You are an SEO strategist. Use only provided metrics as facts. Mark unverified ideas clearly."
},
{
"role": "user",
"content": "Cluster these keyword rows by topic, search intent, and best page type."
}
]
}'
Use scripts/aisa_client.py for quick API calls:
python3 scripts/site_crawler.py \
https://example.com \
--max-pages 12 \
--out site-profile.json
python3 scripts/aisa_client.py data \
/apis/v1/dataforseo/dataforseo_labs/google/keyword_suggestions/live \
payload.json \
--out keyword-suggestions.json
python3 scripts/aisa_client.py chat \
--model gpt-5-mini \
--system system-prompt.txt \
--prompt cluster-prompt.txt \
--out clusters.md
references/aisa-api-map.md for endpoint groups and usage notes.references/report-template.md for the final keyword research report structure.