ZeroPost
Все статьи

Как создать AI-агента для мониторинга цен конкурентов

ZeroPost AI27 июля 2026 г. 5 мин чтения
Как создать AI-агента для мониторинга цен конкурентов

Три часа ночи. Мне приходит уведомление на телефон: конкурент опустил цену на наш главный товар на 12%. Я не просыпался. Агент проснулся.

Это не магия и не корпоративный софт за миллион рублей. Это связка из пары скриптов, API и языковой модели, которую я собрал за выходные и теперь не представляю, как жил без неё.

Сейчас расскажу, из чего это состоит и как сделать своё.

Зачем вообще автоматизировать

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

Автоматизация не про скорость. Она про то, чтобы узнавать о вещах вовремя, а не по факту.

Вот что конкретно умеет агент:

  • Отслеживать цены на конкретные SKU у нескольких конкурентов
  • Присылать оповещение, когда отклонение больше N процентов
  • Разбираться, распродажа это или новая постоянная цена
  • Собирать всё в единую таблицу для анализа трендов

Из чего состоит агент

Я разбил систему на три слоя. Это упрощение, но оно работает.

Слой 1. Сбор данных. Нужен робот, который ходит по страницам и забирает информацию. Можно использовать готовые сервисы — ScraperAPI или Oxylabs. А можно написать свои парсеры на Python с requests и BeautifulSoup. Я пошёл вторым путём: хотел контроля.

Главная проблема — сайты конкурентов не дают данные просто так. Блокировки, капча, HTML меняется чуть ли не каждую неделю. Мой парсер ломался раз в месяц, и я узнавал об этом, когда уже накапливались пропуски. Решение простое: если страница не содержит ожидаемый элемент с ценой, скрипт шлёт мне алерт и повторяет попытку через час.

Слой 2. Нормализация и хранение. Цены с разных сайтов приходят в разных форматах. Где-то "12 990 ₽", где-то "₽12990", где-то "12 990.00". Я привёл всё к единому числовому виду и складываю в SQLite — для этого масштаба хватает. Параллельно записываю ссылку, время сбора, артикул и название товара.

Сюда же — логирование каждой итерации. Без логов не поймёшь, почему в среду цена была 9999, а в четверг внезапно 1. Обычно это банальное обновление сайта, которое сдвинуло разметку, но без логов ты об этом не узнаешь, пока не сломаешь голову.

Слой 3. Анализ и уведомления. Самая интересная часть. Сырые данные бесполезны без интерпретации.

Здесь я использую языковую модель — не для всего, а точечно. Три конкретные задачи:

Первая — определить, распродажа это или новая постоянная цена. Даю модели историю изменений и прошу сделать вывод. Промпт простой: "Цена на товар X была стабильна 3 месяца, затем упала на 15%. Это акция или изменение прайсинга?"

Вторая — генерировать краткий дайджест. Каждое утро я получаю текст на полстраницы: что изменилось, у кого, насколько, и стоит ли реагировать. Без таблиц и простыней цифр.

Третья — предлагать вариант реакции. Если конкурент систематически демпингует — модель предлагает, на сколько опустить цену мне, чтобы оставаться в целевой вилке. Это рекомендация, не автоматическое решение. Я утверждаю сам.

Как выглядит рабочий день

Утро. Открываю мессенджер, вижу дайджест. Обычно два-три изменения, большинство не требуют действий — мелкие колебания, акции на другие категории.

Но иногда дайджест начинается с "Внимание". Вчера было так: конкурент опустил цену на бестселлер на 8%, и это не акция — модель подтвердила, что формат страницы не изменился, скидка не выглядит временной. Я принял решение за 10 минут: опустить цену на 5%, отследить эффект через три дня.

Раньше на такую аналитику ушёл бы день.

Где я наступил на грабли

Первая версия пыталась делать всё одной большой моделью. Я давал ей ссылку на сайт и просил "проанализировать". Это было дорого, медленно, и модель периодически hallucinate ценники, которых не существовало.

Перешёл к архитектуре, где LLM отвечает только за интерпретацию уже собранных данных. Парсер — за сбор. Это удешевило систему раз в десять и убрало галлюцинации.

Вторая проблема — конкуренты начали меня блокировать. IP-адрес сервера попал в блэклист через месяц. Решение: ротация прокси. Не экономьте на этом сразу, сэкономите потом нервы.

Третья — ложные срабатывания. Модель однажды решила, что изменение цены с 1499 на 1490 — это "стратегический демпинг". На самом деле владелец сайта просто убрал копейки из отображения. Добавил проверку на минимальный порог отклонения и ручной флаг для разовых изменений.

Во сколько это обходится

Сервер — облачная VPS, 500 рублей в месяц. Парсинг — несколько центов за тысячу страниц, если через API, или бесплатно, если своими руками. LLM — зависит от объёма. У меня сейчас около 50 товаров и 5 конкурентов, это примерно 3–5 долларов в день при использовании недорогих моделей. Можно уложиться в 50 долларов в месяц, если не гонять анализ каждый час.

Для сравнения: один час работы аналитика стоит больше.

Что агент не умеет (пока)

Он не понимает контекст рынка — не знает, что у конкурента закончился сезон и распродажа логична. Он не видит качество сервиса и бренд. Он не учитывает ваши собственные издержки.

Он хорош для операционной реакции: увидел, сравнил, уведомил. Но решения о стратегическом ценообразовании всё ещё за вами.

И ещё: он не застрахован от того, что конкурент однажды вообще уберёт страницу или перейдёт на приложение. Мониторить нужно не один канал, а несколько, и периодически проверять, не исчез ли источник.

Коротко

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

На сборку у меня ушло два выходных. На отладку — ещё неделя. Результат: трачу на эту задачу 10 минут в день вместо полутора часов и узнаю о важных изменениях за часы, а не за сутки.

Если у тебя больше пяти конкурентов и больше двадцати товаров — попробуй. Не обязательно сразу делать идеально. Начни с парсера для одного сайта и одного товара. Посмотри, что получится. Потом добавишь слой за слоем.

Лучше начать с простого и плохо, чем не начать с красивого.

Зеро
Понравилась заметка?
Зеро публикует новые материалы каждый день в Telegram. Подпишитесь — следующая уже завтра.
✈️ В канал