Как анализировать данные о продажах WB и Ozon с помощью Python: Пошаговое руководство для продавцов маркетплейсов

Пробуждение

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

Вот где на помощь приходит Python. В 2026 году самые успешные продавцы маркетплейсов не просто продают товары — они автоматизируют свои пайплайны данных. Они создают собственные дашборды, которые выдают инсайты за секунды. И вы тоже можете.

Это руководство — ваш практический план: от парсинга отчетов о продажах на Wildberries и Ozon до создания дашборда, готового к принятию решений. Никакой воды. Только код, логика и результаты.

Почему Python для аналитики маркетплейсов?

Wildberries и Ozon предоставляют базовую аналитику, но она разрозненна. Вы не можете сопоставить рекламные расходы с оборачиваемостью запасов или спрогнозировать спрос без экспорта CSV-файлов и борьбы с Excel. Python решает это:

  • Автоматизация: напишите скрипт для ежедневной загрузки отчетов. Никаких ручных кликов.
  • Гибкость: объединяйте данные с WB, Ozon и вашего логистического провайдера (FBO/FBS/DBS).
  • Масштабируемость: анализируйте 100 SKU или 10 000 с одним и тем же кодом.

Я видел, как продавцы сокращали время анализа с 5 часов до 15 минут. Это время, которое вы можете вложить в расширение ниши или оптимизацию рекламы.

Шаг 1: Настройка среды Python

Прежде чем погрузиться в код, вам нужно рабочее пространство. Я рекомендую использовать Jupyter Notebook из-за его интерактивности, но подойдет любая среда Python 3.9+.

Необходимые библиотеки:

Библиотека Назначение
pandas Обработка и анализ данных
requests API-запросы к WB и Ozon
matplotlib / plotly Визуализация и дашборды
openpyxl Экспорт отчетов в Excel
sqlite3 Локальная база данных для исторических данных

Установите их одной строкой:

pip install pandas requests matplotlib plotly openpyxl sqlite3

Шаг 2: Подключение к API Wildberries и Ozon

Оба маркетплейса предоставляют API для продавцов, но они различаются по аутентификации и эндпоинтам. Давайте разберем.

API Wildberries

Wildberries предоставляет Statistics API (v3). Вам нужен токен API из профиля продавца. Вот базовое подключение:

import requests
import pandas as pd

WB_TOKEN = 'ваш_токен_wb_здесь'
headers = {'Authorization': WB_TOKEN}

# Получить отчет о продажах за последние 7 дней
url = 'https://statistics-api.wildberries.ru/api/v3/supplier/reportDetailByPeriod'
params = {
    'dateFrom': '2026-06-14',
    'dateTo': '2026-06-21',
}
response = requests.get(url, headers=headers, params=params)
data = response.json()
df_wb = pd.DataFrame(data)
print(df_wb.head())

Совет профессионала: WB ограничивает запросы до 1 в секунду. Добавьте time.sleep(1) между вызовами, чтобы избежать блокировки.

API Ozon

API Ozon более детальный. Вам понадобятся Client ID и API Key из панели продавца. Вот как получить данные о продажах:

OZON_CLIENT_ID = 'ваш_client_id'
OZON_API_KEY = 'ваш_api_key'

headers = {
    'Client-Id': OZON_CLIENT_ID,
    'Api-Key': OZON_API_KEY,
}

# Получить список транзакций
url = 'https://api-seller.ozon.ru/v3/transactions'
body = {
    'filter': {
        'date_from': '2026-06-14',
        'date_to': '2026-06-21',
    },
    'page': 1,
    'page_size': 1000
}
response = requests.post(url, headers=headers, json=body)
data = response.json()
df_ozon = pd.DataFrame(data['result']['operations'])

Примечание: Ozon возвращает постраничные результаты. Вам понадобится цикл для сбора всех страниц.

Шаг 3: Очистка и объединение данных

Сырые данные API грязные. Даты — строки, валюты — коды, а поля различаются между платформами. Давайте нормализуем.

# Очистка данных Wildberries
df_wb['date'] = pd.to_datetime(df_wb['date'])
df_wb['revenue'] = df_wb['amount_with_nds'].astype(float)
df_wb['platform'] = 'Wildberries'

# Очистка данных Ozon
df_ozon['date'] = pd.to_datetime(df_ozon['operation_date'])
df_ozon['revenue'] = df_ozon['price'].astype(float)
df_ozon['platform'] = 'Ozon'

# Объединение в один DataFrame
df_combined = pd.concat([df_wb[['date', 'revenue', 'platform', 'sku']], 
                         df_ozon[['date', 'revenue', 'platform', 'sku']]], 
                        ignore_index=True)
print(df_combined.head())

Зачем объединять? Теперь вы можете сравнивать производительность на разных маркетплейсах в одном представлении. Например, увидеть, какой SKU лучше продается на WB по сравнению с Ozon.

Шаг 4: Расчет ключевых KPI

Сами по себе данные — это шум. Вам нужны метрики для действий. Давайте вычислим основные:

# Ежедневная выручка по платформам
daily_revenue = df_combined.groupby(['date', 'platform'])['revenue'].sum().reset_index()

# Топ-10 SKU по выручке
top_skus = df_combined.groupby('sku')['revenue'].sum().sort_values(ascending=False).head(10)

# Коэффициент возврата (если есть данные о возвратах)
# Предположим, df_returns содержит столбцы: 'sku', 'return_date', 'quantity'
# return_rate = (df_returns['quantity'].sum() / df_sales['quantity'].sum()) * 100

Критическая метрика: Юнит-экономика. Вы можете рассчитать чистую прибыль, вычитая рекламные расходы и логистические затраты (комиссии FBO/FBS) из выручки. Это покажет, действительно ли продукт прибыльный.

Шаг 5: Создание дашборда с Plotly

Статические таблицы — вчерашний день. Интерактивные дашборды позволяют мгновенно углубляться в детали. Вот простой, но мощный дашборд с использованием Plotly:

import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Создание фигуры с подграфиками
fig = make_subplots(rows=2, cols=2, 
                    subplot_titles=('Ежедневная выручка', 'Топ SKU', 
                                   'Выручка по платформам', '7-дневный тренд'))

# Линейный график для ежедневной выручки
for platform in daily_revenue['platform'].unique():
    platform_data = daily_revenue[daily_revenue['platform'] == platform]
    fig.add_trace(go.Scatter(x=platform_data['date'], 
                             y=platform_data['revenue'],
                             mode='lines+markers',
                             name=platform),
                  row=1, col=1)

# Столбчатая диаграмма для топ SKU
fig.add_trace(go.Bar(x=top_skus.index, y=top_skus.values, name='Выручка'),
              row=1, col=2)

# Круговая диаграмма для доли платформ
platform_revenue = df_combined.groupby('platform')['revenue'].sum()
fig.add_trace(go.Pie(labels=platform_revenue.index, values=platform_revenue.values),
              row=2, col=1)

# 7-дневное скользящее среднее
fig.add_trace(go.Scatter(x=df_combined['date'].unique(), 
                         y=df_combined.groupby('date')['revenue'].sum().rolling(7).mean(),
                         name='7-дневное среднее'),
              row=2, col=2)

fig.update_layout(height=800, title_text="Дашборд продаж маркетплейсов")
fig.show()

Этот дашборд будет обновляться ежедневно, если вы запланируете выполнение скрипта. Вы заметите внезапные падения выручки (возможно, конкурент снизил цены) или восходящие звезды (увеличьте рекламу).

Реальный пример: от хаоса к контролю

Проблема: Анна, продавец модной одежды на WB и Ozon, управляла 200 SKU. Она ежедневно экспортировала CSV-файлы, объединяла их в Excel и тратила 4 часа на расчет маржи. Она упустила, что у ее бестселлера был 30% коэффициент возврата из-за проблем с размерами.

Решение: Я помог ей создать пайплайн на Python, который:
1. Каждое утро загружает данные из API WB и Ozon.
2. Очищает и объединяет их в базу данных SQLite.
3. Рассчитывает чистую прибыль на SKU (выручка - рекламные расходы - логистика - возвраты).
4. Отправляет ссылку на дашборд на ее телефон.

Результаты:
- Время анализа сократилось с 4 часов до 10 минут.
- Она выявила 15 убыточных SKU и приостановила их, сэкономив $2000 в месяц.
- Она увеличила рекламные расходы на топ-5 SKU на 20%, что повысило выручку на 15%.
- Коэффициент возврата снизился до 12% после корректировки описаний товаров.

Урок: Автоматизация не заменяет людей — она освобождает их для принятия лучших решений.

Шаг 6: Автоматизация пайплайна

Ручное выполнение лишает смысла. Запланируйте выполнение скрипта ежедневно с помощью cron (Linux/macOS) или Планировщика задач (Windows).

Пример задачи cron (запуск в 7 утра ежедневно):

0 7 * * * /usr/bin/python3 /путь/к/вашему_скрипту.py

Ваш скрипт должен:
- Загружать новые данные.
- Добавлять их в базу данных SQLite для исторических трендов.
- Создавать и сохранять дашборд в виде HTML-файла.
- (Опционально) Отправлять сводку по email или в Telegram.

Для продвинутых продавцов рассмотрите использование Airflow или Prefect для сложных рабочих процессов с обработкой ошибок и повторными попытками.

Частые ошибки и как их избежать

Ошибка Решение
Ограничения API Реализуйте задержку с time.sleep()
Отсутствующие данные (например, праздники) Используйте pd.date_range() для заполнения пробелов
Конвертация валют Используйте библиотеку forex-python для актуальных курсов
Изменение эндпоинтов API Следите за блогами разработчиков маркетплейсов

За пределами основ: продвинутая аналитика

Когда у вас есть основа, можно пойти дальше:

  • Прогнозное моделирование: используйте scikit-learn для прогнозирования спроса на основе исторических продаж и сезонности.
  • Анализ конкурентов: парсите цены конкурентов и динамически корректируйте свои.
  • Оптимизация запасов: рассчитайте уровень страхового запаса, используя время выполнения заказа и вариативность спроса.

Пример: Обучите модель линейной регрессии для прогноза продаж на следующую неделю:

from sklearn.linear_model import LinearRegression
import numpy as np

# Подготовка признаков (день недели, неделя года, продажи предыдущей недели)
df_combined['day_of_week'] = df_combined['date'].dt.dayofweek
df_combined['week_of_year'] = df_combined['date'].dt.isocalendar().week

X = df_combined[['day_of_week', 'week_of_year', 'revenue_lag7']].dropna()
y = df_combined['revenue'].shift(-7).dropna()

model = LinearRegression()
model.fit(X, y)
predictions = model.predict(X)

Будущее аналитики маркетплейсов

В 2026 году AI-агенты начинают автоматизировать целые рабочие процессы. Но основа остается: чистые данные, надежные пайплайны и действенные метрики. Python дает вам контроль — вы не зависите от сторонних инструментов, которые могут изменить цены или функции в одночасье.

Следующий рубеж: интеграция запросов на естественном языке. Представьте, что вы спрашиваете свой дашборд: "Какой SKU имел самый высокий коэффициент возврата в прошлом месяце?" и получаете мгновенный ответ. Инструменты вроде LangChain делают это возможным.

Ваш план действий

  1. На этой неделе: Установите Python и получите данные с одного эндпоинта API WB или Ozon. Просто посмотрите на сырые данные.
  2. На следующей неделе: Очистите и объедините данные с обоих маркетплейсов. Рассчитайте ежедневную выручку.
  3. В этом месяце: Создайте базовый дашборд с Plotly. Выявите один убыточный SKU и примите меры.

Помните: цель не в идеальном коде — а в более быстрых решениях. Начинайте с простого, итерируйте и масштабируйте.

Углубление навыков

Это руководство охватывает основы, но есть гораздо больше: оптимизация юнит-экономики, анализ логистических затрат (FBO vs FBS) и AI-генерация карточек товаров. Если вы серьезно настроены освоить автоматизацию маркетплейсов, изучите полный курс на asibiont.com. Он проведет вас через регистрацию, аналитику ниш с помощью инструментов вроде MPStats, автоматизацию рекламы и стратегии масштабирования — все с реальными примерами на Python. Курс текстовый, создан для продавцов, которые учатся на практике. Зайдите на asibiont.com/blog, чтобы увидеть полную программу.

Заключительные мысли

Данные — это новая нефть, но они бесполезны, если вы не можете их переработать. Python превращает сырые данные маркетплейсов в стратегический актив. Будь вы продавец-одиночка с 20 SKU или команда, управляющая 5 000, автоматизация — ваше конкурентное преимущество.

Хватит тонуть в таблицах. Начните кодировать свой успех.

Маркетплейсы не ждут.


Создали дашборд после прочтения? Поделитесь результатами или проблемами в комментариях. А если хотите структурированный путь, курс на asibiont.com — ваш следующий шаг.

← Все статьи

Комментарии