Я задолбался гадать на глаз, что везти на склад Ozon. Привёз партию - а спрос оказался там, где у тебя пусто: в Москве размели за неделю, в Екатеринбурге тот же товар встал и копит плату за хранение. Минус с двух сторон: где-то упустил продажи, где-то заморозил деньги. Поэтому я собрал бесплатный инструмент «Торговод · Отгрузки FBO» - он берёт ваши реальные данные из кабинета и говорит, какой товар везти, сколько штук и в какой регион.
Ниже - полный разбор: что инструмент считает, КАК именно считает (формулы разберу по косточкам), как его поставить и что в нём честно недоделано.
Разборы, кейсы и готовые сборки AI-помощников для селлеров веду в Telegram-канале «Вайб Селлер Клуб». Другие материалы - в разделе Статьи.
Что такое «Торговод · Отгрузки FBO» и какую боль на FBO он снимает?
Схема FBO означает, что ваш товар лежит на складах Ozon и оттуда едет покупателю. Удобно: не надо собирать заказы руками. Неудобно другое - вы должны заранее угадать, сколько товара положить и в каком регионе, иначе платформа продаст его за вас там, где его нет.
И вот тут начинается самое обидное. Кончился товар в регионе - карточка проседает в выдаче, а потом её надо разгонять заново, уже за деньги. То есть один пропущенный завоз бьёт дважды: сначала по выручке, потом по позициям.
«Торговод · Отгрузки FBO» решает ровно эту задачу. Он ходит в официальный API Ozon (интерфейс, через который кабинет отдаёт ваши же данные программам) вашими ключами, тянет каталог, остатки и заказы за последний месяц, и раскладывает всё по трём экранам: «Что грузить», «Кластеры» и «Слот-хантер». Инструмент бесплатный, код открытый, лежит на GitHub.
Почему остатки на FBO ломаются именно по регионам?
Ozon раскидывает товар по кластерам - это группы складов, привязанные к регионам. Покупатель из Перми видит в первую очередь то, что лежит рядом с ним. Если рядом пусто, товар либо приедет дольше, либо не покажется вообще.
Отсюда главная ловушка. Вы смотрите в кабинет, видите «остаток 300 штук, хватит на 40 дней» и спите спокойно. А внутри этих 300 штук - 280 лежат в Москве, а в трёх других кластерах уже голяк, и там ваши продажи умерли неделю назад.
Поэтому инструмент считает две вещи параллельно: общую картину по товару (чтобы вы вообще увидели проблемные позиции) и раскладку по кластерам (чтобы понять, куда конкретно везти). Одно без другого не работает.
Экран «Что грузить»: какие статусы бывают и что они значат?

Таблица показывает все товары сразу: остаток на FBO, спрос в день, дней до нуля, букву ABC и готовую рекомендацию «сколько везти». Статус - это просто светофор поверх этих цифр.
| Статус | Когда ставится | Что делать |
|---|---|---|
| ДЕФИЦИТ | Запаса меньше 7 дней | Везти прямо сейчас, тут уже горит |
| РИСК | Запаса меньше 14 дней ИЛИ формула советует довезти хоть штуку | Посмотреть внимательно, скорее всего есть что довезти |
| ИЗБЫТОК | Запаса больше 90 дней и везти нечего | Не везти, думать про распродажу и вывоз |
| НОРМА | Всё остальное | Ничего не делать |
Тут есть неочевидность, на которой спотыкаются все, включая меня. РИСК срабатывает не только по дням запаса, но и в тот момент, когда формула посчитала рекомендацию больше нуля. Из-за этого РИСКов в таблице обычно много, и это нормально.
Читайте статус РИСК не как «завтра кончится», а как «есть что довезти». Товар может лежать с запасом на два месяца по стране, но в одном кластере просесть - и формула честно скажет: довези туда штук двадцать. Товар получит РИСК, хотя пожара нет.
Как считаются спрос в день и «дней до нуля»?
Спрос в день берётся из заказов за последний месяц. Заказано 90 штук за 30 дней - значит спрос 3 штуки в день. Никакой магии.
Оговорка первая, и я о ней говорю честно: считаются именно ЗАКАЗЫ, а не выкупы. Отмены и возвраты из этой цифры не вычитаются. Если у вас категория с большим процентом отказов, реальный спрос будет ниже расчётного, и это надо держать в голове.
Оговорка вторая - про «дней до нуля». Это фактический остаток на FBO, делённый на спрос в день. Товар, который уже едет на склад, в этой цифре не участвует - только то, что физически лежит. И самое главное: число общее по стране. В среднем может быть 30 дней, а в конкретном кластере - ноль. Увидеть это можно только в карточке товара, в раскладке по регионам.
По какой формуле инструмент решает, сколько везти?
Основа расчёта выглядит так:
рекомендация = спрос_в_день x целевые_дни - остаток_в_кластере - товар_в_путиЦелевые дни - это то, на сколько дней вперёд мы хотим закрыть регион. Они зависят от буквы ABC:
| Класс товара | Целевые дни покрытия | Логика |
|---|---|---|
| A (ходовой) | 90 дней | Кормилец, дефицита допускать нельзя |
| B (средний) | 60 дней | Держим ровно, без запаса на всякий случай |
| C (хвост) | 60 дней | Деньги в нём морозить смысла нет |
Дальше цифра поправляется на грейд оборачиваемости, который Ozon сам показывает по товару. Красный грейд означает, что товар оборачивается плохо и площадка на него косо смотрит, поэтому запас закладывается больше.
| Грейд оборачиваемости | Множитель | Пример для товара A |
|---|---|---|
| Красный | ×1,3 | 90 дней × 1,3 = 117 дней |
| Жёлтый | ×1,15 | 90 дней × 1,15 = 103 дня |
| Зелёный | ×1,0 | 90 дней |
Чтобы формула не сошла с ума, сверху навешены два потолка. Первый: рекомендация не может превысить 120 дней запаса. Второй: не больше пятикратных продаж за 28 дней. И отдельное правило - если за 30 дней товар не продался ни разу, рекомендация равна нулю. Мёртвый товар инструмент возить не предлагает.
Как работает поправка на тренд и почему она включается не всегда?
Механика простая. Инструмент сравнивает продажи за последние 10 дней со средним за 30 дней. Если свежие продажи выше, он пересчитывает спрос как смесь: 60 процентов веса берётся из последних 10 дней и 40 процентов из среднего за месяц. Товар разгоняется - заявка растёт вместе с ним.
Но у этой логики есть предохранитель, и он важнее самой логики. Тренд включается, только если за 30 дней продано не меньше 10 штук.
Объясню, зачем. Представьте товар, который продаётся по две штуки в месяц. Оба заказа случайно пришли на прошлой неделе. Формально «последние 10 дней в 15 раз лучше среднего» - и без предохранителя инструмент попросил бы вас везти на склад сотню штук мёртвого товара. На малых числах любой случайный всплеск выглядит как ракета. Поэтому на них тренд намеренно игнорируется, и работает голое среднее за месяц.
Такой инструмент - не магия и не чужой сервис по подписке. Это ваш собственный расчёт, который вы можете открыть и поправить. Как собирать подобные вещи под свой магазин, разбираю в «Вайб Селлер Клубе», а базовый разбор агента-помощника лежит в статье Claude Code для селлера.
Что такое ABC и зачем инструмент считает её дважды?
ABC-классификация - это способ отделить кормильцев от балласта. Товары выстраиваются по убыванию, дальше считается накопленная доля: всё, что попало в первые 80 процентов, получает букву A, следующие 15 процентов - B, остаток - C.
Хитрость в том, что «важность» товара можно мерить по-разному. Дорогая позиция может давать много денег при единичных продажах. Дешёвая - наоборот, уходить сотнями штук и держать оборот. Одна метрика всегда кого-то обижает.
Поэтому инструмент считает ABC дважды: один раз по выручке за 30 дней, второй раз по количеству проданных штук. В расчёт целевых дней идёт лучшая из двух букв. Товар, который вышел в A по выручке и в C по штукам, всё равно получит приоритет как A - и целевые 90 дней покрытия вместе с ним.
Это осознанный перекос в сторону «лучше перестраховаться на ходовом». Если вас такой подход не устраивает, логику видно в коде и её можно переписать под себя за пять минут.
Кластеры: как понять, в какой регион везти?

Карту «склад - кластер» инструмент забирает из самого Ozon, так что придумывать ничего не надо. Спрос по регионам берётся из заказов FBO: у каждого отправления есть кластер назначения, по нему и раскидывается статистика. Если часть товара уходит через FBS, этот спрос тоже учитывается - он разносится по кластерам пропорционально остатку, иначе продавец с большой долей FBS получал бы нулевые рекомендации.
Дальше начинается практика. Не во все кластеры вам реально удобно возить: где-то далеко, где-то дорого, где-то у вас нет нормальной логистики. Для этого есть тумблер - выключаете кластер, и его рекомендация не пропадает, а переезжает в резервный соседний. Важно понимать механику: рекомендация уходит целиком в ОДИН кластер, а не размазывается по нескольким. Отключили Екатеринбург - все его штуки поедут в Пермь. Если и Пермь отключена, они уйдут в Тюмень, затем в Уфу. Резервный кластер можно задать и вручную в настройках.
Смысл в том, чтобы спрос региона не потерялся. Покупатель из Екатеринбурга всё равно закажет - просто товар приедет к нему с соседнего склада, и это лучше, чем не приедет вообще.
Слот-хантер: как поймать слот приёмки и чем это опасно?
Слот-хантер не создаёт заявку на поставку. Заявку вы делаете руками в кабинете Ozon, как обычно. Инструмент подхватывает уже существующую и охотится на свободное время приёмки.
Настройка занимает минуту:
- Выберите заявку, для которой ищем слот.
- Задайте окно: даты и диапазон времени, которые вам подходят.
- Задайте интервал опроса - как часто дёргать Ozon. Минимум 30 секунд, по умолчанию минута.
- Если хотите получать сообщение в Telegram, когда слот пойман, - пропишите
TELEGRAM_BOT_TOKENиTELEGRAM_CHAT_IDв файле.env. В самой форме заявки поля для этого нет.
Дальше инструмент работает сам. Нашёл подходящий слот - он его РЕАЛЬНО бронирует, а не просто присылает уведомление «смотри, освободилось».
Внимание. Слот-хантер перезаписывает текущий слот выбранной заявки. Если у неё уже был нормальный слот, он будет заменён на первый подходящий из найденных. Берётся именно ПЕРВЫЙ попавший в ваше окно, а не самый удобный. Поэтому окно задавайте узко и осознанно: не «вся следующая неделя», а конкретные дни и часы, на которые вы точно готовы отгрузить.
Какой ключ Ozon нужен: только на чтение или на запись?
Ключи создаются в кабинете продавца: Настройки - Seller API - создать ключ. Инструмент попросит их при первом запуске и положит в файл на вашем компьютере.
И вот тут важный нюанс, который стоит проговорить прямо. Ключа с ролью «только чтение» достаточно для аналитики: экраны «Что грузить» и «Кластеры» с ним работают полностью, все расчёты идут как надо. Это самый безопасный вариант - программа физически не может ничего изменить в вашем кабинете.
Но слот-хантер бронирует слот, а бронирование - это изменение заявки, то есть операция записи. С ключом «только чтение» он честно найдёт свободный слот и не сможет его занять: покажет ошибку доступа.
Вывод простой. Нужна только аналитика - берите ключ на чтение и спите спокойно. Нужна автобронь слота - придётся выдать ключ с правом записи и понимать, что программа может менять заявки на поставку.
Как поставить инструмент: три пути
Требования одинаковые для всех трёх путей: компьютер на Windows, Mac или Linux и Python версии 3.11 или новее. На Python 3.10 инструмент не запустится. Сам он работает локально на порту 4000, данные хранит в файле базы рядом с собой.
Путь 1. Через ИИ-агента (Claude Code, Cursor, Codex). Самый простой, если вы не хотите разбираться в командах.
- Откройте страницу проекта на GitHub, нажмите зелёную кнопку Code и выберите Download ZIP.
- Распакуйте архив в короткую папку латиницей, например C:\torgovod-fbo.
- Откройте эту папку в своём ИИ-агенте и дайте команду развернуть проект.
- В Claude Code для этого есть готовая команда
/setup- агент сам поставит зависимости, создаст файл настроек, проведёт вас по вводу ключей Ozon и запустит приложение. - Откройте в браузере адрес http://localhost:4000.
Путь 2. Вручную, если Python уже стоит.
- Скачайте и распакуйте проект так же, как в первом пути.
- На Windows дважды кликните по файлу
start.bat. - На Mac или Linux выполните в папке проекта команду
bash start.sh. - Скрипт сам создаст окружение, поставит зависимости и откроет http://localhost:4000.
- При первом входе введите ключи Ozon на странице настроек.
Путь 3. Демо без ключей, чтобы просто посмотреть.
- Распакуйте проект.
- Выполните команду
python seed_demo.py. - Инструмент наполнится 12 выдуманными товарами - можно покликать по всем экранам и понять, как всё устроено, ничего не подключая.
Совет. На Windows после первого запуска на рабочем столе появляется ярлык «Торговод FBO». Дальше запуск в один клик, лезть в командную строку больше не нужно.
Какие грабли ждут при первом запуске?
- Старый Python. Версия ниже 3.11 упадёт с невнятной ошибкой, по которой ничего не понять. Проверьте версию первым делом - это экономит полчаса нервов.
- Занятый порт 4000. Лаунчер молча прибьёт процесс, который висит на этом порту. Если там крутится другой ваш проект, он просто остановится, и вы не сразу поймёте почему.
- Антивирус или политика Windows. Файл
start.batзапускает PowerShell, и это иногда блокируется. Если ничего не происходит - причина обычно здесь. - Кириллица и пробелы в пути. Классика жанра. Папка вида «C:\Мои документы\Торговод» - готовый источник загадочных ошибок. Распаковывайте в короткий путь латиницей.
- Оборванная установка. Зависимости ставятся один раз, факт установки помечается служебным файлом. Если процесс сорвался на полпути, удалите папку
.venvи запустите заново. - Фальшивые ключи после демо. Если вы гоняли демо-режим, в настройках остались выдуманные ключи. Введите настоящие на странице настроек - демо-данные сотрутся сами.
- Долгий первый обмен данными. Между запросами к Ozon инструмент выдерживает паузу в 2 секунды, чтобы не превысить лимиты платформы. Каталог и 35 дней заказов выкачиваются по страницам, поэтому на большом ассортименте первая синхронизация идёт десятки минут. Это нормально и не является поломкой - просто оставьте её работать и займитесь делами.
Чего в инструменте нет и что можно допилить
Мне важно сказать это прямо, а не прятать за красивой обёрткой. У инструмента есть границы, и вот они:
- Только Ozon FBO. Wildberries и Яндекс Маркет не поддерживаются вообще.
- Нет сезонности. Прогноз - это среднее за 30 дней плюс свежий тренд. Ни сравнения год к году, ни новогодних пиков инструмент не знает.
- Нет учёта акций и рекламы. Если вы запланировали всплеск спроса под акцию, формула о нём не догадается.
- Время поставки не заходит в формулу. Поле в интерфейсе есть, по умолчанию 8 дней, но в расчёт оно пока не попадает - роль страхового запаса играют целевые 60 и 90 дней. Самая очевидная доработка из всех.
- Наценка за нелокальный кластер только показывается. Проценты видны, но в решение «везти или не везти в дальний регион» они не заходят.
- Нет лимитов приёмки склада, кратности коробов, габаритов и веса.
- Рекомендация не спрашивает про деньги. Она посчитает, сколько везти, не поинтересовавшись, есть ли у вас бюджет на закуп.
- Спрос считается по заказам, а не по выкупам. Про это я писал выше.
- Статус РИСК стоило бы разделить надвое - на «скоро кончится» и «есть что довезти». Пока это один статус, и он размытый.
Теперь главное. Это не список недостатков - это список задач. Код открыт, лежит рядом с вами, и любой пункт из этого списка можно отдать ИИ-агенту как задание: «добавь в формулу время поставки», «раздели статус РИСК на два». Ровно в этом и состоит вайб-кодинг: вы получаете инструмент под свой бизнес, а не чужую подписку с чужими правилами.
Я специально не стал доводить инструмент до «идеала». Идеал у каждого свой: один торгует сезонкой, другой живёт на акциях, третьему нужны короба и габариты. Полный разбор большого «Торговода» есть в отдельной статье про сборку своего инструмента аналитики, а про то, как считать деньги по каждой позиции, - в разборе юнит-экономики товара.
Безопасно ли это и куда уходят мои ключи?
Разберу по пунктам, потому что вопрос правильный и задавать его надо всегда, когда вам предлагают подключить ключи от кабинета.
- Программа запускается у вас на компьютере, а не на чужом сервере. Никакой регистрации и никакой подписки.
- Ключи хранятся в отдельном файле настроек на вашем диске и в репозиторий не попадают.
- Обращения идут только к официальному Ozon Seller API, вашими же ключами, с соблюдением лимитов запросов.
- Код открыт целиком. Вы можете прочитать его сами или попросить ИИ-агента объяснить простыми словами, что делает каждый файл.
- Инструмент не связан с Ozon, не одобрен им и не аффилирован с ним. Это независимая разработка, и решения на основе его цифр вы принимаете сами.
Если хотите вынести инструмент с личного компьютера, чтобы он работал круглосуточно, - это отдельная история, я разбирал её в статье про запуск Торговода на сервере.
