AI Asist
v2
Д
Д

Мой Ozon — прибыль по моделям, 07.05.2026 → 06.06.2026

← Заметки  ·  Раздел: Ozon  ·  Файл: data/notes/ozon/profit_shop2_2026-05-07_06-06.md

Мой Ozon — прибыль по моделям, 07.05.2026 → 06.06.2026

Магазин: Мой Ozon (shop_id=2) Источник истины: Ozon Seller, «Отчёт по начислениям» (6 895 строк). Источник рекламы: Ozon Performance API (ozon_ad_metrics_daily) — атрибуция per offer_id. Скрипт расчёта: scripts/ozon_report_profit.py.

Итог

Метрика Значение
Продаж (шт) 351
Возвратов (шт) 58
Net (шт) 293
Gross retail 1 155 501 ₽
− Комиссия Ozon (46%) 531 530 ₽
− Логистика + услуги (24%) 277 880 ₽
− Реклама (7%) 76 782 ₽
= К выплате нетто 269 219 ₽
− Себестоимость 290 130 ₽
= Прибыль (убыток) −20 911 ₽
Маржа от gross retail −1.8%
ROI −7.2%

«К выплате нетто 269 219 ₽» ≈ Ozon кошелёк (269 607,81 ₽, расхождение 390 ₽ — округление в копейках).

По моделям — с реальным распределением рекламы

Реклама per модель взята из Performance API (ozon_ad_metrics_daily.money), а не разнесена пропорционально. Это даёт точную картину: в Performance API всё атрибутировано к offer_id, в «Отчёте по начислениям» вся реклама без offer_id и раньше распределялась пропорционально gross — это сильно искажало результат по моделям.

Сверка сумм: Performance API 76 782 ₽ vs Отчёт по начислениям 76 873 ₽ → расхождение 0.1%.

Модель Прод Возв Net Gross retail Комиссия Логист+усл Реклама Payout net − Себес Прибыль Маржа ROI
LT8306 80 9 71 287 884 132 427 57 403 3 564 94 468 74 550 +19 918 6.9% 26.7%
HZ020 62 8 54 227 194 104 509 47 042 9 617 66 008 57 240 +8 768 3.9% 15.3%
LT8307 20 3 17 76 227 35 064 22 443 10 487 8 227 17 000 −8 773 −11.5% −51.6%
LTQ001 131 27 104 359 922 165 564 104 057 14 549 75 724 91 520 −15 796 −4.4% −17.3%
HZ030 58 11 47 204 274 93 966 46 935 38 565 24 792 49 820 −25 028 −12.3% −50.2%
ИТОГО 351 58 293 1 155 501 531 530 277 880 76 782 269 219 290 130 −20 911 −1.8% −7.2%

Себестоимости (marketplace='ozon' в БД costs): LT8306-black 1050 ₽, LT8307-black 1000 ₽, LTQ001 880 ₽, HZ020/HZ030 1060 ₽.

Реклама per offer_id (Performance API)

Источник: ozon_ad_metrics_daily, период 07.05-06.06.

offer_id CPC CPO Итого Заказов Выручка
HZ030-Brown-S 12 698 7 167 19 864 8 36 302
HZ030-Blue-S 12 834 0 12 834 10 40 313
LTQ001-Black-S 4 333 7 508 11 841 23 81 056
LT8307-Black-M 10 487 0 10 487 6 27 088
HZ020-Black-M 5 369 945 6 314 5 24 000
HZ030-Brown-M 2 100 3 767 5 867 3 13 962
LT8306-Black-M 3 564 0 3 564 9 39 660
HZ020-Black-S 3 303 0 3 303 2 9 600
LTQ001-White-S 2 708 0 2 708 3 10 719
ИТОГО 57 396 19 387 76 783 69 282 700

CPO/заказ — стоимость одного заказа с рекламы:

Модель CPO/заказ
LT8306 396 ₽
LTQ001 560 ₽
HZ020 1 374 ₽
LT8307 1 748 ₽
HZ030 1 836 ₽

Главные находки

1. Магазин в убытке −21к за 30 дней.

Из 5 моделей только две прибыльные: LT8306 (+20к) и HZ020 (+9к).

2. HZ030 — главный сжигатель денег.

  • Рекламы 38 565 ₽ — 50% всего бюджета магазина (при доле 18% в обороте)
  • Принесла 21 заказ → CPO 1 836 ₽/заказ
  • При retail ~3 500 ₽ и payout ~1 200 ₽ прибыль до рекламы ~140 ₽/шт
  • На каждый заказ от рекламы тратим в 13 раз больше чем зарабатываем
  • ROI модели −50%

Действия: - Срочно отключить или сильно урезать (-90%) расходы на рекламу HZ030 - Если без рекламы продажи упадут — это значит модель и так не самодостаточна, надо думать о её судьбе в линейке

3. LT8306 — звезда.

  • ROI +27% (best in shop)
  • CPO 396 ₽/заказ — в 4-5 раз эффективнее остальных
  • Реклама минимальная (3.6к), эффективная
  • Действия: масштабировать рекламный бюджет (увеличить х2-х3 если ROI сохранится)

4. HZ020 — стабильно прибыльная.

  • ROI 15%, CPO 1 374 ₽ (приемлемо)
  • Можно немного увеличить рекламу

5. LTQ001 — большой объём, маленькая маржа.

  • 131 продажа (37% магазина), но прибыль −16к при ROI −17%
  • При retail 2 747 ₽/шт payout 729 ₽/шт, себес 880 ₽ → −151 ₽/шт убытка
  • Реклама умеренная (14.5к, CPO 560 ₽), на ней почти не теряем
  • Корень — низкая цена. Либо поднимать retail, либо снижать себестоимость

6. LT8307 — критический убыток.

  • 20 продаж, −9к, ROI −52%
  • CPO 1 748 ₽ при малом объёме
  • Либо рекламу выключить, либо переосмысливать всю модель

Структура расходов (% от gross retail)

Статья %
Gross retail 1 155 501 100%
Комиссия Ozon 531 530 46.0%
Логистика + услуги 277 880 24.0%
Реклама 76 782 6.6%
Себестоимость 290 130 25.1%
Прибыль (убыток) −20 911 −1.8%

Ozon-комиссия 46% — структурный потолок, не меняется.

Как читать «Отчёт по начислениям»

Механика цены на Ozon:

  1. Продавец ставит retail цену, например 4500 ₽.
  2. Ozon применяет свою скидку и продаёт покупателю за 2300 ₽.
  3. В отчёте строки по этому posting: - Выручка = 2300 (что заплатил покупатель) - Программы партнёров = небольшая компенсация - Баллы за скидки = остаток до retail (~2200) - Сумма всех трёх = 4500 ₽ = retail
  4. Ozon берёт комиссию ~46% от retail (от 4500, не от 2300).
  5. Плюс логистика, эквайринг, упаковка, реклама, услуги FBO — отрицательные строки.
  6. «К выплате» = Сумма итого по всем строкам отчёта.

gross_retail = Выручка + Программы партнёров + Баллы за скидки (с учётом возвратов).

План действий (приоритет)

  1. HZ030 — отключить/урезать рекламу (-90% бюджета). Ожидаемый эффект: +25к/месяц.
  2. LT8307 — отключить рекламу, переосмыслить позиционирование. +9к/месяц.
  3. LT8306 — увеличить рекламный бюджет х2 (до 7-8к). Если ROI сохранится — это +20к/месяц дополнительно.
  4. LTQ001 — поднять retail на 15-20% на одной партии (тест), сравнить выручку за 2 недели.
  5. HZ020 — не трогать, оставить как стабильный +9к/месяц.

Потенциал: с −21к выйти в +40-50к/месяц только за счёт перераспределения рекламы.

Воспроизведение

# 1. Положить файл из Ozon Seller (Финансы → Отчёт по начислениям) в data/ozon_stats/
# 2. На проде освежить Performance-данные:
ssh wbbot 'cd /root/mp-system && .venv/bin/python -c "
from app.ozon.ingest import ingest_ad_stats
ingest_ad_stats(\"2026-05-07\", \"2026-06-06\", shop_id=2, max_wait_sec=900)
"'
# 3. Обновить AD_SPEND_PER_OFFER в scripts/ozon_report_profit.py из:
ssh wbbot 'cd /root/mp-system && .venv/bin/python /tmp/ozon_ads.py'  # см. scripts/ozon_ads_per_offer.py

# 4. Запустить:
python scripts/ozon_report_profit.py

Что я делал не так раньше

Источник ошибки Эффект
Статусы delivering, awaiting_* как продажи +Раздул qty в 1.7×
posting_items.payout без «Баллов за скидки» Сильно занижал выручку
finance_operations по operation_date ≠ окна заказов Сдвигало ~30к
Реклама дважды (ad_metrics + finance_ops) +95к раздувания
Реклама без offer_id (77к) распределялась пропорц. gross Ошибочно нагрузила LT8306, LTQ001; недогрузила HZ030

Правильный подход: «Отчёт по начислениям» как источник истины + Performance API для атрибуции рекламы per offer_id.

Фильтры