Интеграция SEMrush API для SEO-аналитики сайта
Представьте: вы ведёте SEO для 10 доменов. Каждую неделю вручную открываете SEMrush, экспортируете отчёты, склеиваете CSV в Excel. На это уходит полдня, а в данных то и дело закрадываются опечатки. Для интернет-магазина с 100 000 товаров ручной сбор позиций всех категорий практически нереален — данные устаревают быстрее, чем вы их собираете. SEMrush API решает эту проблему раз и навсегда: программно забираете позиции, органику, бэклинки и метрики конкурентов, складываете в свою базу и строите дашборд. Автоматизация через API в 24 раза быстрее ручного сбора — экономия 90% времени. Мы реализовали такие интеграции для 8 проектов, включая мониторинг 50+ доменов ежедневно. Наш стек: Python 3.11, PostgreSQL 16, Docker, Grafana. Код передаём в виде репозитория с документацией.
Почему стоит автоматизировать сбор данных?
Ручной сбор из SEMrush — это часы рутины и риск ошибок при копировании. API даёт доступ к тысячам ключевых слов за один запрос, автоматическое обновление метрик по расписанию и возможность сравнивать 20+ доменов в едином дашборде. SEMrush API vs ручной парсинг:
| Критерий | Ручной сбор | Автоматизация через API |
|---|---|---|
| Время на 5 доменов | 4 часа | 10 минут |
| Точность | Ошибки копирования | 0% |
| Частота обновления | Раз в неделю | Ежедневно |
| Сравнение конкурентов | Трудоёмко | Встроено |
Экономия на ручном сборе данных может достигать $3.6k–5.2k в год для команды из 3 человек — за счёт высвобождения времени на стратегический анализ.
Как управлять расходами API units?
Расход units напрямую зависит от объёма запросов. Оптимизация: для ежедневного мониторинга достаточно запрашивать только ключевые метрики (позиции топ-200, трафик, рейтинг домена). Полный backlink-аудит запускайте раз в неделю. При тарифе Business (10 000 units/мес) можно вести 5 доменов ежедневно. Используйте кэширование — не запрашивайте одни и те же данные повторно в течение дня.
Что делать при ошибках интеграции?
API может возвращать ошибки при превышении лимита, неверном ключе или временных сбоях. Код клиента должен обрабатывать их: при статусе ERROR проводить повторную попытку с экспоненциальной задержкой. Настройте алерты в Telegram или Slack при сбое сбора данных. Это гарантирует, что пропусков метрик не будет.
Как настроить клиент для SEMrush API?
SEMrush использует API-ключ как query-параметр. Ответ по умолчанию в CSV, но для некоторых эндпоинтов доступен JSON. Базовая реализация клиента на Python выглядит так:
import requests
import csv
import io
from typing import Literal
class SemrushClient:
BASE_URL = 'https://api.semrush.com'
ANALYTICS_URL = 'https://api.semrush.com/analytics/v1'
def __init__(self, api_key: str):
self.api_key = api_key
self.session = requests.Session()
def _request(self, params: dict) -> list[dict]:
params['key'] = self.api_key
resp = self.session.get(self.BASE_URL, params=params, timeout=30)
resp.raise_for_status()
if resp.text.startswith('ERROR'):
raise ValueError(f'SEMrush API error: {resp.text}')
reader = csv.DictReader(io.StringIO(resp.text), delimiter=';')
return list(reader) Основные эндпоинты API
Для сбора органики, конкурентов и бэклинков используем следующие методы. Сводка по затратам API units:
| Метод | Эндпоинт | Units (100 строк) | Типичные данные |
|---|---|---|---|
| Органические ключевые | domain_organic |
10 | Позиции, трафик, URL |
| Конкуренты по органике | domain_organic_organic |
10 | Пересекающиеся ключевые |
| Backlinks | backlinks |
40 | Источники, Authority Score |
| Ранги доменов | domain_ranks |
10 | Общие метрики |
Пример получения органических ключевых слов домена:
def get_organic_keywords(self, domain: str, database: str = 'ru', limit: int = 1000) -> list[dict]:
params = {
'type': 'domain_organic',
'domain': domain,
'database': database,
'display_limit': limit,
'display_sort': 'tr_desc',
'export_columns': 'Ph,Po,Pp,Nq,Tr,Ur',
}
return self._request(params)Ответ содержит ключевые поля: Ph — ключевое слово, Po — позиция, Nq — месячный объём поиска, Tr — расчётный трафик, Ur — URL страницы.
Для backlink-аудита используем:
def get_backlinks(self, target: str, limit: int = 1000) -> list[dict]:
params = {
'type': 'backlinks',
'target': target,
'target_type': 'root_domain',
'display_limit': limit,
'display_sort': 'page_ascore_desc',
'export_columns': 'source_url,target_url,anchor,page_ascore,domain_ascore,nofollow,first_seen',
}
return self._request(params) Ежедневный сбор данных и хранение
Организуем пайплайн: по расписанию (например, cron) запускается скрипт, который собирает метрики домена, топ-200 ключевых слов, и сохраняет всё в PostgreSQL. Пример схемы:
CREATE TABLE semrush_domain_metrics (
id SERIAL PRIMARY KEY,
domain TEXT NOT NULL,
snapshot_date DATE NOT NULL,
organic_keywords INTEGER,
organic_traffic INTEGER,
semrush_rank INTEGER,
UNIQUE(domain, snapshot_date)
);
CREATE TABLE semrush_keyword_positions (
id SERIAL PRIMARY KEY,
domain TEXT NOT NULL,
keyword TEXT NOT NULL,
position INTEGER,
search_volume INTEGER,
url TEXT,
snapshot_date DATE NOT NULL,
UNIQUE(domain, keyword, snapshot_date)
);
Пошаговая настройка интеграции
Чтобы автоматизировать сбор данных, выполните следующие шаги:
- Получите API-ключ в панели SEMrush (раздел API).
- Установите зависимости:
pip install requests psycopg2-binary. - Реализуйте класс
SemrushClientкак показано выше. - Создайте таблицы в PostgreSQL по приведённой схеме.
- Настройте cron-задачу для ежедневного запуска скрипта.
- Интегрируйте метрики в Grafana для визуализации.
Что входит в работу
Наша интеграция включает:
- Код клиента на Python с обработкой ошибок и пагинацией.
- Скрипты для сбора данных по расписанию.
- Схему PostgreSQL для хранения метрик.
- Документацию по запуску и настройке.
- Настройку дашборда в Grafana (опционально).
- Поддержку после внедрения при обнаружении ошибок.
Расчёт API units
Для ежедневного мониторинга 5 доменов (метрики + 200 ключевых слов) расход примерно 500–700 units в день. При тарифе Business (10 000 units/мес) это укладывается в лимит. Оптимизация: не запрашивать полные списки бэклинков ежедневно, только ключевые метрики. Полный backlink-аудит — раз в неделю.
Сроки и стоимость
Базовая интеграция с ежедневным сбором метрик одного домена и топ-200 ключевых слов — 2–3 рабочих дня. Расширенная версия с конкурентным анализом, backlink-аудитом и дашбордом в Grafana — 5–7 дней. Стоимость рассчитываем индивидуально после аудита ваших задач. Получите консультацию — свяжитесь с нами, чтобы оценить проект. Закажите интеграцию сегодня и начните экономить время и ресурсы.
Мы гарантируем качество: код покрыт тестами, настроены алерты при ошибках сбора, предоставляем поддержку после внедрения. Наш опыт — 5+ лет в веб-разработке и SEO-интеграциях, реализовано 8 проектов с суммарным мониторингом 50+ доменов.







