yandex-wordstat
Analyze search demand and keyword statistics using Yandex Wordstat API.
Config
Requires YANDEX_WORDSTAT_TOKEN in config/.env . See config/README.md for token setup instructions.
Philosophy
-
Skepticism to non-target demand — high numbers don't mean quality traffic
-
Creative semantic expansion — think like a customer
-
Always clarify region — ask user for target region before analysis
-
Show operators in reports — include Wordstat operators for verification
-
VERIFY INTENT via web search — always check what people actually want to buy
CRITICAL: Intent Verification
Before marking ANY query as "target", verify intent via WebSearch!
The Problem
Query "каолиновая вата для дымохода" looks relevant for chimney seller, but:
-
People search this to BUY COTTON WOOL, not chimneys
-
They already HAVE a chimney and need insulation material
-
This is NOT a target query for chimney sales!
Verification Process
For every promising query, ASK YOURSELF:
-
What does the person want to BUY? (not just "what are they interested in")
-
Will they buy OUR product from this search?
-
Or are they looking for something adjacent/complementary?
MANDATORY: Use WebSearch
Always run WebSearch to check:
WebSearch: "каолиновая вата для дымохода" что ищут покупатели
Look at search results:
-
What products are shown?
-
What questions do people ask?
-
Is this informational or transactional intent?
Red Flags (likely NOT target)
-
Query contains "для [вашего продукта]" — they need ACCESSORY, not your product
-
Query about materials/components — they DIY, not buy finished product
-
Query has "своими руками", "как сделать" — informational, not buying
-
Query about repair/maintenance — they already own it
Examples
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
Workflow Update
-
Find queries in Wordstat
-
WebSearch each promising query to verify intent
-
Mark as target ONLY if intent matches the sale
-
Report both target AND rejected queries with reasoning
Workflow
STOP! Before any analysis:
ASK user about region and WAIT for answer:
"Для какого региона анализировать спрос?
- Вся Россия (по умолчанию)
- Москва и область
- Конкретный город (какой?)"
НЕ ПРОДОЛЖАЙ пока пользователь не ответит!
ASK about business goal:
"Что именно вы продаёте/рекламируете? Это важно для фильтрации нецелевых запросов."
After getting answers:
-
Check connection: bash scripts/quota.sh
-
Run analysis using appropriate script
-
Verify intent via WebSearch for each promising query
-
Present results with target/non-target separation
Scripts
quota.sh
Check API connection.
bash scripts/quota.sh
top_requests.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)
Result types: Top Requests vs Associations
The output contains two sections (both in stdout and CSV):
-
top (topRequests ) — queries that contain the words from your phrase, sorted by frequency. These are direct variations of the search query. Example: phrase "юрист дтп" → "юрист по дтп", "консультация юриста по дтп".
-
assoc (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 export details
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.
Working with large CSV exports
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.
dynamics.sh
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
regions_stats.sh
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
regions_tree.sh
Show common region IDs.
bash scripts/regions_tree.sh
search_region.sh
Find region ID by name.
bash scripts/search_region.sh --name "Москва"
Wordstat Operators
Quotes "query"
Shows demand ONLY for this exact phrase (no additional words).
"юрист дтп" → "юрист дтп", "юристы дтп" but NOT "юрист по дтп"
Exclamation !word
Fixes exact word form.
!юрист → "юрист по дтп", "юрист москва" but NOT "юристы", "юриста"
Combination "!word !word"
Exact phrase + exact forms.
"!юрист !по !дтп" → only "юрист по дтп"
Minus -word
Exclude queries with this word.
юрист дтп -бесплатно -консультация
Grouping (a|b|c)
Multiple variants in one query.
(юрист|адвокат) дтп → combined demand
Stop words
Always fix prepositions with ! :
юрист !по дтп ← correct юрист по дтп ← "по" ignored!
Analysis Strategy
-
Broad query: юрист дтп — see total volume
-
Narrow with quotes: "юрист дтп" — exact phrase only
-
Fix forms: "!юрист !по !дтп" — exact match
-
Clean with minus: юрист дтп -бесплатно -онлайн
-
Expand: synonyms, related terms, client problems
Popular Region IDs
Region ID
Россия 225
Москва 213
Москва и область 1
Санкт-Петербург 2
Екатеринбург 54
Новосибирск 65
Казань 43
Run bash scripts/regions_tree.sh for full list.
Limits
-
10 requests/second
-
1000 requests/day
Example Session
User: Найди запросы для рекламы дымоходов
Claude: Для какого региона анализировать спрос? И уточните — вы продаёте готовые дымоходы или материалы для их изготовления/утепления?
User: Москва, продаём готовые сэндвич-дымоходы
Claude: [Запускает анализ для региона 213]
Нашёл запросы. Проверяю интент через веб-поиск...
✅ ЦЕЛЕВЫЕ (покупают дымоходы):
- "дымоход сэндвич купить" — 450 показов
- "дымоход для бани цена" — 380 показов
❌ НЕ ЦЕЛЕВЫЕ (покупают другое):
- "каолиновая вата для дымохода" — ищут утеплитель, не дымоход
- "монтаж дымохода своими руками" — DIY, не покупатели
- "чистка дымохода" — уже владеют, сервисный запрос
Key Points
-
ВСЕГДА спрашивай регион и жди ответа
-
ВСЕГДА уточняй что именно продаёт клиент
-
ВСЕГДА проверяй интент через WebSearch
-
Разделяй отчёт на целевые/нецелевые с объяснением
Расширенные сценарии
Поиск упущенного спроса
Анализ рекламной кампании Яндекс Директ для нахождения фраз, не покрытых текущей семантикой. Требования: XLSX-выгрузка из Яндекс Директ (лист «Тексты»). Подробнее: MISSED_DEMAND.md