Полка Концепт-прототип · не действующий продукт

Что конкуренты делают на полке

Обход аптечных сайтов по расписанию: баннеры, выделенные SKU, цены и позиции в выдаче. Те же строки и те же скриншоты-доказательства, что сдаёт агентство, — только каждый день и с датами начала и окончания акции.

2 FTE
Backend 1 · ML 0,5 · PM 0,5
2 месяца
до обхода по расписанию с историей
Скриншот
визуальное доказательство к каждой строке
В слой
источник правды — слой, привычная таблица остаётся его выходом

Что меняется

Сегодня это ходит и смотрит человек

В агентстве есть выделенный сотрудник, который обходит фиксированный список адресов, заносит активности конкурентов в таблицу и делает скриншоты. Платим за FTE именно за то, что кто-то смотрит.

Как сейчас

Срез раз в период, задним числом

Человек физически не может обойти все площадки каждый день, поэтому акция попадает в таблицу тогда, когда её заметили. Дата начала — это дата обхода, а не дата запуска. Короткие акции пропускаются целиком. Расширить список площадок или запросов — значит докупить ещё FTE.

Как станет

Ежедневный обход и сравнение срезов

Каждая площадка обходится по расписанию, новый срез сравнивается с предыдущим. Видно что появилось, что исчезло и где сдвинулась цена — с точностью до дня. Добавить площадку или запрос — это строка в списке, а не ещё один человек.

Как устроено

Три решения, которые определяют продукт

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

Смотрим глазами, а не по вёрстке

Модель читает скриншот страницы так же, как его читает сотрудник агентства. HTML нужен только чтобы добрать ссылки и то, что не влезло в кадр.

Следствие: вёрстка площадки перестаёт быть фактором. Именно поэтому число площадок почти не влияет на срок — а вот чистка HTML по эвристике селекторов, которая есть в присланном прототипе, к вёрстке привязана намертво и в объём не берётся.

Собираем срезы, а не строки

Промо — это событие с началом и концом. Обход повторяется, срез сравнивается с предыдущим, и строка живёт с датами, а не появляется один раз.

Следствие: дедупликация идёт по площадке, SKU, типу размещения и окну дат, а не по адресу страницы. В присланном прототипе адрес после обработки помечается «обработано» и больше не берётся — поэтому истории там взяться неоткуда.

Пишем туда же, где продажи

Название с сайта сопоставляется с номенклатурой, площадка — с сетью. Дальше строка ложится в аналитический слой, а не в отдельную таблицу.

Следствие: справочники соответствий для этого уже заводятся в инициативе по demand planning — второй раз их делать не нужно. Google-таблица и папка на Drive при этом никуда не деваются: они перестают быть базой, но остаются выходом, пока их кто-то читает. Отбирать у e-com привычный файл ради чистоты схемы — лишняя драка на ровном месте.
Как идёт обход

Список адресов на входе, строка с доказательством на выходе

Список площадок, страниц и поисковых запросов даёт e-com — это ваш рабочий инструмент, а не наша разработка. Всё остальное между входом и выходом делает сервис.

Обход
Вход
Страницы акций
Разделы «Акции» и «Спецпредложения» площадок — там живут баннеры и подборки
Вход
Карточки и категории
Категорийные листинги по нашим и конкурентным SKU — там видно выделение и цену
Вход
Поисковые запросы
Список запросов категории — там видно, кто и на какой позиции стоит в выдаче
по расписанию, с прокси и повторными попытками · сохраняется скриншот и HTML страницы
Ядро
Извлечение по скриншоту → сопоставление со справочниками
Модель находит на странице все карточки, баннеры и предложения, разбирает пару «обычная цена / цена по акции» и определяет тип размещения. Дальше название с сайта приводится к номенклатуре, а площадка — к сети.
Размещения
Баннер, выделенная карточка, спецпредложение — три типа с вашего слайда.
Цены и скидка
Обычная, акционная, размер скидки. Самая проработанная часть присланного прототипа — забираем как есть.
Позиции в выдаче
Кто стоит в топе по запросу. Третий тип активности, которого в прототипе нет.
новый срез сравнивается с предыдущим
Выход · источник правды
Строки с историей в слой
Активность с датой начала и окончания, привязанная к SKU и сети. Ложится туда же, где лежат продажи.
Выход
Та же Google-таблица
Лист, в который сегодня сдаёт агентство, наполняется сам. Для e-com не меняется ничего, кроме того, что строки появляются каждый день. Это производная от слоя — выключается без потери данных.
Выход
Скриншоты на Drive
Доказательство ссылкой в строке, в той же папке, где лежит сейчас. Данные собраны с открытых витрин, поэтому внешнее хранилище здесь допустимо.
Ежедневный обход десятка площадок — это не увеличенный ручной прогон: нужны расписание, троттлинг, повторные попытки и работа с защитой от ботов, которых в прототипе нет вообще ни на одной ноде. Плюс трафик резидентных прокси и объём скриншотов — это отдельная строка инфраструктуры, и её надо назвать сразу, раз выгода считается от стоимости агентства.
Прототип · три экрана

Как это выглядит в работе

Первый — то, чего у агентства нет в принципе. Второй — ровно то, что агентство сдаёт сейчас. Оба живут в DataLens поверх слоя, своего интерфейса мы не строим. Третий — внутренний: состояние обхода и справочников, от которого зависит, можно ли верить первым двум.

ЭКРАН 01

Что изменилось со вчера

Главный экран, потому что он появляется только при ежедневном обходе. Агентство сдаёт состояние на момент, когда посмотрело; здесь видно событие — акция началась в среду, а не «была замечена в конце месяца». Свои SKU в ленте тоже есть: выпадение из выдачи по ключевому запросу — такое же событие, как чужой баннер. Отдельного приложения под это нет — дашборд собирается в DataLens поверх слоя, как и всё остальное по продажам.

datalens · Полка · изменения

Изменения за сутки

Обход завершён сегодня в 05:40 · 9 площадок · категория «Уход за полостью рта»
14 новых 9 завершились 23 цены
Лента
Новый баннер
Lacalut · баннер на главной странице
ЕАПТЕКА · «Скидка 25% на всю линейку» · впервые замечен сегодня в 05:41
−25%первый день
Цена
R.O.C.S. Sensitive, паста 74 мл
Здравсити · карточка выделена плашкой «Выгодно» · акция идёт четвёртый день
389 → 329 ₽−15,4%
Наш SKU
Sensodyne Мгновенный эффект, 75 мл
Горздрав · выпал из первой десятки по запросу «паста для чувствительных зубов»
6 → 14позиция
Спецпредложение
President · подборка «Выбор стоматолога»
Аптека.ру · 6 SKU в подборке, из них 2 конкурируют с нашей линейкой
6 SKUвторой день
Закончилось
Splat Ultracomplex · спецпредложение
Планета Здоровья · шло 12 дней, вчера размещение исчезло со страницы акций
12 дней04.08 — 15.08
Цена
Parodontax Классический, 75 мл
Ригла · акционная цена снята, вернулась обычная
319 → 379 ₽+18,8%
Доказательство
eapteka.ru · главная · 24.08, 05:41 · скриншот сохранён к строке

К каждой строке приложен снимок страницы на момент обхода — то же, что прикладывает агентство, только не выборочно.

За месяц
Размещений зафиксировано418
Средняя длительность акции9,4 дня
Короче трёх дней47

Сорок семь коротких акций — это то, что при обходе раз в период не попадает в отчёт вообще.

ЭКРАН 02

Активности конкурентов

Тот же набор полей, что в вашей Google-таблице: площадка, бренд, SKU, тип активности, обычная и акционная цена, скидка, даты. Это то, что должно поехать в первую же неделю — чтобы было чем сравниваться с последней сдачей агентства. Справа — третий тип активности с вашего слайда, приоритизация в выдаче, которой в прототипе нет. Скриншот-доказательство живёт ссылкой в строке — так же, как агентство сдаёт его папкой на диске.

datalens · Полка · активности

Август · категория «Уход за полостью рта»

418 размещений · 9 площадок · 11 брендов · зелёной чертой отмечены наши SKU
ПлощадкаБренд и SKUАктивность ОбычнаяАкционнаяСкидкаПериод
ЕАПТЕКАLacalut · Aktiv, 75 млБаннер на главной 449337−25%с 24.08
ЗдравситиR.O.C.S. · Sensitive, 74 млВыделенная карточка 389329−15%21.08 — 31.08
Аптека.руPresident · Sensitive, 75 млСпецпредложение 412349−15%с 23.08
РиглаSensodyne · Мгновенный эффект, 75 млВыделенная карточка 459389−15%18.08 — 24.08
Планета ЗдоровьяSplat · Ultracomplex, 100 млСпецпредложение 299229−23%04.08 — 15.08
ГорздравParodontax · Классический, 75 млБаннер категории 379319−16%10.08 — 23.08
АпрельАсепта · Sensitive, 75 млВыделенная карточка 356299−16%с 19.08
Аптека.руColgate · Elmex Sensitive, 75 млБаннер категории 495396−20%12.08 — 26.08

Период закрывается автоматически, когда размещение перестаёт находиться при очередном обходе. «С 24.08» означает, что акция ещё идёт.

Позиции в выдаче
«паста для чувствительных зубов» · Горздрав
123 14
«паста от кровоточивости дёсен» · Аптека.ру
234 56
«крем для фиксации протезов» · ЕАПТЕКА
123 45

Список запросов ведёт e-com. Позиция снимается тем же обходом и живёт как ряд, а не как разовый замер.

Сверка с агентством
Строк у агентства за июль183
Из них нашлось179
Нашли сверх того+64
Расходится цена7

Сдачи агентства за прошлые месяцы — готовый эталон. Сверяемся построчно, как только поехали первые площадки.

ЭКРАН 03

Обход и справочники

Единственный экран, который делаем мы, — служебный, для того, кто следит за обходом. Две вещи, от которых зависит всё остальное. Слева — прошли ли площадки сегодня: если площадка отдала капчу, её строки за день просто отсутствуют, и это надо видеть, а не узнавать из пустого отчёта. Справа — сопоставление названий с сайта с номенклатурой: пока SKU не сопоставлен, строка есть, но встать рядом с продажами не может.

полка.internal / обход

Обход за сегодня

Запуск 05:00 · 9 площадок · 214 страниц · 06:12 завершён
1 площадка не прошла
Площадки
Аптека.ру
38 страниц · акции, категории, 6 запросов
05:14 · 4 мин
96 строк
ЕАПТЕКА
31 страница · акции, категории, 6 запросов
05:41 · 5 мин
84 строки
Здравсити
27 страниц · акции, категории, 4 запроса
05:52 · 3 мин
61 строка
Ригла
Отдала проверку на бота на 12-й странице. Повтор через прокси другого региона поставлен на 14:00 — строки за сегодня появятся после него
Повтор в 14:00
0 строк
Горздрав · Планета Здоровья · Апрель · Максавит · Фармленд
106 страниц суммарно
06:12 · 21 мин
177 строк
Сопоставление с номенклатурой
Названий с сайтов сведено к SKU1 106 из 1 149
Площадок сведено к сетям9 из 9
Ждут решения43

Несопоставленные строки не пропадают — они видны в активностях, но в слой не уходят, пока не станет понятно, к какому SKU их отнести. Чаще всего это новая фасовка или другое написание бренда на витрине.

Записано в слой
Строк за сегодня418
Скриншотов в архиве214
Последняя запись06:18
Стоимость обхода
Страниц в сутки214
Из них через резидентный прокси63

Прокси и хранение скриншотов — единственная растущая статья. Видна здесь же, чтобы решение «добавить площадку» принималось с ценником.

Куда это ложится

Отдельный файл или колонка рядом с продажами

Разница не в парсере — он одинаковый. Разница в том, куда уходит строка на выходе.

Сам по себе

Замена агентства

Те же таблицы и скриншоты, только дешевле и чаще. Это ровно то, что заказано, и это работает с первых недель. Но живёт отдельным файлом, и чтобы связать активность конкурента с продажами, кто-то всё равно сводит руками.

В связке с demand planning

Ещё один источник в слой

Строки парсера описывают те же SKU и те же сети, что строки продаж. Соответствия для этого уже заводятся в инициативе по demand planning — значит промо конкурента ложится рядом с вторичкой по той же неделе и той же сети без дополнительной работы по сведению.

Что это даёт практически: когда наше промо не отработало, видно, что происходило в это время на той же полке. Дальше это вопрос к аналитикам, а не к нам, — но данных для него сегодня нет ни у кого.

Как докатывается ценность

Сравниваться с агентством начинаем на первой неделе

Эталон готов заранее: сдачи агентства за прошлые месяцы. Как только поехала первая площадка, есть с чем сверяться построчно — и не нужно ждать конца проекта, чтобы понять, работает ли это.

Недели 1–2

Первые площадки и те же поля

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

2 площадки
под обходом
Недели 3–4

Расписание и сравнение срезов

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

5 площадок
под обходом, история пошла
Недели 5–6

Поисковые запросы и сопоставление

Добавляется третий тип активности — позиции в выдаче по списку запросов от e-com. Параллельно названия с сайтов сводятся к номенклатуре, а площадки к сетям, и строки начинают уходить в слой.

8 площадок
плюс позиции по запросам
Недели 7–8

Полный список и параллельный прогон

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

все площадки
ежедневно, со сверкой
Как работает команда

Основная работа — не извлечение, а обход и справочники

Промпт извлечения у вас уже написан и работает — эту часть мы забираем, а не разрабатываем. Поэтому бэкенд здесь полный, а ML половина: у него не парсинг, у него сведение названий с витрин к номенклатуре.

Фронтенда в кейсе нет и он не нужен: лента изменений и таблица активностей собираются в DataLens поверх слоя, а служебная страница обхода — это список со статусами и очередь подтверждений, её пишет бэкенд.

1
2
3
4
5
6
7
8
Backend · 1
Обход, прокси, скриншоты в архив
Расписание, срезы и история, повторы
Защита от ботов, запись в слой
ML · 0,5
Извлечение на новых площадках, нормализация брендов
Сведение названий с витрин к номенклатуре и сетям
PM · 0,5
Список площадок и запросов от e-com, таксономия активностей
Построчная сверка с сдачами агентства, разбор расхождений
Список площадок, страниц и поисковых запросов приносит e-com — он у вас уже есть, потому что по нему сегодня ходит агентство. Просить его надо на первой неделе: пока списка нет, обход строится на том, что мы придумали сами, и сверяться с эталоном будет нечем.