Command-line tools for keyword research and search visibility checks, built around Russian search (Yandex Wordstat, Yandex Webmaster) and the global engines (Google, Bing). Each tool reads a list of phrases or a spreadsheet, calls a search data API and writes an Excel report.
| Tool | What it does | Data source |
|---|---|---|
wordstat-frequency/ |
Extracts keywords from content briefs (.docx) and fills in Yandex search volume: broad and exact frequency, 24-month dynamics, flags for topics with no demand | Yandex Wordstat API (Yandex Cloud AI Studio) |
keyword-volume/ |
Search volume for the US and other non-Russian markets: Google Ads volume, 12-month trend, CPC, Bing impressions | DataForSEO, Bing Webmaster API |
serp-snapshot/ |
Organic results snapshot for a phrase list in Yandex, Google and Bing: your site's positions, top-N per phrase, a competitor map weighted by search volume | SerpApi |
search-queries-export/ |
Monthly export of the queries a site gets impressions and clicks for, merged from both consoles into one table with brand segments and coverage | Yandex Webmaster API, Google Search Console API |
The tools are independent: each directory has its own dependencies, .env.example and README.
wordstat-frequency output can be fed to serp-snapshot to weight competitors by demand.
- Bun 1.3 or later for
wordstat-frequency,keyword-volumeandserp-snapshot. - Python 3 for
search-queries-export(see its README for the exact packages). - API credentials for the services each tool uses; every README explains where to get them.
- Credentials come from command-line options, environment variables or a
.envfile in the tool's directory (copy.env.example). Environment variables take precedence over.env. - Long runs keep a checkpoint (
*.jsonl) next to the input. A repeated run with the same arguments continues from it and does not pay for the requests already made. - Exit codes of the TypeScript tools:
0everything collected,1invalid arguments or a fatal error,2partial result because an API quota ran out,3partial result because the API kept failing (where the tool distinguishes it). A partial report is always written. - Report sheet and column names are in Russian; each README has a table with their meaning.
cd <tool>
bun install
bun test
bun run typecheck
Tests run offline against local mock servers and recorded fixtures; they need no API keys.