Автоматический keyword research через API: DataForSEO, Google Ads и Яндекс.Wordstat за один день

25 июня 2026 года в 06:52 я открыл рабочий чат с одним заданием: подключить SEO-мониторинг к нескольким сайтам так, чтобы утром приходил отчёт с позициями и частотностями, а не приходилось ждать, пока кто-то вручную зайдёт в Яндекс.Вебмастер и скачает таблицу. К 14:03 в PostgreSQL лежали первые 14 строк ключевых запросов по 14 доменам. Вот как это устроено — от блокеров до работающего скрипта.

Речь не про SEO как «написать статьи и подождать три месяца», а про измеримый процесс с данными в базе. Позиция по запросу «автоматизация клиники telegram» вчера была 41, сегодня — 34: что-то движется. Частотность «dataforseo настройка» — 80 показов в месяц, конкурентность низкая — значит, тема для статьи. Без API эти данные живут в личных кабинетах инструментов и не попадают в пайплайн принятия решений. Агент не может зайти на сайт Вебмастера и «посмотреть». Агент может только читать из базы.

Это важное концептуальное различие. Если вы хотите, чтобы AI-агент принимал решения о SEO — о темах статей, о правках мета-описаний, о приоритетах — ему нужна база данных, а не интерфейс. Именно поэтому настройка API-пайплайна была задачей номер один.

Почему ручной keyword research ломается при нескольких сайтах

Если у вас один сайт и 50 ключей — ручная работа ещё терпима. Каждый понедельник открываете Google Search Console, смотрите позиции, делаете заметки, выбираете тему следующей статьи. Работает, пока не масштабируешься.

Когда сайтов становится 5, 10, 14 — ручной подход ломается по четырём причинам. Первая: время. Даже 15 минут на сайт — это 3.5 часа в неделю только на просмотр данных, без анализа и без действий. Вторая: память. Вы не помните, что было с позицией по конкретному запросу две недели назад — не с чем сравнивать. Третья: приоритеты. Когда всё перед глазами сразу, непонятно, с чего начать — и не начинаешь ни с чего. Четвёртая: задержка. К моменту, когда вы замечаете проседание позиции, прошло уже 3-4 недели — упущенное время.

К июню 2026 года у Юрия Солар, основателя Solar OS, под управлением оказалось 14 доменов: 4bos.ru, elefterri.com, solarpropertybali.com и 11 сайтов клиента (Денис Зинин, проект Atomy — auroracatalog.ru, atomy.by, atomy.tj, perfect-organiks.com и другие). Ходить вручную по каждому — нереально. Нужен один скрипт, который собирает данные отовсюду и кладёт в PostgreSQL — откуда агент их читает каждое утро.

Три источника данных решают разные задачи:

  • Google Search Console — показывает реальные клики, показы, позиции и CTR по запросам, которые уже работают на вашем сайте. Единственный источник того, что люди уже находят через вас.
  • Google Ads Keyword Planner — даёт частотности по запросам, которые вы ещё не используете. Инструмент для выбора тем будущих статей и оценки потенциала кластеров.
  • Яндекс.Wordstat — аналог Keyword Planner для русскоязычного поиска. У разных запросов частотности в Google и Яндекс расходятся в 3-5 раз — нельзя игнорировать.

DataForSEO — это API-агрегатор, который тянет данные из нескольких источников через единый интерфейс, решая проблему разных верификаций. Но мы тестировали и прямое подключение к каждому API, потому что на разных объёмах экономика разная.

DataForSEO: тест за $50 вместо 40 часов ручной работы

DataForSEO — не панель управления и не дашборд, а именно API. Вы делаете HTTP-запрос с параметрами (ключевое слово, регион, язык), получаете JSON с частотностью, конкурентностью, похожими запросами. Стоимость тестового периода — около $50.

Почему DataForSEO, а не напрямую к Google Ads API? Три практических причины. Первая: DataForSEO уже решил верификацию и квоты — один ключ вместо нескольких OAuth-приложений с разными flow авторизации. Вторая: покрывает и Google, и Яндекс, и другие движки через один интерфейс — меньше кода поддерживать. Третья: есть готовые Python и Node.js-клиенты, можно поднять fetcher за час.

Блокер в нашем случае был прозаический: нужен DATAFORSEO_API_KEY и SSH-доступ к VPS с директорией /opt/seo_machine. Не архитектурная проблема — просто процедура регистрации и получения ключа занимает день. Это важно при планировании: если вы хотите запустить пайплайн «сегодня», DataForSEO нужно было зарегистрировать «вчера».

Как выглядит запрос к DataForSEO API на практике

Базовый Python-пример для получения частотности по нескольким ключам:

import requests, base64

login, password = "your_login", "your_password"
credentials = base64.b64encode(f"{login}:{password}".encode()).decode()

headers = {
    "Authorization": f"Basic {credentials}",
    "Content-Type": "application/json"
}

data = [{
    "keywords": ["dataforseo api настройка", "seo автоматизация"],
    "language_name": "Russian",
    "location_name": "Russia"
}]

response = requests.post(
    "https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/live",
    headers=headers, json=data
)
print(response.json())

Ответ приходит за 2-5 секунд: объём поиска, конкурентность от 0 до 1, похожие ключи. Данные кладём в таблицу seo_keywords в PostgreSQL. Один запрос может содержать до 1000 ключей — это снижает количество HTTP-запросов и стоимость.

DataForSEO также умеет отдавать позиции конкурентов по целевым запросам — это отдельный endpoint. Для агентства или при работе с конкурентными нишами это ценный сигнал: вы видите не только свои позиции, но и позиции тех, кто рядом.

Google Ads Keyword Planner API: как получить токен и не застрять

Google Ads API — прямой канал с полным контролем, но с более сложной верификацией, чем DataForSEO. 25 июня в Google Cloud Console, в проекте «Solar inside», API оказался уже активированным — кнопка «Enablement is already complete» подсветилась зелёным. Это экономит время: не нужно ждать активации на уровне проекта.

Но для Keyword Planner конкретно нужно пройти отдельную заявку. В форме Application Form нужно выбрать тип использования «Keyword Planning Services», подтвердить соглашение с политиками использования API — и ждать. Google рассматривает заявки от нескольких часов до 5 рабочих дней. В нашем случае 25 июня кнопка Submit была нажата и начался период ожидания.

Три уровня доступа — и почему Basic не подходит

Важно понимать разницу уровней доступа Google Ads API:

  1. Basic access — для тестирования. Лимит 10 000 операций в день. Получается быстро, без дополнительной заявки.
  2. Standard access — для продуктивного использования. Лимиты значительно выше. Нужна заявка, 2-5 рабочих дней рассмотрения.
  3. Manager account access — для агентств, которые управляют несколькими клиентскими аккаунтами Google Ads.

Для keyword research на 14 сайтах с 50-200 ключами на каждый нужен Standard access. Basic с лимитом 10 000 операций в день формально достаточен для маленького теста, но при регулярном обходе всех сайтов он закончится быстро. Поэтому заявку нужно подавать сразу на Standard, не тратить время на промежуточный шаг.

OAuth через Service Account — единственный правильный путь для сервера

Главная ошибка, которую делают при первой настройке: пытаются авторизоваться через личный аккаунт Google, а не через Service Account. Личный OAuth требует интерактивного подтверждения браузером при каждом обновлении токена. Сервер без браузера это не переживёт: при первом же истечении токена (обычно через час) скрипт упадёт.

Service Account работает иначе: один раз настраиваете credentials в JSON-файле, скрипт читает его и авторизуется автоматически при каждом запуске. Refresh токена происходит без участия человека.

from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_dict({
    "developer_token": "YOUR_DEVELOPER_TOKEN",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET",
    "refresh_token": "YOUR_REFRESH_TOKEN",
    "login_customer_id": "YOUR_CUSTOMER_ID",
})

keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")

Для Service Account в Google Cloud нужно создать JSON-ключ, скачать его, положить на сервер. Путь к файлу указывается в переменной окружения GOOGLE_APPLICATION_CREDENTIALS. Дальше — стандартный Python SDK от Google.

Яндекс.Wordstat API: серверный fetcher для частотностей

Частотности в Google и Яндекс расходятся — и расходятся существенно. Запрос «автоматизация записи врача telegram» имеет 340 показов в месяц в Яндексе и 90 в Google Keyword Planner. Разница 3.8x. Ориентироваться только на один источник — принимать решения о контенте вслепую.

Для русскоязычного SEO Яндекс важен ещё и потому, что доля Яндекса в Рунете стабильна: по данным Statcounter, в России это около 42% поисковых запросов против 55% Google. Половина вашей потенциальной аудитории ищет через Яндекс — игнорировать его данные нельзя.

Wordstat API живёт внутри Яндекс.Директ API. Это не отдельный сервис и не отдельный токен. Для доступа нужен OAuth-токен с правами direct:api. В процессе настройки 25 июня мы зашли в Яндекс AI Studio — но это совершенно другой продукт, языковые модели YaGPT, к Wordstat отношения не имеет. Правильный путь: oauth.yandex.ru, приложение с правами Директа.

Пошагово: получить токен Яндекс для Wordstat

  1. Зайти на oauth.yandex.ru → «Зарегистрировать приложение»
  2. Тип приложения: «Веб-сервисы» или «Приложение без UI» (для сервера)
  3. Права: выбрать Яндекс.Директ → Управление рекламными кампаниями — в этот пункт входит доступ к API Wordstat
  4. Для серверов без браузера использовать Device Code Flow: получаете код, открываете ссылку на любом устройстве, подтверждаете — и токен активируется на сервере
  5. Токен живёт 1 год, после истечения нужно обновить через тот же Flow

Асинхронность Wordstat API — главная архитектурная особенность

В отличие от DataForSEO и Google Ads API, Wordstat работает асинхронно. Это не недостаток, а особенность дизайна: Яндекс не даёт частотности мгновенно — они собираются в фоне. Архитектура cron-скрипта должна это учитывать.

Два шага вместо одного:

import requests

token = "YOUR_YANDEX_TOKEN"
headers = {
    "Authorization": f"Bearer {token}",
    "Accept-Language": "ru",
    "Client-Login": "your_login"
}

# Шаг 1 (в 00:00 cron): создать задание на сбор частотностей
data_create = {
    "method": "CreateNewWordstatReport",
    "param": {
        "Phrases": ["автоматизация бизнеса", "ai агент telegram", "dataforseo api"],
        "GeoID": [225]  # 225 = Россия
    }
}
response = requests.post(
    "https://api.direct.yandex.com/live/v4/json/",
    headers=headers, json=data_create
)
report_id = response.json()["data"]

# Шаг 2 (в 01:00 cron): забрать результаты по ID
data_get = {
    "method": "GetWordstatReport",
    "param": report_id
}
result = requests.post(
    "https://api.direct.yandex.com/live/v4/json/",
    headers=headers, json=data_get
)

На практике это значит: первый cron в полночь создаёт задания, второй cron через час забирает результаты. PostgreSQL получает данные к 01:30 ночи — к утренней сессии агента всё готово.

Структура пайплайна и схема данных

К 14:03 25 июня в таблицу seo_keywords PostgreSQL были импортированы первые 14 строк — по 1-2 ключевых запроса на каждый из 14 доменов. Принципиальная проверка: данные текут, агент их читает, решения принимаются.

Полная архитектура пайплайна:

Google Search Console ──┐
DataForSEO API ─────────┼──→ seo_fetcher.py (cron) ──→ PostgreSQL
Google Ads API ─────────┤       (запускается в 00:00       seo_keywords
Yandex Direct API ──────┘        и в 01:00)                seo_rankings
                                                                │
                                                                ▼
                                                        seo-4bos агент
                                                    (читает в 07:00, принимает
                                                     решения о контенте)

Скрипт seo_fetcher.py — это не монолит, а набор функций с единым entry point. Каждая функция отвечает за один источник данных: fetch_gsc(), fetch_dataforseo(), fetch_google_ads(), fetch_wordstat(). Если один источник временно недоступен — остальные продолжают работать.

Таблица seo_keywords: что хранить и зачем

CREATE TABLE seo_keywords (
    id SERIAL PRIMARY KEY,
    site VARCHAR(100),         -- '4bos.ru', 'elefterri.com'
    keyword VARCHAR(500),      -- 'dataforseo api настройка'
    impressions INTEGER,       -- из GSC: сколько раз сайт показывался
    clicks INTEGER,            -- из GSC: сколько раз кликнули
    ctr FLOAT,                 -- clicks / impressions
    position FLOAT,            -- средняя позиция из GSC
    search_volume INTEGER,     -- из Google Ads / DataForSEO: общий спрос
    yandex_volume INTEGER,     -- из Яндекс.Wordstat
    competition FLOAT,         -- из Google Ads (0 = низкая, 1 = высокая)
    updated_at TIMESTAMP DEFAULT NOW()
);

Агент seo-4bos каждое утро читает таблицу с несколькими условиями. Для приоритета «переписать мета»: WHERE impressions > 5 AND ctr < 0.02 — люди видят сайт, но не заходят. Для приоритета «написать статью»: WHERE search_volume > 50 AND position IS NULL — запрос имеет спрос, но сайт по нему ещё не ранжируется вообще. Оба сигнала превращаются в конкретные задачи без участия человека.

Cloudflare как дополнительный источник данных

Параллельно 25 июня все 14 доменов были подключены к Cloudflare: добавлены зоны, перенесены DNS-записи, NS обновлены у регистраторов (Beget для 11 доменов, Reg.ru для solarpropertybali.com). Смена NS занимает от 15 минут до 24 часов.

Cloudflare ценен не только защитой и кэшированием. Cloudflare Analytics API даёт трафик по страницам, уникальных посетителей, время загрузки — без установки счётчиков на сайте. Эти данные тоже идут в базу и дополняют GSC. Разница между ними: GSC показывает трафик из поиска, Cloudflare показывает весь трафик включая прямой и реферальный.

Что получилось: 14 сайтов, один скрипт, данные в базе

За один рабочий день с 06:52 до 14:03, параллельно с другими задачами, была настроена базовая инфраструктура SEO-мониторинга:

  • 14 доменов подключены к Cloudflare — DNS, аналитика, защита
  • Google Ads API активирован в Cloud Console, заявка на Standard access отправлена
  • Яндекс.Wordstat API настроен через Директ — Device Code Flow для сервера
  • DataForSEO протестирован — $50 тестовый месяц, первые данные получены
  • 14 строк ключевых запросов импортированы в PostgreSQL — принципиальная проверка пайплайна
  • Агент seo-4bos читает таблицу ежедневно и принимает решения о контенте без участия человека

«Мне не нужен отдельный человек или инструмент для SEO-мониторинга», — говорит Юрий Солар, основатель Solar OS. — «Агент каждое утро смотрит в базу: если есть запросы с impressions больше 5 и CTR меньше 2%, значит люди видят сайт, но не заходят. Задача: либо переписать мета, либо написать статью. Агент делает это сам — без задержки, без того, чтобы я об этом помнил».

Экономика: API-пайплайн против SaaS-инструментов

Разница в стоимости при 14 сайтах:

  • API-пайплайн: DataForSEO $50/мес + Google Ads API бесплатно + Яндекс Директ API бесплатно + Cloudflare Free = от $50 в месяц за все 14 сайтов
  • Ahrefs: $399/мес за Agency план, включающий несколько проектов
  • SEMrush: $450/мес за Business план

Разница не только в стоимости. SaaS-инструменты замыкают данные внутри своих интерфейсов — вы не можете передать их агенту для принятия решений. API-подход даёт данные в PostgreSQL — откуда их может читать любой скрипт, любой агент, любой дашборд.

Следующие шаги: как масштабировать пайплайн

Базовый пайплайн работает. Дальше его нужно масштабировать по трём направлениям.

Расширение ключей. Для каждого сайта нужен полный кластер — обычно 50-200 целевых запросов. Для 14 сайтов это 700-2800 строк в таблице. DataForSEO и Google Ads обрабатывают такой объём без проблем, но нужно настроить семантическое расписание: не все ключи нужно проверять каждый день, достаточно раз в неделю для стабильных запросов.

Верификация GSC для всех доменов. Google Search Console работает только после верификации владения доменом — через DNS-запись или HTML-файл на сайте. Для 14 доменов это 14 отдельных верификаций. Часть можно сделать автоматически через Cloudflare DNS API: скрипт добавляет нужную TXT-запись, GSC видит её и верифицирует домен.

Конкурентный анализ. DataForSEO умеет отдавать топ-10 по любому запросу — кто стоит выше вас и с каким контентом. Это добавляет в пайплайн сигнал «что нужно написать лучше конкурента», а не только «по каким запросам мы слабы».

Алерты при падении позиций. Если позиция по важному запросу падает больше чем на 5 мест за 7 дней — агент отправляет сообщение в Telegram. Это снимает задачу «мониторить позиции вручную» полностью: вы узнаёте о проблеме в момент её появления, а не через три недели.

Когда это нужно, а когда нет

SEO-пайплайн через API оправдан при четырёх условиях одновременно: больше 3-5 сайтов под управлением; есть разработчик или AI-агент, который будет читать данные и действовать на их основе; нужна кастомная аналитика или автоматизированные решения о контенте; команда хочет владеть данными, а не зависеть от SaaS-инструмента.

Не нужен при одном сайте с небольшим числом ключей, при отсутствии технического ресурса на разработку и поддержку скрипта, или при наличии удобного Ahrefs-аккаунта, которым реально пользуются каждую неделю. Порог входа — несколько часов настройки и понимание API — реален, но не нулевой.

Разница не только в цене. Принципиальное преимущество API-пайплайна — данные в вашей базе, под вашим контролем. Когда в следующем году DataForSEO поднимет цены или Ahrefs изменит модель — ваши данные за прошлые периоды останутся у вас. Со SaaS при отмене подписки история исчезает.

Как организовать cluster mapping в базе

По мере роста числа ключей встаёт вопрос группировки: нельзя писать отдельную статью на каждый из 2800 запросов. Нужен кластерный подход — объединять близкие по смыслу запросы под одну страницу. Для этого в базу добавляется таблица seo_clusters: каждый кластер — это группа из 5-20 запросов с одним главным URL.

Алгоритм кластеризации простой: берём топ-10 результатов Google по каждому запросу (DataForSEO это умеет), смотрим на пересечения URL. Если два запроса дают одинаковый топ-10 на 60% и более — они принадлежат одному кластеру. Агент группирует запросы автоматически и сигнализирует, когда под кластер нет ни одной страницы на сайте — это ближайшая тема для контента.

Если интересно, как устроен пайплайн изнутри — промпты агента seo-4bos, структура таблиц, cron-задача, шаблон seo_fetcher.py с реальными запросами к DataForSEO и Wordstat — всё это в клубе «Solar — внутрянка». Бери и адаптируй под свои сайты: https://4bos.ru/inside/

— Solar OS.

Частые вопросы

Чем DataForSEO отличается от прямого подключения к Google Ads API?
DataForSEO — это API-агрегатор, который уже решил верификацию и квоты за вас. Один ключ вместо нескольких OAuth-приложений, покрывает Google, Яндекс и другие движки через единый интерфейс. Прямой Google Ads API бесплатен, но требует отдельной заявки на Standard access (2-5 рабочих дней) и настройки OAuth. DataForSEO начинает работать за несколько часов после регистрации. Минус DataForSEO — платный: от $50 в месяц в зависимости от объёма запросов.
Как получить токен Google Ads API для keyword research без лишних задержек?
Нужно активировать Google Ads API в Google Cloud Console, затем подать заявку на тип использования Keyword Planning Services. Google рассматривает от нескольких часов до 5 рабочих дней. После одобрения — настроить OAuth 2.0 через Service Account (не личный аккаунт, иначе потребуется браузер при каждом обновлении токена). Basic access даётся быстро, но лимит 10 000 операций в день — для keyword research на 14 сайтах этого не хватит, нужен Standard.
Яндекс.Wordstat API — это отдельный продукт или часть Директа?
Wordstat API живёт внутри Яндекс.Директ API — не отдельный сервис. Для доступа нужен токен OAuth с правами direct:api. Работает асинхронно: создаёте задание, опрашиваете статус, забираете результат. Это важно для архитектуры: не синхронный HTTP-запрос, а очередь задач с polling. Яндекс AI Studio — совершенно другой продукт (языковые модели), к Wordstat отношения не имеет.
Сколько стоит SEO-пайплайн через API по сравнению с Ahrefs или SEMrush?
API-пайплайн: DataForSEO от $50/мес + Google Ads API бесплатно + Яндекс Директ API бесплатно + Cloudflare от $0 до $20 на домен. Итого от $50 в месяц за 14 сайтов. Ahrefs: $99-399/мес, SEMrush: $120-450/мес, и оба замыкают данные внутри своих интерфейсов. API-подход дешевле при объёме от 5 сайтов и даёт данные напрямую в вашу базу — агент их читает и принимает решения без вашего участия.
Когда SEO-пайплайн через API не нужен?
Не нужен при одном сайте с небольшим числом ключей, при отсутствии разработчика или AI-агента для обработки данных, или когда устраивает ручная работа в GSC и Яндекс.Вебмастере. Пайплайн окупается при 3+ сайтах под управлением, когда ручной обход занимает больше 2-3 часов в неделю. Для одного сайта порог входа высоковат — проще платить за Ahrefs или SEMrush.

Читайте также

Подписаться на блог в Telegram

Читайте свежие кейсы об AI-автоматизации, системной архитектуре и масштабировании бизнеса.

Подписаться