Коротко. API Wildberries для Python: получаете токен в личном кабинете, дергаете нужный домен через библиотеку requests и складываете сырые данные в свою базу. Так собирается wildberries api аналитика без сторонних сервисов: продажи, заказы, остатки, воронка карточек и финансовый отчет. Ниже: рабочие эндпоинты, лимиты, готовый код и список граблей.
Личный кабинет Wildberries показывает срез на сегодня. Историю он хранит плохо, а данные по товарам разбросаны по разным вкладкам. Аналитика продавца рушится об это уже на второй месяц.
Свой сбор через API решает три задачи. Первая: единое хранилище, где заказы, продажи и остатки лежат за все время. Вторая: свои метрики, которых нет в кабинете: маржа по SKU, оборачиваемость, ДРР по каждой карточке. Третья: автоматизация цен и остатков без ручного труда.
Готовые сервисы аналитики тоже работают через этот же API. Разница в том, что при своей интеграции данные ваши, логика ваша, и платить за подписку не нужно. Минус: писать и поддерживать код придется самому.
API поделен на категории. Каждая отвечает за свой кусок бизнеса и живет на отдельном домене. Токен вы выпускаете под конкретные категории, а не один на все.
Для аналитики важны три домена. Статистика отдает сырые продажи, заказы, остатки и финансовый отчет. Аналитика дает воронку продаж по карточкам, отчеты по складам и регионам, платное хранение. Цены и скидки позволяют читать и менять ценники массово.
| Категория | Домен | Что дает для аналитики |
|---|---|---|
| Статистика | statistics-api.wildberries.ru | Продажи, заказы, остатки, поставки, финансовый отчет по периодам |
| Аналитика | seller-analytics-api.wildberries.ru | Воронка продаж по карточкам, склады, регионы, платное хранение |
| Цены и скидки | discounts-prices-api.wildberries.ru | Чтение и массовое изменение цен и скидок |
| Контент | content-api.wildberries.ru | Карточки товаров, характеристики, медиа |
| Маркетплейс | marketplace-api.wildberries.ru | Заказы FBS, сборочные задания, статусы |
| Продвижение | advert-api.wildberries.ru | Рекламные кампании, ставки, статистика РК для расчета ДРР |
Домены могут дополняться: WB регулярно выкатывает новые методы. Актуальный список категорий всегда в официальной документации на dev.wildberries.ru. Но для 90% аналитических задач хватает трех первых строк таблицы.
Токен: это ваш пропуск. Без него любой запрос вернет 401. Выпускается он за минуту в кабинете продавца.
Уровень доступа: ключевой момент безопасности. Если задача только собирать аналитику, ставьте «только чтение». Тогда даже утекший токен не даст никому переписать ваши цены или карточки. Токен с правом записи выпускайте отдельно и только под конкретную задачу автоматизации.
Токен идет в заголовок Authorization. Хранить его в коде нельзя. Держите в переменной окружения или в отдельном файле, который не попадает в git.
Вся связка wildberries python api строится на библиотеке requests. Ничего экзотического не нужно. Ставим одну зависимость и делаем GET-запрос с токеном в заголовке.
Базовый пример забирает продажи с указанной даты. Параметр dateFrom обязателен. Параметр flag управляет режимом выгрузки: об этом ниже, в разделе про ошибки.
Каркас скрипта выглядит так. Токен из окружения, домен статистики, обработка кода ответа. На этом каркасе строится дальше все остальное.
Ответ приходит в JSON. Каждая строка: один факт продажи или заказа с полями по цене, скидке, складу, региону и артикулу. Дальше это удобно грузить в pandas и считать что угодно.
Домен seller-analytics-api дает то, чего нет в сырой статистике: воронку по каждой карточке. Метод /api/v2/nm-report/detail возвращает по товару показы, клики, добавления в корзину, заказы и выкупы за период.
Это сердце аналитики. По воронке видно, где теряются деньги. Мало показов: проблема в SEO карточки и рекламе. Много показов, мало кликов: слабое главное фото. Клики есть, корзины нет: цена или отзывы. Каждый этап: точка роста.
Метод работает через POST. В теле передаете период, фильтры по nmID, брендам или тегам и параметр limit. Максимум по limit подняли до 1000 строк на запрос, так что большой ассортимент выгружается пачками с пагинацией.
API строго ограничивает частоту. Превысите: получите код 429 и временную блокировку. Лимиты у методов разные, и это первое, обо что спотыкаются новички в wildberries python api.
Тяжелые методы статистики отдают огромные выгрузки, поэтому их можно звать редко. Легкие методы допускают больше вызовов в минуту. Точные цифры WB меняет и публикует в документации каждого метода. Ориентируйтесь на документацию, а не на догадки.
| Прием | Зачем |
|---|---|
| Пауза между запросами | Ставьте задержку в коде, чтобы не упираться в лимит частоты |
| Ретрай на 429 | При коде 429 ждете и повторяете, а не падаете с ошибкой |
| Инкрементальная выгрузка | Тянете только новое по lastChangeDate, а не всю историю каждый раз |
| Кеш ответов | Не запрашиваете повторно то, что уже лежит в базе |
| Запуск по расписанию | Тяжелую статистику собираете ночью раз в день, а не в цикле |
Инкрементальный сбор: главный прием. Метод продаж по полю lastChangeDate отдает только изменения с нужной даты. Берете значение lastChangeDate из последней строки прошлой выгрузки и передаете его как dateFrom в следующей. Так вы не гоняете гигабайты каждый запуск.
Одни и те же грабли повторяются у всех, кто собирает аналитику сам. Разберем их, чтобы вы не потеряли неделю на отладку.
В методах продаж и заказов параметр flag меняет всю логику. При flag=0 или без него API отдает все строки, где lastChangeDate больше или равно dateFrom: это режим для инкрементального сбора. При flag=1 API отдает записи ровно за одну дату dateFrom. Перепутаете: получите не те данные и неверные отчеты.
Одиночный ответ статистики ограничен по числу строк. Если данных больше лимита, вы получите только первую пачку и решите, что остальное пропало. На деле нужно повторять запрос, подставляя lastChangeDate из последней полученной строки, пока данные не кончатся.
Даты в API завязаны на часовой пояс. Передадите московское время как есть: сместите период на три часа и недосчитаетесь заказов на стыке суток. Работайте с датами аккуратно и сверяйте пояс.
Соблазн выпустить один всемогущий токен с правом записи велик. Так делать нельзя. Утечка такого токена: чужой доступ к вашим ценам, остаткам и карточкам. Дробите токены по задачам и правам.
Код тянет json сразу, без проверки статуса. Прилетает 429 или 401, тело не JSON, скрипт падает с непонятной ошибкой. Всегда проверяйте status_code до разбора тела и логируйте, что именно вернул сервер.
Писать все с нуля не обязательно. Под Python есть готовые обертки, которые скрывают домены и заголовки за удобными методами. Но и у своего кода есть плюсы.
Разумный путь: тонкий свой слой поверх requests с ретраями и кешем плюс pandas для расчетов. Тяжелые зависимости подключаете, только когда они реально экономят время.
Пройдете этот список: у вас будет своя система аналитики, которая работает без подписок и показывает то, чего нет в кабинете. Дальше: только наращивать метрики под свои задачи.
Базовый сбор реально поднять самому на Python и requests за пару вечеров: логика простая, GET-запрос с токеном в заголовке. Но для стабильной системы с ретраями, хранилищем и расчетом метрик по всему ассортименту лучше привлечь разработчика. Иначе поддержка и рост числа методов быстро съедят время.
Да, у токена есть срок жизни, после которого он перестает работать и запросы возвращают ошибку авторизации. Поэтому важно предусмотреть в системе обработку кода 401 и оповещение, чтобы вовремя перевыпустить ключ в кабинете. Держите про запас процедуру быстрой замены токена без остановки сбора данных.
Готовые сервисы дергают тот же самый API Wildberries, но показывают уже посчитанные отчеты за подписку. Свой сбор дает полный контроль: данные ваши, метрики любые, платить не нужно. Цена этого: время на разработку и поддержку кода. Выбор зависит от масштаба и наличия рук в команде.
Да, категория «Цены и скидки» на домене discounts-prices-api позволяет массово менять ценники, а маркетплейс-методы управляют заказами. Для этого нужен токен с правом записи. Такой токен выпускайте отдельно от аналитического и берегите: с ним можно переписать данные вашего магазина.
Аналитические методы считают данные не в реальном времени, поэтому цифры по воронке могут отставать на десятки минут. Это нормально для агрегированной статистики: WB собирает и пересчитывает показатели пачками. Для оперативных решений опирайтесь на сырые заказы из статистики, а воронку смотрите как срез за прошедший период.