Как считать юнит-экономику Ozon в 2026: полная формула с примерами
«Продал на 500К — на счёт пришло 280К. Где деньги, Лебовски?» Знакомая ситуация для большинства селлеров. Разбираемся по копейкам — все удержания, налоги, эквайринг, межкластерная доставка. С готовым Python-кодом для автоматизации.
Главное правило: смотри transaction list, а не named поля API
Если ты делаешь юнит-экономику по полям типа delivery_charge или commission_amount из карточки заказа — ты считаешь плановые удержания, а не реальные. Между ними часто разница в 1.5–2 раза.
Реальные деньги можно увидеть только через POST /v3/finance/transaction/list — там лежат все операции по конкретной отгрузке: продажа, возврат, корректировка, эквайринг, межкластерная доставка, штрафы, премиум-кешбэк, программа лояльности.
Если клиент спрашивает «почему такая маржа» — это команда лезть в transaction list. Никакие сводные отчёты Ozon не покажут реальную картину.
Из чего состоит юнит на самом деле
Считаем для одной продажи. Возьмём пример: продал кофемашину Philips за 21 990 ₽.
| Статья | Сумма |
|---|---|
| Цена продажи (выручка) | +21 990 |
| Комиссия Ozon (10% для электроники) | −2 199 |
| Логистика FBO | −380 |
| Эквайринг (~1.5%) | −330 |
| Премиум-кешбэк за тебя | −440 |
| Программа лояльности | −110 |
| Реклама на единицу (ДРР 12%) | −2 640 |
| Закупка с поставщика | −12 000 |
| Упаковка + брак (3% от закупки) | −360 |
| Налог УСН 15% (доходы−расходы) | −530 |
| Чистая прибыль на единицу | 3 001 ₽ |
Маржа после всего — 13.6%. Не 47% (как казалось до Ozon-удержаний) и не 28% (если считать только заявленную комиссию).
Между «у меня маржа 47%» и «у меня маржа 13.6%» — пропасть в три раза. И именно поэтому магазины «продают много, а денег нет».
Как достать реальные данные через Ozon API
Простой Python-скрипт, который получает все транзакции за период и группирует по типу операции:
import requests, os
from collections import defaultdict
headers = {
"Client-Id": os.environ["OZON_CLIENT_ID"],
"Api-Key": os.environ["OZON_API_KEY"],
"Content-Type": "application/json"
}
url = "https://api-seller.ozon.ru/v3/finance/transaction/list"
payload = {
"filter": {
"date": {"from": "2026-04-01T00:00:00Z", "to": "2026-04-30T23:59:59Z"},
"operation_type": [],
"transaction_type": "all"
},
"page": 1,
"page_size": 1000
}
r = requests.post(url, json=payload, headers=headers).json()
totals = defaultdict(float)
for tx in r["result"]["operations"]:
totals[tx["operation_type"]] += float(tx["amount"])
for op_type, amount in sorted(totals.items(), key=lambda x: x[1]):
print(f"{op_type:55} {amount:>12,.2f} ₽")
На выходе — табличка со всеми типами операций и суммами. Сложить плюсы, вычесть минусы — получишь реальный итог за месяц.
Ключевые operation_type, на которые смотреть
| Операция | Что означает |
|---|---|
OperationProductSale | Чистая выручка от продажи |
OperationAgentDeliveredToCustomer | Доставка покупателю |
OperationItemReturn | Возврат на склад |
OperationMarketplaceMarketingActionCostOperation | Реклама и акции |
OperationMarketplaceServicePremiumCashbackIndividualPoints | Премиум-кешбэк за тебя |
OperationMarketplaceServiceStockLogistics | Логистика FBO |
MarketplaceRedistributionOfAcquiringOperation | Эквайринг |
Три типичные ловушки
1. «Я продал на 100К, а на счёт пришло 60К»
Это нормально, Ozon удерживает свои комиссии до выплаты. Реальная маржа считается как чистая прибыль / выручка, а не чистая прибыль / приход на счёт. Это ключевая ошибка новичков.
2. «Заявленная комиссия 23%, а фактическая 28%»
Разница уходит в:
- Эквайринг (~1.5%)
- Премиум-кешбэк за тебя (~2%)
- Программу лояльности (~0.5%)
- Мелкие корректировки и округления
Никогда не считай по named полям API. Всегда копай в transaction list.
3. «Юнит положительный, а магазин в минусе»
Скорее всего:
- Не учтена реклама — она распределяется по всем продажам, не только по тем, что пришли с рекламы
- Не учтены штрафы за брак / просрочку (можно найти как отдельные operation_type)
- Возвраты приходят с лагом 30–60 дней и появляются в transaction list только в момент возврата, не сразу
Что делать дальше
Если ты дочитал до этого места — у тебя есть выбор: писать этот скрипт самому, заводить процесс ежемесячного отчёта, тратить на это полдня в начале каждого месяца. Или поставить себе AI-команду, где finance-агент делает это за тебя автоматически и присылает разбор в Telegram.
Расчёт юнита по реальным транзакциям — один из 16 встроенных навыков нашей команды. Те же самые формулы, та же логика, только без ручной работы.