SDK
Keywords
Discover keyword opportunities and find content gaps. No API key required.
researchKeywords(seed, options?)
Discover keywords via Google Autocomplete. Expands your seed keyword into suggestions, questions, and long-tail variations.
Basic usagetypescript
import { researchKeywords } from 'indxel'
const result = await researchKeywords('nextjs seo', {
locale: 'en',
country: 'us',
alphabetExpansion: true, // 'nextjs seo a', 'nextjs seo b', ...
questionKeywords: true, // 'how to nextjs seo', 'what is nextjs seo', ...
prepositionKeywords: true, // 'nextjs seo for', 'nextjs seo vs', ...
timeout: 5000,
})
console.log(result.totalKeywords) // e.g. 87
console.log(result.suggestions) // [{ keyword: 'nextjs seo best practices', source: 'autocomplete' }]
console.log(result.questions) // [{ keyword: 'how to improve nextjs seo', source: 'question' }]
console.log(result.longTail) // [{ keyword: 'nextjs seo vs gatsby seo', source: 'preposition' }]Options
| Parameter | Type | Description |
|---|---|---|
| locale | string | Language code (default: 'en') |
| country | string | Country code (default: 'us') |
| alphabetExpansion | boolean | Expand with A-Z suffixes |
| questionKeywords | boolean | Add 'how to', 'what is', etc. prefixes |
| prepositionKeywords | boolean | Add 'for', 'vs', 'with', etc. suffixes |
| timeout | number | Request timeout in milliseconds |
Result
KeywordResearchResulttypescript
type KeywordResearchResult = {
seed: string
suggestions: KeywordSuggestion[] // Direct autocomplete matches
questions: KeywordSuggestion[] // Question-format keywords
longTail: KeywordSuggestion[] // Alphabet + preposition expansions
totalKeywords: number
}
type KeywordSuggestion = {
keyword: string
source: 'autocomplete' | 'question' | 'alphabet' | 'preposition'
}No API key needed
This uses the public Google Autocomplete endpoint: no API key or billing required. Google may throttle heavy use (HTTP 403/429); the result then reports
blocked, failedRequests and errors instead of an empty list.analyzeContentGaps(keywords, existingPages)
Compare discovered keywords against your existing pages. Find opportunities your content doesn't cover yet.
Usagetypescript
import { analyzeContentGaps, researchKeywords, crawlSite } from 'indxel'
// 1. Get keywords
const keywords = await researchKeywords('nextjs seo')
// 2. Crawl your site
const crawl = await crawlSite('https://mysite.com')
// 3. Find gaps
const gaps = analyzeContentGaps(
keywords.suggestions,
crawl.pages.map(p => ({ url: p.url, title: p.metadata.title }))
)
console.log(gaps.coveragePercent) // 45
console.log(gaps.totalGaps) // 48
console.log(gaps.gaps[0])
// {
// keyword: 'nextjs seo best practices',
// source: 'autocomplete',
// relevance: 'high',
// suggestedType: 'blog',
// suggestedPath: '/blog/nextjs-seo-best-practices'
// }Result
ContentGapResulttypescript
type ContentGapResult = {
covered: CoveredKeyword[] // Keywords your content already covers
gaps: ContentGap[] // Keywords you're missing
totalKeywords: number
totalCovered: number
totalGaps: number
coveragePercent: number // 0-100
}
type ContentGap = {
keyword: string
source: string
relevance: 'high' | 'medium' | 'low'
suggestedType: 'landing' | 'blog' | 'faq' | 'comparison' | 'guide'
suggestedPath: string // Auto-generated URL suggestion
}Suggested types
The
suggestedType is inferred from the keyword pattern. Questions become FAQ or guide pages. "vs" keywords become comparison pages.