Данные Wildberries через API в ClickHouse, Postgres и MySQL на Python

Данные Wildberries через API в ClickHouse, Postgres и MySQL на Python

Продавцы на Wildberries работают с горой данных: заказы, продажи, остатки на складах, финансовые отчёты, реклама. В личном кабинете всё разбросано, а для нормальной аналитики хочется собрать данные в одном месте и строить свои отчёты. Забрать их к себе в базу помогает API.

В этой статье покажу как выгружать данные из Wildberries через API на Python и складывать их в базу данных: ClickHouse, PostgreSQL или MySQL. Использовать будем бесплатную библиотеку morin, а начнём с простой демонстрации, которую можно запустить локально без сервера и без Docker. Статья продолжает серию про коннекторы, принцип у всех один.

Зачем выгружать данные из Wildberries

Личный кабинет WB хорош для оперативной работы, но не для аналитики:

  • История ограничена, а хочется хранить данные за все периоды.
  • Свести продажи, рекламу и остатки в одном отчёте внутри кабинета нельзя.
  • Построить свои метрики (маржа, ДРР, оборачиваемость) неудобно.
  • Автоматизировать ежедневную выгрузку под дашборд руками невозможно.

Решение одно: забрать данные из Wildberries через API в свою базу данных и работать уже там. В базе лежит вся история, к ней подключается любой BI-инструмент, а обновление идёт автоматически.

Что такое API Wildberries

API Wildberries - это интерфейс, через который программа получает данные магазина напрямую, без захода в кабинет. Через wb api можно вытянуть заказы, продажи, остатки, финансовый отчёт о реализации, карточки товаров и статистику рекламы.

Работает wildberries api так: вы отправляете HTTP-запрос с токеном, а в ответ получаете данные в JSON. Библиотека morin прячет постраничную выгрузку и разбор ответов внутри, отдавая готовые строки для базы данных.

Получаем доступ к API: токен

Для работы с API Wildberries нужен один параметр - токен. Он берётся в личном кабинете продавца Wildberries, в разделе доступа к API. 

При создании токена выбираются категории (Статистика, Аналитика, Продвижение и другие) - для выгрузки данных нужна категория статистики, для рекламы отдельно категория продвижения.

Токен даёт доступ к данным магазина, поэтому храните его в секрете. Если токен утёк, отзовите его в кабинете и создайте новый.

Устанавливаем библиотеку morin

morin - бесплатная библиотека для получения данных из разных API (Wildberries, OZON, Яндекс Директ и другие) и загрузки в базу:

pip install morin

Драйверы для ClickHouse, PostgreSQL и MySQL ставятся автоматически вместе с morin, отдельно доустанавливать ничего не нужно.

Для первой демонстрации без базы хватит одной morin.

Бесплатный старт: получаем данные Wildberries на Python

Начнём с простого - вытащим данные магазина в Python. База и Docker пока не нужны, всё запускается локально и бесплатно.

from morin import WBbyDate

wb = WBbyDate(
    token='ВАШ_ТОКЕН_WB',   # токен из кабинета Wildberries
    add_name='shop1',       # метка магазина (префикс таблиц)
    start='2025-01-01',
)

Заказы за день. Проверим доступ, получив заказы за конкретную дату:

orders = wb.get_orders('2025-06-01')
print(f'Заказов за день: {len(orders)}')

Остатки на складах:

stocks = wb.get_stocks()
for s in stocks[:5]:
    print(s)

Продажи за день:

sales = wb.get_sales('2025-06-01')
print(f'Продаж за день: {len(sales)}')

На выходе - списки словарей, готовые к анализу: закидываем в pandas или сохраняем. Уже на этом этапе morin работает как обычный клиент wildberries api.

Загрузка данных Wildberries в ClickHouse

Теперь сложим данные в базу. Начнём с ClickHouse - аналитической СУБД, которая отлично подходит под такие данные. Нужен запущенный ClickHouse: локально его поднимают одной командой Docker или ставят на сервер.

Добавляем параметры подключения и указываем отчёты через запятую - за один запуск можно забрать сразу несколько:

from morin import WBbyDate

wb = WBbyDate(
    subd='clickhouse',
    host='localhost', port='8123',
    username='default', password='',
    database='wildberries',
    add_name='shop1',
    token='ВАШ_ТОКЕН_WB',
    start='2025-01-01',
    backfill_days=3,
    reports='orders,sales,stocks',
)

wb.collecting_manager()

Что делает collecting_manager:

  • сам создаёт таблицы в ClickHouse и определяет столбцы по данным;
  • работает по принципу Airflow - фиксирует в служебной таблице, за какие дни данные собраны;
  • при повторном запуске догружает только недостающие дни;
  • backfill_days перезабирает несколько последних дней (данные WB задним числом уточняются).

После запуска в базе появятся таблицы с заказами, продажами и остатками. Дальше к ним подключается любой дашборд. Так выглядит таблица остатков в Clickhouse:

То же самое в PostgreSQL и MySQL

Чтобы грузить не в ClickHouse, а в PostgreSQL или MySQL, меняется один параметр - subd. Остальной код тот же.

Для PostgreSQL:

wb = WBbyDate(
    subd='postgresql',
    host='localhost', port='5432',
    username='postgres', password='postgres',
    database='wildberries',
    add_name='shop1',
    token='ВАШ_ТОКЕН_WB',
    start='2025-01-01', backfill_days=3,
    reports='orders,sales,stocks',
)
wb.collecting_manager()

Для MySQL меняем subd на 'mysql' и порт на 3306. morin сама подберёт типы столбцов под выбранную базу данных. Один и тот же коннектор Wildberries наполняет три разные СУБД.

Какие отчёты умеет коннектор Wildberries

У коннектора Wildberries много готовых отчётов, они задаются параметром reports (через запятую). Полный список - с функцией, которая вызывает каждый отчёт:

  • orders - заказы, функция get_orders()
  • sales - продажи, функция get_sales()
  • stocks - остатки на складах, функция get_stocks()
  • stocks_history - история остатков, функция get_stocks()
  • incomes - поставки на склад, функция get_incomes()
  • orders_changes - изменения по заказам, функция get_orders_changes()
  • sales_changes - изменения по продажам, функция get_sales_changes()
  • realized - финансовый отчёт о реализации (еженедельный), функция get_realized()
  • realized_list - список готовых финансовых отчётов, функция get_realized_list()
  • realized_detail - детализация финансового отчёта, функция get_realized_detail()
  • sbor_orders - сборочные задания FBS, функция get_sbor()
  • sbor_status - статусы сборочных заданий, функция get_sbor_status()
  • cards - карточки товаров, функция get_cards()
  • feedbacks - отзывы покупателей, функция get_feedbacks()
  • voronka_week - воронка продаж за неделю, функция get_voronka_week()
  • voronka_all - воронка продаж за весь период, функция get_voronka_all()
  • paid_storage - платное хранение, функция get_paid_storage()
  • excise - маркируемые (акцизные) товары, функция get_excise()
  • adv_upd - обновление ставок рекламы, функция get_adv_upd()

Полная статистика рекламных кампаний забирается отдельно (нужен токен категории «Продвижение»). Для регулярного сбора берут нужный набор, например orders,sales,stocks, и запускают ежедневно.

Автоматизация через Docker

Демонстрация выше запускается руками. Чтобы данные Wildberries обновлялись сами каждый день, morin разворачивают в Docker - сбор идёт по расписанию, с логами и уведомлениями в Telegram. Подробно этот сценарий разобран в отдельной статье про коннекторы к API в ClickHouse на Docker.

Библиотека одинаково работает и как простой Python-клиент, и внутри Docker-контейнера для боевой автоматизации.

FAQ

Как получить данные из Wildberries через API на Python?

Установите библиотеку morin (pip install morin), создайте объект WBbyDate с токеном и вызовите методы get_orders, get_sales, get_stocks. Данные вернутся списком словарей.

Где взять токен Wildberries API?

В личном кабинете продавца Wildberries, в разделе доступа к API. При создании выбираются категории - для выгрузки данных нужна категория статистики.

Бесплатно ли пользоваться API Wildberries?

Да, сам wb api и библиотека morin бесплатны. Платить нужно только за сервер и базу данных, если вынесете сбор в облако.

В какую базу данных можно грузить данные WB?

Коннектор morin умеет ClickHouse, PostgreSQL и MySQL. База выбирается одним параметром subd.

Заключение

Мы разобрали, как выгружать данные из Wildberries через API на Python и грузить их в ClickHouse, PostgreSQL или MySQL с помощью бесплатной библиотеки morin. Начали с локальной демонстрации, а затем одной строкой направили данные в базу.

Главное: получение данных Wildberries сводится к паре методов, выбор базы - к одному параметру, а список отчётов задаётся через запятую. По такому же принципу morin работает с OZON, Яндекс Директом, Метрикой и другими источниками.

Полезные ссылки