Полная аналитика Wildberries в Telegram — от P&L до юнит-экономики
Селлер подключает WB-кабинет, загружает себестоимость — и каждый день получает P&L-отчёт в Telegram, развёрнутую аналитику в Google Sheets на 5 листах и полный контроль через Mini App. Без Excel, без ручного сбора данных, без бухгалтера.
⚡ Проблема
Селлеры Wildberries тратят часы на ручной сбор данных из 6+ разных разделов личного кабинета. P&L считают в Excel, себестоимость теряется, реклама не учитывается в разрезе артикулов. При масштабировании до 200+ SKU и нескольких кабинетов ручная аналитика становится невозможной.
✅ Решение
Telegram-бот автоматически собирает данные из 7 эндпоинтов WB API, рассчитывает полный P&L с учётом налогов, НДС, себестоимости и рекламы — и отправляет готовый отчёт в Telegram. Параллельно формирует 5 листов Google Sheets со 131 столбцом и слайсерами для интерактивной фильтрации. Mini App дублирует все функции бота в мобильном интерфейсе.
⚙️ Что реализовано
📊
P&L-отчёт в Telegram
Заказы, продажи, логистика, комиссии, реклама, себестоимость, налоги — всё в одном сообщении. Периоды: вчера, сегодня, 7/30 дней или произвольный диапазон до 90 дней. Мультивалютность: ₽, ֏, ₸, лей.
📋
Google Sheets — 5 листов аналитики
«По дням», «По неделям», «По артикулам» (131 столбец + 4 слайсера), «Номенклатура» (VLOOKUP + Data Validation), «Unit» (юнит-экономика, 78 столбцов). Автоформатирование, merge, цвета по разделам.
💰
Себестоимость с историчностью
Загрузка Excel (лимит 200 SKU), автогенерация шаблона с ценами WB. Историчность по дате — прошлые периоды не пересчитываются. Конвертация RUB → валюта кабинета по курсу ЦБ РФ.
📱
Telegram Mini App
SPA на чистом JS: онбординг, подключение кабинета, P&L-отчёт с выбором периода, себестоимость, Google Sheets — всё через REST API. Адаптация к теме Telegram, HapticFeedback, BackButton.
📈
Реклама по артикулам
Fullstats API: один запрос — два набора данных. Маппинг nmId → sa_name из reportDetailByPeriod. Группировка расходов по артикулам и дням. Advert UPD: баланс, счёт, бонус — раздельно.
🏪
Хранение по артикулам (Paid Storage)
Асинхронные задачи: create → poll → download. Чанки по 8 дней, пауза 60 сек. Двухуровневый retry (429 + 5xx). Параллельно с другими загрузчиками через asyncio.gather.
🔐
Безопасность и шифрование
WB-токены шифруются AES-256-GCM, хранятся зашифрованными в PostgreSQL. SHA-256 хеш для дедупликации. HMAC-SHA256 валидация initData в Mini App. JWT-авторизация админ-панели.
🖥️
Веб-админка с REST API
JWT-авторизация, список пользователей с пагинацией и поиском, блокировка/разблокировка, экспорт себестоимости в Excel. Заблокированный пользователь получает сообщение от бота.
🔄 Как формируется отчёт
01
Подключение кабинета и онбординг
FSM-диалог: ввод WB-токена → валидация через API → выбор системы налогообложения (УСН/ОСНО/АУСН) → ставка налога → НДС → автоопределение валюты. Токен шифруется AES-256-GCM. 7-дневный триал активируется автоматически.
aiogram FSM
02
Параллельная загрузка из 7 эндпоинтов WB API
reportDetailByPeriod + Advert fullstats + Advert UPD + Paid Storage + Sales API + Analytics API + Content API — параллельно через asyncio.gather. 24 мин вместо 43 мин последовательно. Двухуровневый retry на каждом.
asyncio.gather
03
Парсинг, агрегация и расчёт P&L
Группировка строк по rr_dt (дата реализации). Классификация удержаний по bonus_type_name. Расчёт: валовая прибыль, налог по системе, НДС с возмещением от услуг, операционная и чистая прибыль. Конвертация себестоимости из RUB по курсу ЦБ.
Calculator
04
Формирование Google Sheets — 5 листов
«По дням» (126 столбцов) → «По неделям» (средневзвешенные %) → «По артикулам» (131 столбец + 4 слайсера, артикул × день = строка) → «Номенклатура» (VLOOKUP + Data Validation, 200 строк) → «Unit» (78 столбцов, шапка). Пауза 15 сек между листами.
Sheets API
05
Отправка P&L в Telegram
HTML-форматирование по блокам: заказы (Analytics API), продажи, расходы WB, реклама (fullstats + UPD), себестоимость, прибыль, налоги. Динамический символ валюты. Graceful degradation при недоступности любого источника.
Telegram
06
Mini App и REST API
SPA дублирует все функции бота: онбординг, подключение кабинета, P&L, себестоимость, Google Sheets. HMAC-SHA256 авторизация через initData. Проксирование через nginx. Адаптация к теме Telegram.
FastAPI
⚡
Параллельная загрузка экономит 44% времени. Пять источников данных (Advert fullstats, Advert UPD, Paid Storage, Sales API, Analytics API) загружаются одновременно через asyncio.gather. Общее время ~24 минуты вместо ~43 минут последовательно. Analytics API — самый медленный (подённые запросы с паузой 16 сек).
🔗 Ключевые интеграции
🔵 Wildberries API
7 эндпоинтов, 4 домена
- Statistics API:
reportDetailByPeriod (пагинация по rrdid)
- Advert API:
fullstats (кампании + nmId) + /adv/v1/upd (баланс/счёт/бонус)
- Analytics API:
sales-funnel/products (подённо, retry 6×)
- Paid Storage API: create → poll → download (чанки 8 дней)
- Content API + Prices API (каталог товаров, курсорная пагинация)
🟣 Google Sheets API
5 листов, 131 столбец, слайсеры
- gspread + google-api-python-client (service account)
- Merge, format, column widths за минимум API-вызовов
- AddSlicerRequest: 4 интерактивных фильтра
- SetDataValidationRequest + VLOOKUP-формулы
- Пересоздание листов при каждом обновлении
🟢 PostgreSQL + Alembic
Async SQLAlchemy 2.0
- 6 ORM-моделей: User, WbAccount, Subscription, CogsRecord, AdminUser
- 9 миграций Alembic (автогенерация)
- AES-256-GCM шифрование токенов + SHA-256 для дедупликации
- Абстрактные репозитории (CRUD) + конкретные реализации
- Unit of Work через middleware (автокоммит / ролбэк)
🟡 Mini App + REST API
SPA + FastAPI + JWT
- 7 страниц Mini App (hash-роутинг, Observer store)
- HMAC-SHA256 валидация initData (constant-time)
- 17 REST-эндпоинтов (user, accounts, reports, cogs, sheets, admin)
- JWT-авторизация админ-панели (bcrypt, блокировка)
- Sentry мониторинг + CORS + Nginx проксирование
🔗
Один запрос к fullstats — два набора данных. Агрегированные расходы по кампаниям (для листов «По дням» и «По неделям») и детализированные по nmId (для листа «По артикулам») извлекаются из одного HTTP-ответа. Маппинг nmId → sa_name строится из reportDetailByPeriod — без дополнительных запросов.
📊 Ключевые показатели
131
Столбец на листе «По артикулам» с 4 слайсерами
7
Эндпоинтов WB API загружаются параллельно
5 листов
Google Sheets: дни, недели, артикулы, номенклатура, Unit
90 дней
Максимальная глубина отчёта и данных в таблице
17
REST-эндпоинтов: Mini App + админ-панель
SOLID
Архитектура: Repository, Service, Strategy, Facade, UoW
🏗️ Архитектурные особенности
🧱
Четырёхслойная архитектура
Handlers/Routes → Services → Repositories → Infrastructure. Три точки входа (Telegram Bot, Mini App, REST API) работают через один сервисный слой. Все зависимости инжектируются: конструкторы + FastAPI Depends.
🎭
Facade — SheetsService как упрощённый интерфейс
SheetsService координирует 4 подсистемы: SheetsDataFetcher (откуда данные), SheetsWriter (куда писать), SheetsConfig (что за структура), SheetsCalculator (как считать). Хэндлеры вызывают два метода — fetch_daily_reports() и update_table().
🔄
Strategy — взаимозаменяемые калькуляторы
ReportCalculator рассчитывает P&L по формулам, SheetsCalculator строит строку таблицы (прямые маппинги + вычисляемые столбцы). Новый столбец — одна строка в _DIRECT_FIELD_MAP или один блок в _build_computed_values().
📦
Пакет report_aggregator — 6 модулей без IO
Чистые функции парсинга, агрегации, группировки по дням/артикулам/неделям, рекламных данных и конвертации типов. Переиспользуются в Telegram-отчёте, Google Sheets и REST API. Обратная совместимость через __init__.py.
🛡️
Graceful Degradation на всех уровнях
Analytics API сбоит — столбцы «Заказы» пустые, отчёт формируется. Paid Storage недоступен — хранение из reportDetailByPeriod. Реклама не загрузилась — нули. Слайсеры не создались — лист с данными сохраняется. Пользователь всегда получает результат.
🔐
Три уровня авторизации
Telegram Bot: middleware проверки блокировки (BlockCheckMiddleware). Mini App: HMAC-SHA256 валидация initData (TelegramAuthMiddleware, constant-time). Админ-панель: JWT + bcrypt (AdminAuthMiddleware). Каждый уровень — отдельный middleware.
📦
Расширяемость без переписывания. Новый столбец в Google Sheets — одна строка в конфиге. Новая валюта — одна запись в маппинге. Новый тип удержания WB — одна ветка в классификаторе. Новый лист — новый билдер в sheets_config.py + вызов _create_worksheet(). Все формулы P&L идентичны в Telegram и Google Sheets.
🛡️
Мультивалютность из коробки. При подключении кабинета валюта определяется автоматически через WB API. Себестоимость вводится в рублях, при нерублёвом кабинете конвертируется по курсу ЦБ РФ на дату отчёта. Поддерживаются 10 валют: KZT, BYN, AMD, KGS, UZS, GEL, AZN, TJS, AED, MDL.
🛠️ Технологии
Python 3.11+
aiogram 3
FastAPI
PostgreSQL
SQLAlchemy 2.0
Alembic
httpx
gspread
Google Sheets API
openpyxl
cryptography
structlog
asyncio
PyJWT
bcrypt
Sentry
Nginx
systemd
ruff
mypy strict
pytest
✅ Подойдёт вам, если
- Вы продаёте на Wildberries и устали вручную сводить данные из 6 разделов личного кабинета в Excel — бот формирует полный P&L автоматически, включая рекламу, хранение и себестоимость по каждому артикулу
- Вам нужна аналитика в Google Sheets с разбивкой по дням, неделям и артикулам — 131 столбец, слайсеры, VLOOKUP, автоформатирование. Данные обновляются одной кнопкой
- Вы управляете несколькими WB-кабинетами (в том числе в разных валютах) и хотите видеть P&L каждого из одного интерфейса — бот поддерживает мультикабинетность и автоконвертацию валют
- Вы хотите монетизировать аналитику как SaaS-продукт — в проекте реализованы подписки с триалом, реферальная программа, админ-панель для управления пользователями и готовая инфраструктура для платежей
- Важна надёжность при работе с нестабильными API Wildberries — двухуровневый retry на каждом эндпоинте, Graceful Degradation, параллельная загрузка, Sentry-мониторинг
Раньше мой финансист тратил 3 дня в неделю на сведение данных из WB в таблицу. Сейчас я нажимаю одну кнопку — и через 24 минуты получаю Google Sheets с полной аналитикой: P&L по дням, по неделям, по каждому из 180 артикулов. Реклама разбита по товарам, хранение посчитано по складам, себестоимость подтягивается автоматически. Финансиста перевёл на стратегические задачи.
— Селлер Wildberries, 180 SKU, Санкт-Петербург
Нужен Telegram-бот для аналитики маркетплейса?
Разработаю бот с P&L-отчётами, Google Sheets, подписками и Mini App — под Wildberries, Ozon или вашу площадку
Обсудить проект →