Когда нужно проверить частотность 50 ключевых фраз, веб-интерфейс Wordstat с капчей превращается в час нудной работы. Кустарный парсер через Playwright обходится в 3 раза дороже, чем официальный API. С 2024 года Яндекс открыл программный доступ через Yandex Cloud Search API - без капчи, с легальной квотой, с авторизацией через IAM-токен. В этой статье - всё что нужно для интеграции в вашу систему за 2-3 часа.
TL;DR: Wordstat API за минуту
| Параметр | Значение |
|---|---|
| Что это | REST API для получения частотности фраз без капчи |
| Сервис Yandex Cloud | Search API (раздел Foundation Models / Search API) |
| Авторизация | IAM-токен сервисного аккаунта (12 часов TTL) |
| Лимит | ~10 000 запросов в сутки на сервисный аккаунт |
| Цена | ~0.20 ₽ за фразу через batch-endpoint |
| Регионы | по коду: Москва=213, Россия=225, СПб=2 |
| Главные методы | getKeywordsTop, getTopRequests, getDynamics |
| Альтернатива | KeyCollector (платный), Playwright-парсер (3х дороже) |
Что такое Yandex Cloud Search API
Yandex Cloud Search API - официальный программный интерфейс к данным Wordstat и поисковой статистике Yandex. Доступен через сервисные аккаунты в Yandex Cloud (yandex.cloud).
Что даёт:
- Частотность фразы за период (день / неделя / месяц / год)
- Динамика частоты по месяцам
- Топ похожих и расширенных запросов
- Региональная разбивка (общероссийская + по областям)
- Без капчи и без блокировок аккаунта
API REST-овый, ответ JSON, авторизация через Bearer-токен. Стандартная схема для современных Yandex Cloud-сервисов.
Авторизация: IAM-токен через сервисный аккаунт
Прежде чем дёргать API - регистрируем сервисный аккаунт в Yandex Cloud:
- Открываем https://console.yandex.cloud → раздел «Сервисные аккаунты»
- Создаём аккаунт
wordstat-botс рольюsearch-api.executor - Создаём авторизованный ключ (Authorized Key) - JSON-файл с приватным ключом
- Сохраняем JSON-файл в безопасное место (не в git!)
Дальше код для получения IAM-токена:
import jwt
import time
import requests
import json
def get_iam_token(key_file: str) -> str:
with open(key_file) as f:
key = json.load(f)
# JWT для запроса IAM-токена
payload = {
'aud': 'https://iam.api.cloud.yandex.net/iam/v1/tokens',
'iss': key['service_account_id'],
'iat': int(time.time()),
'exp': int(time.time()) + 3600,
}
encoded_token = jwt.encode(
payload,
key['private_key'],
algorithm='PS256',
headers={'kid': key['id']},
)
# Обмен JWT на IAM-токен
r = requests.post(
'https://iam.api.cloud.yandex.net/iam/v1/tokens',
json={'jwt': encoded_token},
)
r.raise_for_status()
return r.json()['iamToken']
# Кешируем IAM-токен на 11 часов (он живёт 12 часов)
iam_token = get_iam_token('keys/wordstat-bot.json')
IAM-токен живёт 12 часов, после чего нужно дёрнуть get_iam_token снова. В нашем production-коде токен в Redis с TTL 11 часов.
Запрос частотности фразы: getKeywordsTop
Основной метод - получение топ-похожих фраз с частотностью:
import requests
def get_keywords_top(phrase: str, iam_token: str, folder_id: str, region: int = 213) -> dict:
url = 'https://search.api.cloud.yandex.net/v2/search/wordstat:getKeywordsTop'
headers = {
'Authorization': f'Bearer {iam_token}',
'Content-Type': 'application/json',
}
payload = {
'folderId': folder_id,
'phrase': phrase,
'regions': [str(region)],
'period': 'last_month',
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
r.raise_for_status()
return r.json()
# Пример:
result = get_keywords_top('чат-бот для бизнеса', iam_token, folder_id='b1g...')
# Возвращает:
# {
# 'topRequests': [
# {'phrase': 'чат бот для бизнеса', 'count': 1049},
# {'phrase': 'чат бот для малого бизнеса', 'count': 18},
# ...
# ],
# 'totalShows': 1234
# }
Региональный код 213 = Москва. Для всей России - 225. Полный список регионов в Yandex регионы.
Batch-обработка: 100 фраз за 5 минут
В реальной работе нужно прогнать 50-200 фраз за один присест. Делаем через ThreadPoolExecutor с rate-limit 10 RPS:
from concurrent.futures import ThreadPoolExecutor, as_completed
import time
def batch_wordstat(phrases: list[str], iam_token: str, folder_id: str) -> list[dict]:
results = []
with ThreadPoolExecutor(max_workers=5) as executor:
futures = {}
for phrase in phrases:
future = executor.submit(get_keywords_top, phrase, iam_token, folder_id)
futures[future] = phrase
time.sleep(0.1) # rate limit 10 RPS
for future in as_completed(futures):
phrase = futures[future]
try:
data = future.result()
results.append({'phrase': phrase, 'data': data})
except Exception as e:
results.append({'phrase': phrase, 'error': str(e)})
return results
# 100 фраз - около 3-5 минут
results = batch_wordstat(my_100_phrases, iam_token, folder_id)
10 запросов в секунду - безопасная скорость. На 11-12 RPS Yandex начинает возвращать 429 (rate limit exceeded). С rate limit - 100 фраз за 10 секунд, плюс время на каждый запрос - итого ~5 минут на 100 фраз.
Динамика по времени: getDynamics
Для сезонного контента и трендового анализа - метод getDynamics:
def get_dynamics(phrase: str, iam_token: str, folder_id: str, period: str = 'last_year') -> dict:
url = 'https://search.api.cloud.yandex.net/v2/search/wordstat:getDynamics'
headers = {
'Authorization': f'Bearer {iam_token}',
'Content-Type': 'application/json',
}
payload = {
'folderId': folder_id,
'phrase': phrase,
'period': period, # last_year, last_3_months
'groupBy': 'month',
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
r.raise_for_status()
return r.json()
# Возвращает массив points: [{date: '2025-05', count: 234}, ...]
Применение: подбор сезонного контента под пик спроса. Например, подарок на 8 марта растёт в феврале-марте, школьная форма в августе.
Региональная статистика: getRegions
Какие регионы лучше для нашей ниши - можно посмотреть через getRegions:
def get_regions(phrase: str, iam_token: str, folder_id: str) -> dict:
url = 'https://search.api.cloud.yandex.net/v2/search/wordstat:getRegions'
payload = {
'folderId': folder_id,
'phrase': phrase,
}
# Возвращает: [{regionId: 213, regionName: 'Москва', affinityIndex: 1.4, count: 234}, ...]
# affinityIndex > 1 - регион любит эту фразу больше среднего
Применение: для регионального ретаргетинга в Yandex Direct или для нишевых статей с региональным таргетингом.
Сколько это стоит
Стоимость Yandex Cloud Search API в 2026 году - ориентировочно 0.20 ₽ за фразу через batch-endpoint. На объёмах:
- 100 фраз/сутки: ~20 ₽
- 1 000 фраз/сутки: ~200 ₽
- 10 000 фраз/сутки: ~2 000 ₽
Для SEO-агентства с ежедневной работой над 5-10 проектами - 5-10к ₽/мес расходы. Дешевле любого KeyCollector-аналога.
Есть бесплатная квота на тестирование - около 100 запросов в день в первый месяц.
Точные цены и тарифы - на yandex.cloud/ru/prices, могут пересматриваться. Перед production-внедрением проверьте актуальные ставки.
Подводные камни
1. IAM-токен живёт 12 часов
Если ваш сервер не перезапускается в течение дня - токен протухает в самый неподходящий момент. Решение: кешировать с TTL 11 часов, обновлять заранее.
2. Rate limit 10 RPS
На 11-12 RPS - 429 ошибки. Учитывайте при batch-обработке. Безопасная скорость - 10 запросов в секунду максимум, с буфером лучше 8-9.
3. Региональная нумерация - не очевидная
Москва - 213. Россия (общая) - 225. Санкт-Петербург - 2. Список не алфавитный. Полный справочник: yandex.ru/dev/xml/doc/dg/concepts/regions.html. Лучше кешировать локально.
4. Капитализация и спецсимволы
API игнорирует регистр (Чат-бот = чат-бот), но дефисы важны (чат-бот ≠ чат бот). Перед запросом нормализуйте фразу.
5. Лимит 10 000 запросов в сутки
На больших проектах с 100к фраз - не хватит. Решения: несколько сервисных аккаунтов, batch-streaming в несколько дней, KeyCollector для очень больших проектов.
6. Аутентификационные ключи в git
Никогда не коммитьте JSON-ключи в git. Минимум - в .env или secret manager. Best practice - переменные окружения в production / Vault для команд.
Что мы делаем с Wordstat API
В нашей студии Wordstat API подключён к 3 типовым процессам:
- Аудит семантики статьи перед написанием - прогон 20-50 ключевых фраз за 10 минут, отбор по частотности > 100/мес.
- Мониторинг конкурентов - еженедельный замер их главных запросов в нашей нише, динамика.
- Сезонный контент-план - дёргаем
getDynamicsдля 50 тематических фраз, ищем пики, подгоняем публикации к ним.
Скрипты в scripts/yandex/wordstat.py, исходники в нашем репозитории - можем поделиться с клиентами как часть проекта.
Альтернативы (когда не подходит)
KeyCollector - десктопное приложение, около 7 тыс ₽ единоразово. Плюс: дополнительные источники данных (Bukvarix, MOAB). Минус: нет API, ручной запуск.
Бесплатный wordstat.yandex.ru через Playwright - дешевле API, но капча через 50-100 запросов. Подходит для разовых проверок 10-20 фраз.
Зарубежные сервисы (Ahrefs, SEMrush) - дают западные источники, недоступны напрямую из РФ.
Для регулярной работы с русским рынком - Yandex Cloud Search API лучший вариант на 2026.
FAQ
Wordstat API - официальный сервис Яндекса?
Да. Yandex Cloud Search API. yandex.cloud/ru/docs/search-api.
Можно ли использовать без капчи?
Да, при программном доступе через API. Капча только в веб-интерфейсе wordstat.yandex.ru.
Сколько стоит?
~0.20 ₽ за фразу через batch. Точные тарифы - на yandex.cloud/ru/prices.
Есть ли бесплатный режим?
Free tier на тестирование (~100 запросов/день первый месяц). Дальше платно.
Какие региональные ограничения?
По регионам Яндекса: Москва=213, Россия=225, Санкт-Петербург=2 и т.д. Не все регионы дают полные данные на малых нишах.
Можно ли использовать на стороне фронтенда?
Нет, IAM-ключи должны быть на сервере. Фронтенд может только дёргать ваш бэкенд, который дёргает API.
Что делать если 429?
Снизить RPS до 8-9, добавить retry с backoff (1с, 5с, 30с).
Можно ли получить историю частотности?
Через getDynamics за последний год по месяцам. За более длинные периоды - нет, только через накопленные собственные данные.
Какая точность данных?
Те же что в веб-интерфейсе Wordstat. Округлённые значения, точность ±10%.
Можно ли использовать в коммерческих проектах?
Да. По договору-оферте Yandex Cloud, на правах сервисного аккаунта.
Готовы обсудить вашу задачу?
Если эта статья откликнулась - у вас сейчас одна из трёх ситуаций:
- Нужна интеграция Wordstat API в свой сервис. Сделаем за 1-2 недели, типичная цена 30-80к.
- Нужно собрать семантику под контент-стратегию. Часовой созвон + предложение по работе с семантикой 1000+ фраз. От 50к.
- Хотите автоматизацию SEO-работы целиком (мониторинг конкурентов + дашборд + алерты). 150-300к, срок 4-8 недель.
📱 Telegram @viktdo - отвечаю в течение часа в будни 📝 Форма обратной связи
О нас: BotKraft - студия чат-ботов и автоматизации (5 лет, 300+ проектов, ИНН 701718749598). Используем Yandex Cloud Search API в production-инструментах для своих клиентов и для собственной контент-стратегии.