Перейти к основному содержимому

Кейс 12: Позиционный радар — мониторинг позиций

Проблема

Позиции товаров на Wildberries меняются ежедневно. Карточка может упасть с #10 на #50 за одну ночь из-за действий конкурентов, изменения алгоритмов ранжирования или проблем со стоком. Без постоянного мониторинга продавец узнаёт о падении слишком поздно — когда продажи уже ощутимо просели.

Типичный сценарий:

  1. Конкурент запускает агрессивную акцию → его карточка поднимается
  2. Карточка клиента смещается вниз по категории и ключевым запросам
  3. CTR падает → заказы падают → оборачиваемость замедляется
  4. Продавец замечает проблему через 2–3 недели по выручке
  5. К этому моменту позиции потеряны, а восстановление стоит дорого

Fotofactor нуждается в непрерывном мониторинге позиций, чтобы:

  • Оперативно реагировать на изменения
  • Обосновывать ценность своих услуг перед клиентом
  • Продавать мониторинг как рекуррентный сервис

Пайплайн данных

Используем два эндпоинта MPStats:

ЭндпоинтДанныеЧастота запросов
GET /wb/get/item/{sku}/by_categoryПозиция в категории (массив за 30 дней)Еженедельно
GET /wb/get/item/{sku}/by_keywordsПозиция по каждому ключевому слову (массив pos за 30 дней)Еженедельно
Формат данных позиций

Оба эндпоинта возвращают массив pos длиной 30 элементов — по одному значению позиции на каждый день. Индекс [-1] — последний (сегодняшний) день, [-8] — неделю назад. Значение 0 обычно означает «товар не найден в выдаче».

{
"category": "Ароматизаторы для дома",
"pos": [12, 11, 10, 8, 8, 7, 6, 5, 5, 4, 4, 4, 3, 3, ...],
"graph": "..."
}

Для ключевых слов структура аналогична — массив объектов, где каждый содержит keyword, pos (массив позиций) и дополнительные метрики.

Еженедельный пайплайн мониторинга

flowchart LR
A["⏰ Cron\n(понедельник, 09:00)"] --> B["Fetch позиций\nпо всем SKU клиента"]
B --> C["Сравнение\nс прошлой неделей"]
C --> D{"Δ > 5\nпозиций?"}
D -- "Падение" --> E["🔴 Алерт\nв Telegram"]
D -- "Рост" --> F["🟢 Поздравление\nклиенту"]
D -- "Стабильно" --> G["📊 Еженедельный\nотчёт"]
E --> G
F --> G

Логика пайплайна:

  1. Еженедельный cron-job запрашивает позиции по всем отслеживаемым SKU клиента
  2. Для каждого SKU сравниваются текущие позиции с позициями неделю назад
  3. Значимые изменения (сдвиг более 5 позиций) генерируют алерт или поздравление
  4. Все данные агрегируются в еженедельный отчёт

Анализ

Расчёт изменений позиций

import httpx
from datetime import datetime

MPSTATS_TOKEN = "your_token"
HEADERS = {"X-Mpstats-TOKEN": MPSTATS_TOKEN}
BASE = "https://mpstats.io/api"

ALERT_THRESHOLD = 5 # значимое изменение
RED_ALERT_THRESHOLD = 10 # критическое падение по ключу


def get_category_position(sku: int) -> dict:
"""Получить позицию SKU в категории за 30 дней."""
resp = httpx.get(
f"{BASE}/wb/get/item/{sku}/by_category",
headers=HEADERS,
)
resp.raise_for_status()
return resp.json()


def get_keyword_positions(sku: int) -> list[dict]:
"""Получить позиции SKU по ключевым словам за 30 дней."""
resp = httpx.get(
f"{BASE}/wb/get/item/{sku}/by_keywords",
headers=HEADERS,
)
resp.raise_for_status()
return resp.json()


def analyze_sku(sku: int) -> dict:
"""Полный анализ позиций одного SKU."""
# --- Позиция в категории ---
cat_data = get_category_position(sku)
cat_pos = cat_data.get("pos", [])

current_cat = cat_pos[-1] if cat_pos else None
prev_week_cat = cat_pos[-8] if len(cat_pos) >= 8 else None

cat_delta = None
if current_cat and prev_week_cat:
# Положительная дельта = улучшение (позиция уменьшилась)
cat_delta = prev_week_cat - current_cat

# --- Позиции по ключевым словам ---
kw_data = get_keyword_positions(sku)
keyword_results = []

for kw_item in kw_data:
keyword = kw_item.get("keyword", "")
pos = kw_item.get("pos", [])

current_kw = pos[-1] if pos else None
prev_week_kw = pos[-8] if len(pos) >= 8 else None

kw_delta = None
if current_kw and prev_week_kw:
kw_delta = prev_week_kw - current_kw

keyword_results.append({
"keyword": keyword,
"current": current_kw,
"prev_week": prev_week_kw,
"delta": kw_delta,
"status": classify_change(kw_delta),
})

return {
"sku": sku,
"category": cat_data.get("category", "N/A"),
"category_current": current_cat,
"category_prev_week": prev_week_cat,
"category_delta": cat_delta,
"category_status": classify_change(cat_delta),
"keywords": keyword_results,
"has_red_alert": any(
kw["delta"] is not None and kw["delta"] < -RED_ALERT_THRESHOLD
for kw in keyword_results
),
}


def classify_change(delta: int | None) -> str:
"""Классификация изменения позиции."""
if delta is None:
return "⚪ Нет данных"
if delta > ALERT_THRESHOLD:
return "🟢 Рост"
if delta < -ALERT_THRESHOLD:
return "🔴 Падение"
return "🟡 Стабильно"
Настройка порогов алертов

Рекомендуемые пороги для разных типов товаров:

  • Высококонкурентные категории (одежда, электроника): порог 3 позиции — позиции нестабильны, важно ловить тренд рано
  • Средняя конкуренция (товары для дома, косметика): порог 5 позиций — стандартная настройка
  • Нишевые товары (специализированные): порог 8–10 позиций — колебания нормальны, реагируем на серьёзные сдвиги

RED-алерт (критический): всегда ставьте на > 10 позиций по любому ключевому слову — это требует немедленного разбора.

Пример еженедельного отчёта

SKUКатегорияБылоСталоΔСтатус
331320399Ароматизаторы#8#4+4🟢 Рост
445566778Свечи#15#28-13🔴 Падение
223344556Диффузоры#22#20+2🟡 Стабильно
112233445Подарочные наборы#3#5-2🟡 Стабильно
998877665Аромалампы#45#31+14🟢 Рост

Детализация по ключевым словам (SKU 445566778, 🔴 Падение):

Ключевое словоБылоСталоΔСтатус
свеча ароматическая#12#25-13🔴 Падение
свечи для дома#8#19-11🔴 RED ALERT
ароматическая свеча подарок#5#7-2🟡 Стабильно
свеча соевая#18#35-17🔴 RED ALERT
Частые причины резкого падения позиций

Когда позиционный радар фиксирует 🔴 — немедленно проверяйте:

  1. Остатки на складе — если товар заканчивается на ключевых складах, WB понижает его в выдаче
  2. Конкурент запустил акцию — агрессивное промо конкурента смещает остальных вниз
  3. Изменение алгоритма WB — проверьте, падение у одного SKU или у всей категории
  4. Негативные отзывы — всплеск негатива роняет рейтинг → позиции падают
  5. Сезонность — смена сезона перетасовывает приоритеты алгоритма
  6. Изменение цены — резкое повышение цены снижает конверсию → позиции проседают

Правило: если падение затронуло > 3 ключевых слова одновременно — причина, скорее всего, системная (сток/рейтинг), а не конкурентная.


Действие Fotofactor

Операционный процесс

1. Еженедельный алерт в Telegram

Каждый понедельник клиент получает сводку:

📊 Позиционный радар — неделя 07/2026

🟢 Рост: 3 SKU (средний +6 позиций)
🟡 Стабильно: 5 SKU
🔴 Падение: 1 SKU (445566778, свечи: -13 позиций)

⚠️ RED ALERT: SKU 445566778 — падение по 2 ключам > 10 позиций
→ Рекомендация: обновить фото + проверить остатки

2. Немедленная реакция при падении

При обнаружении 🔴 — расследование в течение 24 часов:

  • Проверка остатков через API WB
  • Анализ конкурентов (кто вырос?)
  • Аудит отзывов за последнюю неделю
  • Проверка изменений в категории

3. Проактивное обновление контента

Если позиции снижаются из-за устаревшего контента:

  • Обновление фотографий карточки
  • Переработка описания и характеристик
  • Обновление инфографики с актуальными УТП
  • A/B тест главного фото

4. Ежемесячный отчёт с трендами

Агрегированный отчёт за месяц:

  • Динамика средней позиции по всем SKU
  • Топ-3 улучшения и топ-3 падения
  • Корреляция позиций с продажами
  • Рекомендации на следующий месяц

Создание зависимости

Позиционный мониторинг формирует стратегическую зависимость клиента от Fotofactor:

  • Клиент привыкает получать еженедельные алерты
  • Без мониторинга чувствует себя «слепым»
  • Каждый пойманный вовремя провал = подтверждённая ценность
  • Отмена подписки = риск пропустить критическое падение

Результат для клиента

Прямая ценность

  • Раннее обнаружение падений позиций → реакция за 1–2 дня вместо 2–3 недель
  • Спокойствие: «кто-то следит за моими позициями» — психологический фактор
  • Данные для решений: объективные цифры вместо «кажется, продажи упали»
  • Триггер для допродаж: «Позиции упали, потому что конкурент обновил фото → давайте обновим ваши»

Бизнес-модель для Fotofactor

МетрикаЗначение
Стоимость мониторинга15 000–25 000 ₽/мес
Тип доходаРекуррентный (подписка)
Retention клиентов с мониторингом85%+
Retention без мониторинга~50%
Средний LTV с мониторингом18 месяцев
Конверсия в допуслуги40% (обновление контента при падении)

Цепочка допродаж

flowchart TD
A["📊 Позиционный радар\nфиксирует падение"] --> B{"Причина?"}
B -- "Устаревший контент" --> C["📸 Обновление фото\n+30 000 ₽"]
B -- "Конкурент с акцией" --> D["🏷️ Стратегия промо\n+15 000 ₽"]
B -- "Негативные отзывы" --> E["💬 Работа с отзывами\n+20 000 ₽"]
B -- "Проблемы со стоком" --> F["📦 Консультация\nпо логистике"]
C --> G["📈 Позиции восстановлены\n→ клиент доволен"]
D --> G
E --> G
F --> G
G --> H["🔄 Продление мониторинга\n+ лояльность"]

Мониторинг позиций — это не просто сервис, а точка входа в постоянное сопровождение клиента. Каждое зафиксированное падение — повод для предложения дополнительных услуг, а каждый пойманный вовремя провал — доказательство ценности сотрудничества.