Перейти к содержимому
VC
Кейс 11 из 33 · Сбор данных · реклама и конкурентная разведка

GMBSPYLAB: FB Ad Library → лента в Telegram

Конвейер сбора рекламы из публичной FB Ad Library на Playwright и асинхронном Python. Интересное здесь в том, что происходит дальше: приведение к единому виду, отсев повторов, очереди и доставка. 30-75 тыс. карточек в день по 30+ рынкам, вывод в Telegram — отдельная ветка на каждую страну.

Тип
Собственный рабочий инструмент
Стек
Python · Playwright · aiogram 3 · Postgres · arq
Срок
~2 месяца до P0 → активная разработка
Масштаб
30+ гео · 30-75k креативов/день
01 · Боль

Готовые сервисы слежения за чужой рекламой: дорого, медленно и без нужных стран

Платные сервисы (AdHeart, AdSpy, агрегаторы рекламных библиотек) берут $300–800 в месяц и покрывают ограниченный набор стран. По редким рынкам (менее популярные страны Европы, Латинская Америка, Азия) данных либо нет, либо они приходят с задержкой в 1-2 дня.

Meta API через дев-приложение требует прохождения App Review — для маленькой команды это недели ожидания ради данных, которые и так открыты публично. При этом facebook.com/ads/library рисуется прямо в браузере, поэтому простой сбор HTML отдаёт пустую страницу.

Цель — собрать живой поток рекламы из 30+ стран самостоятельно, в свою базу, с фильтром по формату (картинка, видео, PWA), длительности показа, единой системой тегов и публикацией в Telegram.

02 · Архитектура

Конвейер из четырёх ступеней: сбор → единый вид → хранение → доставка

01
СБОР

Playwright, но без разбора вёрстки

Витрина рисуется прямо в браузере, поэтому Chromium без окна открывает страницу один раз — дальше сбор идёт по тому же ответу, что получает сам браузер, и не тратит время на разбор вёрстки. Разбирать HTML на каждой карточке в десятки раз дороже.

Запросы идут с обычного пользовательского темпа: пул сессий с привязкой к рынку, не чаще одного запроса в 2,5 с и жёсткий потолок на сессию. Смысл в том, чтобы поток был предсказуемым и его хватало на суточный объём.

02
УСТОЙЧИВОСТЬ

Сбор переживает изменения на той стороне

Источник живой: разметка и параметры выдачи меняются несколько раз в сутки, и простой сборщик после каждого такого изменения молча отдаёт нули. Здесь схема ответа проверяется на каждом шаге, при расхождении сессия переинициализируется и поток не прерывается. Если источник отвечает ошибкой или притормаживает — сессия уходит в паузу с экспоненциальным откатом и возвращается сама. За сутки такое случается десятки раз, и ни один такой случай не требует моего участия.

03
ХРАНЕНИЕ

Postgres 16 + arq + MinIO для медиа

SQLAlchemy 2 async + asyncpg + alembic миграции, индексы по рекламодателю, стране и дате первого появления. arq через Redis для фоновых задач (загрузка файлов, отсев повторов). Картинки и видео → MinIO / R2 через aioboto3. Повторы отсеиваются по перцептивному хешу изображения — 75 тыс. собранных → 5-12 тыс. уникальных в день.

04
ДОСТАВКА

Telegram через aiogram 3 — два формата вывода

v1 — форум-супергруппа: createForumTopic для каждой из 30+ стран (ЕС-27, Великобритания, Бразилия, Танзания, Мексика, Индия, Канада, ЮАР, Сербия и другие). Каждая страна — своя ветка, удобно смотреть по рынку.

v2 — канал с хештегами: единый поток и теги #GEO #PWA #VIDEO #1DAY #FBPAGE. Задача по расписанию ежедневно обновляет тег #NDAY — видно, сколько дней объявление уже крутится.

03 · Стек

Технологии

Сбор и браузер
  • Playwright (Chromium headless)
  • Пул сессий с привязкой к рынку
  • Ограничение частоты запросов и экспоненциальный откат
  • Валидация схемы ответа на каждом шаге
Серверная часть
  • Python 3.12 + uv (package manager)
  • SQLAlchemy 2 async + asyncpg
  • PostgreSQL 16 и миграции alembic
  • Pydantic v2 для всех схем данных
Очереди, расписание, хранилище
  • arq + Redis 7 (фоновые задачи)
  • APScheduler (запуск по расписанию)
  • MinIO / Cloudflare R2 (aioboto3)
  • SQLite (кэш и локальное состояние)
Telegram и оповещения
  • aiogram 3 (Bot API)
  • Форум-супергруппа: ветка на каждую страну
  • Канал с хештегами и ежедневное обновление счётчика дней
  • Проверка состояния → оповещения в Discord и Telegram
Источники данных
  • Playwright-FB (основной источник)
  • ScrapeCreators (платный запасной источник вне ЕС)
  • Meta Graph API (для подтверждённых идентификаторов)
  • Реестр EU DSA (данные, раскрываемые по регламенту)
Качество и наблюдение
  • structlog (структурированные логи)
  • 16 из 16 тестов проходят (pytest)
  • Проверка состояния и аварийная остановка
  • Вебхуки Discord для статусов
04 · Результат

Что в итоге

Креативов в день
30-75k

после отсева повторов: 5-12 тыс. уникальных

Охват стран
30+

ЕС-27, Великобритания, Бразилия и ещё 30 рынков вне ЕС

Стоимость
$30-60

в месяц за всю инфраструктуру — сервер и хранилище. Платные сервисы берут $300-800

Применимость для клиентов: та же схема (сбор → единый вид → отсев повторов → доставка) переносится на любой источник, к которому у клиента есть законный доступ: свой кабинет на Avito, WB Seller или Ozon Seller, официальные выгрузки, открытые рекламные библиотеки. На созвоне разбираем конкретный источник и что по нему разрешено регламентом площадки.

Готовы начать?

Аудит за 9 900 ₽ — с конкретным отчётом и сметой

Расскажу что внедрить в вашем бизнесе в первую очередь, какая будет окупаемость, и нужен ли вообще AI для вашей задачи (иногда — нет).

Или просто напишите свой вопрос — отвечу в течение 2 часов