Продавец на маркетплейсе следил за ценами конкурентов руками и пришёл это выключить.
Каждое утро он открывал полсотни чужих карточек, переписывал цены в блокнот, к пятнице уже не помнил кто и когда подвинулся.
Просадку своей позиции в выдаче замечал по упавшим заказам - то-есть с опозданием в несколько дней.
Задача была поставлена так: раз в сутки видеть свежий срез по конкурентам и получать сигнал сразу, как только кто-то ушёл ниже его цены.
Просил ещё историю по дням, чтобы отличать разовую акцию у соседа от новой цены, которую тот держит вторую неделю.
Парсер на Python, запросы через httpx, разбор ответов через selectolax.
Собирает карточки по списку поисковых запросов и по прямым ссылкам на конкурентов - цена, остаток, позиция в выдаче, метка акции.
Пишет в Google Таблицу через gspread: лист сегодняшнего среза и лист истории, куда каждый прогон дописывает строку на товар.
Алерты уходят ботом на aiogram - цена конкурента ниже порога, товар пропал из наличия, своя карточка уехала ниже заданного места в выдаче. Порог задаётся колонкой в самой таблице, без правок кода.
Ломается в таких проектах всегда одно - блокировки и тихая смена вёрстки. Закрыл паузой со случайным разбросом между запросами, повтором с растущим интервалом на 429 и 5xx, пулом прокси с выбыванием мёртвых.
Так-же парсер не пишет нули в таблицу, когда ответ перестал совпадать с ожидаемой структурой - вместо записи уходит сообщение в бот, что разбор сломался и данные за прогон трогать нельзя.
Запуск по расписанию на VPS через systemd-таймер, состояние прогонов в SQLite, логи с ротацией.
Ручной обход карточек занимал около полутора часов в день, сейчас это одна вкладка с таблицей.
Сервис ведёт порядка 300 карточек в двух категориях, полный прогон занимает двадцать минут.
На демпинг соседа продавец реагирует в тот же день по алерту и сам решает, догонять цену или переждать.
История по дням дала неожиданное: часть конкурентов роняет цену только на выходные, гнаться за ними смысла нет.
Клиенту отданы исходники, доступ к таблице и инструкция на страницу - как добавить запрос, как поменять порог, как перезапустить парсер с консоли.
После сдачи подключили второй маркетплейс в тот же лист и добавили выгрузку истории отдельным файлом.