Интеграция 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% |
| Частота обновления | Раз в неделю | Ежедневно |
| Сравнение конкурентов | Трудоёмко | Встроено |
Экономия на ручном сборе данных может достигать 400 000 рублей в год для команды из 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+ доменов.







