· SEO · 3 мин. чтения
Автоматизация SEO с WordStat API
Как собирать семантическое ядро и анализировать тренды программно.

Ручной сбор ключевых слов из Яндекс.Вордстата — это часы копирования и вставки. API позволяет автоматизировать этот процесс и получить данные за секунды.
Задачи, которые решает API
- Сбор семантики — тысячи ключевых слов по seed-фразе
- Анализ частотности — сколько раз ищут каждую фразу
- Динамика запросов — как менялась популярность
- Региональный анализ — где больше спроса
- Сезонность — когда лучше продвигаться
Начало работы
Получите доступ
curl -X POST https://proxy.unoapi.ru/v1/wordstat/top \
-H "Authorization: Bearer sk_xxx" \
-H "Content-Type: application/json" \
-d '{"phrase": "тест", "limit": 10}'Python-клиент
import requests
from typing import List, Dict
class WordStatClient:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://proxy.unoapi.ru/v1/wordstat"
def _request(self, endpoint: str, data: dict) -> dict:
response = requests.post(
f"{self.base_url}/{endpoint}",
headers={"Authorization": f"Bearer {self.api_key}"},
json=data
)
response.raise_for_status()
return response.json()
def top(self, phrase: str, limit: int = 100) -> List[Dict]:
"""Топ связанных запросов с частотностью"""
return self._request("top", {"phrase": phrase, "limit": limit})["topRequests"]
def dynamics(self, phrase: str, period: str = "monthly") -> List[Dict]:
"""Динамика запроса по времени"""
return self._request("dynamics", {"phrase": phrase, "period": period})["dynamics"]
def regions(self, phrase: str) -> List[Dict]:
"""Распределение по регионам"""
return self._request("regions", {"phrase": phrase})["regions"]
ws = WordStatClient("sk_xxx")Сценарий 1: Сбор семантического ядра
def collect_semantic_core(seed_phrases: List[str], limit_per_seed: int = 100):
"""Собрать семантическое ядро по seed-фразам"""
all_keywords = {}
for seed in seed_phrases:
keywords = ws.top(seed, limit=limit_per_seed)
for kw in keywords:
phrase = kw["phrase"]
if phrase not in all_keywords:
all_keywords[phrase] = kw["count"]
# Сортируем по частотности
sorted_kw = sorted(all_keywords.items(), key=lambda x: x[1], reverse=True)
return sorted_kw
seeds = ["купить диван", "диван недорого", "угловой диван", "диван кровать"]
core = collect_semantic_core(seeds)
Сценарий 2: Анализ конкурентов
def analyze_competitor_keywords(competitor_name: str):
"""Какие запросы связаны с конкурентом"""
# Брендовые запросы с частотностью
brand_keywords = ws.top(competitor_name, limit=50)
# Частотность бренда — берём из первого результата
brand_frequency = brand_keywords[0]["count"] if brand_keywords else 0
return {
"brand": competitor_name,
"monthly_searches": brand_frequency,
"related_queries": brand_keywords[:10]
}
competitors = ["skillbox", "geekbrains", "netology"]
for comp in competitors:
analysis = analyze_competitor_keywords(comp)
print(f"{comp}: {analysis['monthly_searches']} запросов/мес")Сценарий 3: Поиск сезонных ниш
def find_seasonal_keywords(keywords: List[str]):
"""Найти ключевые слова с высокой сезонностью"""
seasonal = []
for kw in keywords:
dynamics = ws.dynamics(kw, period="monthly")
if len(dynamics) < 12:
continue
counts = [d["count"] for d in dynamics]
max_count = max(counts)
min_count = min(counts) or 1 # избегаем деления на 0
seasonality_index = max_count / min_count
if seasonality_index > 3: # сильная сезонность
peak_month = dynamics[counts.index(max_count)]["date"]
seasonal.append({
"keyword": kw,
"seasonality_index": round(seasonality_index, 1),
"peak_month": peak_month,
"peak_searches": max_count
})
return sorted(seasonal, key=lambda x: x["seasonality_index"], reverse=True)
products = ["купить кондиционер", "купить обогреватель", "купить велосипед", "купить лыжи"]
seasonal = find_seasonal_keywords(products)
Сценарий 4: Региональный таргетинг
def find_best_regions(keyword: str):
"""Где больше всего ищут этот запрос"""
regions = ws.regions(keyword)
# Сортируем по affinity index (интерес выше среднего)
high_interest = [r for r in regions if r["affinityIndex"] > 1.2]
high_interest.sort(key=lambda x: x["affinityIndex"], reverse=True)
return high_interest[:10]
regions = find_best_regions("купить дом за городом")
Экспорт в Excel
import pandas as pd
def export_to_excel(keywords: List[Dict], filename: str):
"""Экспорт семантического ядра в Excel"""
df = pd.DataFrame(keywords)
df.to_excel(filename, index=False)
print(f"Сохранено в {filename}")
core = collect_semantic_core(["ремонт квартиры"])
export_to_excel([{"phrase": k, "count": v} for k, v in core], "semantic_core.xlsx")Стоимость
WordStat API — один из самых доступных в UnoAPI:
| Операция | Стоимость |
|---|---|
| Частотность (1 фраза) | 0.1 ₽ |
| Топ запросов (до 100) | 0.1 ₽ |
| Динамика | 0.1 ₽ |
| Регионы | 0.1 ₽ |
1000 ключевых слов ≈ 100 ₽
Советы
- Кэширование: данные обновляются раз в сутки, кэш включён по умолчанию
- Батчинг: группируйте запросы для экономии
- Лимиты: до 60 запросов в минуту на ключ
Что дальше?
Поделиться:



