Мониторинг цен конкурентов: как настроить автоматически
Мониторинг цен конкурентов настраивается автоматически в пять частей: таблица соответствия ваших товаров товарам конкурентов, парсер, который собирает цену и наличие, расписание запусков, хранилище с историей и отчёт с уведомлениями. Для 20-50 позиций хватит Google Таблиц с формулой IMPORTXML, для сотен и тысяч товаров нужен готовый сервис или свой парсер на Python, который каждую ночь обходит сайты, складывает данные в базу, выгружает таблицу в Excel или Google Таблицы и присылает в Telegram только то, что требует решения. Ниже разбираем каждый шаг на практике, с инструментами, подводными камнями и юридическими рамками.
Три способа настроить мониторинг цен
| Способ | Сколько товаров | Плюсы | Минусы |
|---|---|---|---|
| Google Таблицы с IMPORTXML | до 50-100 | бесплатно, настраивается за вечер | падает на сайтах с защитой и динамической загрузкой, медленно |
| Готовый сервис мониторинга | сотни и тысячи | быстрый старт, интерфейс, отчёты | ежемесячная оплата за число позиций, не все сайты поддерживаются, данные у третьей стороны |
| Свой парсер | любое | любые источники и логика отчётов, данные у вас | разработка и поддержка при изменении сайтов конкурентов |
Выбор зависит от объёма и того, что вы будете делать с данными. Если нужно раз в неделю глянуть цены на 30 ключевых позиций, разработка не окупится. Если цены меняются ежедневно, а от них зависит маржа по тысяче товаров, ручной контроль обходится дороже автоматики.
Быстрый вариант: Google Таблицы
Для небольшого ассортимента подойдёт функция IMPORTXML. Она загружает страницу и достаёт из неё значение по пути XPath.
Как настроить:
- В столбце A ваши товары, в B ссылки на этот товар у конкурента.
- Откройте страницу конкурента в Chrome, нажмите правой кнопкой на цену, выберите «Просмотреть код», затем на выделенном элементе «Copy → Copy XPath».
- В ячейке C напишите
=IMPORTXML(B2; "скопированный_xpath"). - Растяните формулу на все строки.
Ограничения: многие интернет-магазины подгружают цену скриптом, и IMPORTXML её не видит. Крупные площадки блокируют такие запросы. Таблица пересчитывается не по расписанию, а когда ей вздумается, и историю цен не хранит. Это способ проверить идею, а не рабочий инструмент.
Шаг 1. Сопоставление товаров
Самая трудоёмкая часть, и именно на ней ломается большинство проектов мониторинга цен. Парсер собирает цены быстро, но если он сравнивает ваш чайник с чайником другой модели, отчёт бесполезен.
Способы сопоставить товары:
- По штрихкоду (EAN, GTIN). Самый надёжный ключ, если конкуренты публикуют его на странице или в микроразметке.
- По артикулу производителя. Работает для техники, запчастей, инструмента. Важно приводить артикулы к одному виду: убирать пробелы, дефисы, регистр.
- По названию. Нечёткое сравнение строк находит кандидатов, но результат обязательно проверяет человек.
- Вручную. Для небольшого ассортимента быстрее всего просто собрать ссылки.
На практике комбинируют: автоматически находят 60-80 % связок по коду, остальное доводят вручную, а потом раз в месяц проверяют новые позиции. Храните таблицу соответствия отдельно от парсера: это ценный актив, который понадобится при любой смене инструмента.
Учтите комплектации. Один и тот же аппарат у конкурента может продаваться с чехлом и зарядкой, а у вас без. Добавьте в таблицу поле «сопоставимо: да / с оговоркой», чтобы отчёт не поднимал ложную тревогу.
Шаг 2. Откуда брать цену
Прежде чем писать селекторы под вёрстку, проверьте более надёжные источники.
Микроразметка. Многие магазины размечают карточку по стандарту schema.org для поисковиков. В коде страницы ищите блок application/ld+json с типом Product и вложенным Offer: в нём лежат price, priceCurrency и availability. Эта разметка меняется реже, чем дизайн, и парсер живёт дольше.
Фиды. Магазины выгружают товары в YML для Яндекс Маркета и других площадок. Иногда фид лежит по открытой ссылке, и в нём сразу все цены и наличие одним файлом.
Вёрстка. Если ничего из перечисленного нет, цена берётся из HTML по CSS-селектору. Это самый хрупкий вариант: конкурент поменял дизайн, и парсер вернул пустоту.
Страницы со скриптами. Если цена появляется только после выполнения JavaScript, нужен браузерный парсер на Playwright. Он медленнее и тяжелее, поэтому сначала посмотрите во вкладке «Network» инструментов разработчика: часто сайт получает цены отдельным запросом к своему API в формате JSON, и забрать их оттуда проще.
Пример, как достать цену из микроразметки на Python:
import json, httpx
from selectolax.parser import HTMLParser
html = httpx.get(url, headers={"User-Agent": "PriceMonitor/1.0"}, timeout=20).text
for node in HTMLParser(html).css('script[type="application/ld+json"]'):
data = json.loads(node.text())
if isinstance(data, dict) and data.get("@type") == "Product":
offer = data["offers"]
print(offer.get("price"), offer.get("availability"))
В реальном парсере добавляются обработка ошибок, вложенные структуры @graph, списки офферов и паузы между запросами.
Маркетплейсы
Цены на Ozon и Wildberries собирать сложнее. Площадки защищаются от автоматических запросов, цена зависит от региона доставки и способа оплаты, у покупателей бывают персональные скидки. Поэтому определитесь, какую цену вы сравниваете: на витрине для Москвы без авторизации, например. Для своих товаров на Ozon проверьте встроенные инструменты в кабинете продавца: площадка сама показывает, как ваша цена соотносится с ценами на других площадках.
Шаг 3. Расписание и нагрузка
Как часто собирать данные:
- раз в сутки ночью для большинства розничных ниш;
- 2-4 раза в день для электроники, маркетплейсов и товаров с ежедневными акциями;
- раз в неделю для B2B и товаров, где цены меняются редко.
Запуск по расписанию делается через cron на сервере или через планировщик в n8n, если вы им уже пользуетесь. Между запросами к одному сайту ставьте паузы в 1-3 секунды и запускайте обход в ночные часы. Парсер не должен заметно нагружать чужой сервер: это вопрос и этики, и юридических рисков, и того, что вас просто заблокируют.
Шаг 4. Хранение и история
Сохранять стоит не только текущую цену, но и историю. Минимальная таблица в базе (SQLite для старта, PostgreSQL для больших объёмов):
| Поле | Пример |
|---|---|
| ваш артикул | KT-1520 |
| конкурент | shop-a |
| ссылка | адрес карточки |
| цена | 4 990 |
| старая цена (зачёркнутая) | 5 490 |
| наличие | в наличии |
| дата и время проверки | 2026-10-10 03:15 |
| статус проверки | ок / не найдена цена / страница недоступна |
История позволяет видеть, как часто конкурент меняет цены, когда начинает акции и возвращает ли цену после них. Это ценнее разового среза.
Шаг 5. Выгрузка в Excel и Google Таблицы
Отчёт должен открываться там, где с ним работают менеджеры.
Google Таблицы. Через Google Sheets API парсер после каждого запуска перезаписывает лист с актуальными данными. Нужен сервисный аккаунт в Google Cloud, к которому вы даёте доступ на редактирование таблицы, а на Python удобно работать с библиотекой gspread. Плюс в том, что таблица всегда актуальна и доступна всем по ссылке.
Excel. Если в компании работают в Excel или данные потом идут в 1С, парсер формирует файл через openpyxl и кладёт его в общую папку или отправляет на почту. В файле сразу задаётся условное форматирование: красным строки, где вы дороже рынка.
Структура отчёта, которая работает:
- ваш товар и ваша цена;
- минимальная цена у конкурентов и у кого;
- разница в процентах;
- цены по каждому конкуренту в отдельных столбцах;
- изменение за сутки;
- дата последней успешной проверки.
Если ваши цены живут в 1С и на сайте, данные мониторинга можно использовать для пересчёта, но решение о новой цене лучше оставлять человеку или жёстко заданным правилам с ограничением по марже. Как устроен обмен цен между сайтом и учётной системой, мы разбирали в статье про обмен сайта с 1С.
Шаг 6. Уведомления в Telegram
Отчёт на 2 000 строк никто не читает каждый день. Уведомления нужны только о том, что требует действия.
Как настроить:
- Создайте бота через @BotFather и получите токен.
- Добавьте бота в рабочий чат и узнайте идентификатор чата.
- В конце обхода парсер отправляет сообщение через Bot API методом sendMessage.
Какие события стоит присылать:
- вы дороже минимальной цены рынка больше чем на заданный порог, например 5 %;
- конкурент снизил цену на позицию из топ-100 ваших продаж больше чем на 10 %;
- у всех конкурентов товара нет в наличии (можно поднять цену или усилить рекламу);
- парсер не смог получить цену у конкурента на 20 % страниц: скорее всего, у него поменялся сайт.
Последний пункт обязателен. Без него мониторинг молча ломается, отчёт показывает старые цены, а решения принимаются по ним. Если вы хотите, чтобы бот не только уведомлял, но и отвечал на запросы вроде «покажи цены по артикулу», это уже отдельный инструмент: о возможностях ботов подробнее в статье Telegram-бот для бизнеса.
Юридические рамки
Сбор открыто опубликованных цен для анализа рынка обычная практика. Но есть границы:
- Базы данных. Копирование существенной части чужой базы данных (весь каталог с описаниями и фото) может нарушать права её изготовителя по ГК РФ. Для мониторинга нужны только цена и наличие, не собирайте лишнего.
- Нагрузка. Частые запросы, которые мешают работе чужого сайта, создают риски и технические, и юридические.
- Обход защиты и авторизации. Сбор данных из закрытых разделов, личных кабинетов, обход капчи переводят задачу в другую категорию риска.
- Персональные данные. Мониторинг цен их не требует. Если на страницах есть отзывы с именами, не сохраняйте их.
- Согласование цен. Автоматически реагировать на цены рынка можно. Договариваться с конкурентами о ценах, в том числе через общие алгоритмы, нельзя: это картель, и ФАС внимательно следит за ценовыми алгоритмами.
Подробно о том, что можно и чего нельзя при парсинге, мы писали в статье парсинг сайтов: законно ли.
Сколько стоит мониторинг цен
Готовые сервисы обычно тарифицируют по числу отслеживаемых позиций и конкурентов, и для нескольких сотен товаров это от нескольких тысяч рублей в месяц. Свой парсер требует разработки: простой проект на 3-5 сайтов с выгрузкой в Google Таблицы и уведомлениями занимает 1-3 недели, сложнее становится с маркетплейсами и сайтами со скриптовой загрузкой. Плюс поддержка: сайты конкурентов меняются, и парсер нужно поправлять, в среднем несколько раз в год на каждый источник.
Частые вопросы
Можно ли настроить мониторинг цен конкурентов бесплатно?
Для нескольких десятков товаров да, через Google Таблицы и IMPORTXML, если сайты конкурентов отдают цену в HTML без защиты. Для большего объёма бесплатных решений, которые работают стабильно, нет.
Как часто нужно проверять цены конкурентов?
Для большинства розничных ниш достаточно раза в сутки. На маркетплейсах и в электронике цены меняются чаще, там имеет смысл проверять 2-4 раза в день.
Что делать, если конкурент заблокировал парсер?
Сначала снизить частоту и нагрузку, проверить, нет ли официального фида или API. Обход защиты любой ценой увеличивает юридические риски и затраты на поддержку, иногда выгоднее отказаться от этого источника.
Можно ли автоматически менять свои цены по данным мониторинга?
Можно, но с ограничениями: минимальная маржа, максимальный шаг изменения, список позиций, где автоматика не работает. Без этих правил одна ошибка парсера может выставить товар в минус.
Если хотите настроить мониторинг под свой ассортимент, посмотрите, как мы делаем парсеры сайтов и Telegram-ботов для уведомлений. Когда данные мониторинга нужно передавать в учётную систему, подключаем интеграцию с 1С.