artwist-polyakov/yandex-wordstat
| Анализ поискового спроса через Yandex Wordstat API. частотность запросов, сезонность или региональный спрос. Топ до 2000 запросов, ассоциации, динамика, экспорт CSV. сегментация фраз, расширение семантики, сравнение OR-запросов.
npx skills add https://github.com/artwist-polyakov/polyakov-claude-skills --skill yandex-wordstat
Analyze search demand and keyword statistics using Yandex Wordstat API.
Скилл поддерживает два бэкенда:
cloud (рекомендуется) — Yandex Cloud Search API v2. Нужен config/config.json + service account key. Авторизация через IAM token (JWT с SA-ключа).legacy (deprecated) — старый Wordstat OAuth API. Нужен YANDEX_WORDSTAT_TOKEN в config/.env. Яндекс больше не подключает новых пользователей, но старые токены работают.Auto-selection (cloud-first): cloud выигрывает на tie. Чтобы остаться на legacy явно — YANDEX_WORDSTAT_BACKEND=legacy в config/.env.
Полная инструкция по настройке и troubleshooting: config/README.md.
Миграция в облако: когда Яндекс окончательно отключит legacy — удалите YANDEX_WORDSTAT_TOKEN, заполните config/config.json и config/service_account_key.json. Команды и аргументы скриптов не меняются.
⚠️ Cloud dynamics operator caveat: при --period weekly|monthly cloud-бэкенд поддерживает только оператор +. Минус-слова, кавычки, группировки и точные формы работают только при --period daily. Скилл делает preflight-проверку и падает с понятной ошибкой до запроса. Подробнее — в README.
Before marking ANY query as "target", verify intent via WebSearch!
Query "каолиновая вата для дымохода" looks relevant for chimney seller, but:
For every promising query, ASK YOURSELF:
Always run WebSearch to check:
WebSearch: "каолиновая вата для дымохода" что ищут покупатели
Look at search results:
| Query | Looks like | Actually | Target? |
|-------|------------|----------|---------|
| каолиновая вата для дымохода | chimney buyer | cotton wool buyer | ❌ NO |
| дымоход купить | chimney buyer | chimney buyer | ✅ YES |
| утепление дымохода | chimney buyer | insulation DIYer | ❌ NO |
| дымоход сэндвич цена | chimney buyer | chimney buyer | ✅ YES |
| потерпевший дтп | lawyer client | news reader | ❌ NO |
| юрист после дтп | lawyer client | lawyer client | ✅ YES |
"Для какого региона анализировать спрос?
- Вся Россия (по умолчанию)
- Москва и область
- Конкретный город (какой?)"
НЕ ПРОДОЛЖАЙ пока пользователь не ответит!
"Что именно вы продаёте/рекламируете?
Это важно для фильтрации нецелевых запросов."
bash scripts/quota.shCheck API connection.
bash scripts/quota.sh
Get top search phrases. Supports up to 2000 results and CSV export.
bash scripts/top_requests.sh \
--phrase "юрист дтп" \
--regions "213" \
--devices "all"
# Extended: 500 results exported to CSV
bash scripts/top_requests.sh \
--phrase "юрист дтп" \
--limit 500 \
--csv report.csv
# Max results with comma separator
bash scripts/top_requests.sh \
--phrase "юрист дтп" \
--limit 2000 \
--csv full_report.csv \
--sep ","
| Param | Required | Default | Values |
|-------|----------|---------|--------|
| --phrase | yes | - | text with operators |
| --regions | no | all | comma-separated IDs |
| --devices | no | all | all, desktop, phone, tablet |
| --limit | no | API default (50) | 1-2000 (maps to API numPhrases) |
| --csv | no | - | path to output CSV file |
| --sep | no | ; | CSV separator (; for RU Excel) |
The output contains two sections (both in stdout and CSV):
topRequests) — queries that contain the words from your phrase, sorted by frequency. These are direct variations of the search query. Example: phrase "юрист дтп" → "юрист по дтп", "консультация юриста по дтп".associations) — queries similar by meaning but not necessarily containing the same words, sorted by similarity. These are semantically related searches. Example: phrase "юрист дтп" → "юридическая ответственность", "адвокат аварии".For analysis: top results are your primary keyword pool. assoc results are useful for semantic expansion but often contain noise — always verify intent before including them.
CSV format: UTF-8 with BOM, columns: n;phrase;impressions;type.
When --csv is set, stdout shows first 20 rows per section; full data goes to file.
When --limit is set to a high value (e.g. 500-2000), use CSV export and read the file in chunks:
# Export 2000 results
bash scripts/top_requests.sh --phrase "query" --limit 2000 --csv data.csv
# Read first 50 rows (header + data)
head -n 51 data.csv
# Read rows 51-100
tail -n +52 data.csv | head -50
# Count total rows
wc -l < data.csv
# Filter only associations
grep ";assoc$" data.csv
This approach lets the agent process large datasets without flooding stdout.
Get search volume trends over time.
bash scripts/dynamics.sh \
--phrase "юрист дтп" \
--period "monthly" \
--from-date "2025-01-01"
| Param | Required | Default | Values |
|-------|----------|---------|--------|
| --phrase | yes | - | text |
| --period | no | monthly | daily, weekly, monthly |
| --from-date | yes | - | YYYY-MM-DD |
| --to-date | no | today | YYYY-MM-DD |
| --regions | no | all | region IDs |
| --devices | no | all | all, desktop, phone, tablet |
Get regional distribution.
bash scripts/regions_stats.sh \
--phrase "юрист дтп" \
--region-type "cities"
| Param | Required | Default | Values |
|-------|----------|---------|--------|
| --phrase | yes | - | text |
| --region-type | no | all | cities, regions, all |
| --devices | no | all | all, desktop, phone, tablet |
Show common region IDs.
bash scripts/regions_tree.sh
Find region ID by name.
bash scripts/search_region.sh --name "Москва"
"query"Shows demand ONLY for this exact phrase (no additional words).
"юрист дтп" → "юрист дтп", "юристы дтп"
but NOT "юрист по дтп"
!wordFixes exact word form.
!юрист → "юрист по дтп", "юрист москва"
but NOT "юристы", "юриста"
"!word !word"Exact phrase + exact forms.
"!юрист !по !дтп" → only "юрист по дтп"
-wordExclude queries with this word.
юрист дтп -бесплатно -консультация
(a|b|c)Multiple variants in one query.
(юрист|адвокат) дтп → combined demand
Always fix prepositions with !:
юрист !по дтп ← correct
юрист по дтп ← "по" ignored!
юрист дтп — see total volume"юрист дтп" — exact phrase only"!юрист !по !дтп" — exact matchюрист дтп -бесплатно -онлайн| Region | ID |
|--------|-----|
| Россия | 225 |
| Москва | 213 |
| Москва и область | 1 |
| Санкт-Петербург | 2 |
| Екатеринбург | 54 |
| Новосибирск | 65 |
| Казань | 43 |
Run bash scripts/regions_tree.sh for full list.
User: Найди запросы для рекламы дымоходов
Claude: Для какого региона анализировать спрос?
И уточните — вы продаёте готовые дымоходы или
материалы для их изготовления/утепления?
User: Москва, продаём готовые сэндвич-дымоходы
Claude: [Запускает анализ для региона 213]
Нашёл запросы. Проверяю интент через веб-поиск...
✅ ЦЕЛЕВЫЕ (покупают дымоходы):
- "дымоход сэндвич купить" — 450 показов
- "дымоход для бани цена" — 380 показов
❌ НЕ ЦЕЛЕВЫЕ (покупают другое):
- "каолиновая вата для дымохода" — ищут утеплитель, не дымоход
- "монтаж дымохода своими руками" — DIY, не покупатели
- "чистка дымохода" — уже владеют, сервисный запрос
Анализ рекламной кампании Яндекс Директ для нахождения фраз, не покрытых текущей семантикой.
Требования: XLSX-выгрузка из Яндекс Директ (лист «Тексты»).
Подробнее: MISSED_DEMAND.md
Take artwist-polyakov/yandex-wordstat from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.