Мета:
Создать автономную систему лидогенерации, которая ежедневно сканирует реестр Prozorro в поисках двух категорий возможностей: заключенных договоров (теплые лиды — организации, которые уже покупают релевантный товар) и активных тендеров (где можно подать предложение). Конечный продукт — структурированная CRM-база в Airtable с полным контактом заказчика, участниками и ценами предложений.
Ключевые требования:
Два параллельных воркфлоу: изолированная обработка контрактов (/contracts) и активных тендеров (/tenders?status=active.tendering)
Расширенная фильтрация: 5 CPV-кодов + 15 брендов-маркеров + минимальная сумма 50 000 грн
Курсорная пагинация с историческим backfill: сканирование Prozorro с 01.01.2025 без потери позиции между запусками
Детализированная CRM-структура: контакты (ЕГРПОУ, email, телефон), участники аукциона с ценами, ссылки на реестр предложений
Дедупликация на уровне Airtable: предотвращение повторных записей при непрерывной работе
Гибридная логика: закрытые тендеры, которые прошли фильтр, автоматически обогащают базу лидов данными участников для будущих email-кампаний
Мой Вклад:
Заказчик торгует энергетическим оборудованием (аккумуляторы, ИБП, солнечные панели) и тратил часы ежедневно на ручной мониторинг Prozorro. Задача заключалась не просто в "присылке тендеров", а в создании готового к продажам конвейера лидов с полным расшифровкой рынка.
Архитектурная декомпозиция: вместо одного "толстого" флоу я разделил систему на два независимых воркфлоу — для договоров и активных тендеров. Каждый имеет собственный курсор, график запуска и Airtable-таблицу. Это позволило масштабировать источники без взаимных блокировок.
Курсорная пагинация с self-healing логикой: Prozorro возвращает упаковочный курсор в формате {timestamp}.{seq}.{hash}. Я реализовал защитный слой, который валидирует курсор перед использованием и автоматически восстанавливает его с валидной даты, если API возвращает аномалию (например, сброс до 2015 года). Без вмешательства администратора.
Двухуровневое обогащение данных: для лидов я сделал каскад HTTP-запросов — сначала контракт (покупатель, поставщик, сумма), затем тендер (участники, ставки, реестр предложений). Отдельный JavaScript-узел объединяет эти потоки и формирует JSON с массивом участников (название, ЕГРПОУ, email, начальная + финальная ставка), готовый для интеграции с email-рассылками.
Дедупликация через Airtable Search: перед каждой записью флоу делает поиск по contractID/tenderID, что позволяет безопасно перезапускать воркфлоу сколько угодно раз без создания дублей.
Маршрутизация закрытых тендеров: тендеры, которые закончились до момента обработки, не выбрасываются — IF-логика перенаправляет их в таблицу "Лиды" с полным списком участников. Так заказчик получает не только потенциальных клиентов-покупателей, но и конкурентов-поставщиков для анализа рынка.
Результат:
Работающая система, которая ежедневно обогащает CRM заказчика без какого-либо человеческого вмешательства:
2 источника данных в одной БД: Airtable с двумя таблицами ("Лиды" и "Активные тендеры"), каждая с контактами, ценами, документами и ссылками
Готовность к email-маркетингу: структурированные данные участников (с email и телефонами) можно напрямую сбрасывать в Mailchimp/SendPulse/собственный скрипт
Экономия 2-3 часа/день: вместо ручного гугления заказчик сразу получает таблицу с 18 полями
Исторический охват: backfill с 01.01.2025 позволил сформировать базу теплых лидов за 16+ месяцев еще до запуска
Стабильность 24/7: система запускается 4 раза в день по расписанию, с retry-логикой на API-ошибки и самовосстановлением курсора
#n8n #Airtable #LeadGeneration #SalesAutomation #Prozorro #API #WorkflowAutomation #JavaScript #CRM #DataPipeline #BusinessAutomation #NoCode #B2B #Лидогенерация #Автоматизация
Создать автономную систему лидогенерации, которая ежедневно сканирует реестр Prozorro в поисках двух категорий возможностей: заключенных договоров (теплые лиды — организации, которые уже покупают релевантный товар) и активных тендеров (где можно подать предложение). Конечный продукт — структурированная CRM-база в Airtable с полным контактом заказчика, участниками и ценами предложений.
Ключевые требования:
Два параллельных воркфлоу: изолированная обработка контрактов (/contracts) и активных тендеров (/tenders?status=active.tendering)
Расширенная фильтрация: 5 CPV-кодов + 15 брендов-маркеров + минимальная сумма 50 000 грн
Курсорная пагинация с историческим backfill: сканирование Prozorro с 01.01.2025 без потери позиции между запусками
Детализированная CRM-структура: контакты (ЕГРПОУ, email, телефон), участники аукциона с ценами, ссылки на реестр предложений
Дедупликация на уровне Airtable: предотвращение повторных записей при непрерывной работе
Гибридная логика: закрытые тендеры, которые прошли фильтр, автоматически обогащают базу лидов данными участников для будущих email-кампаний
Мой Вклад:
Заказчик торгует энергетическим оборудованием (аккумуляторы, ИБП, солнечные панели) и тратил часы ежедневно на ручной мониторинг Prozorro. Задача заключалась не просто в "присылке тендеров", а в создании готового к продажам конвейера лидов с полным расшифровкой рынка.
Архитектурная декомпозиция: вместо одного "толстого" флоу я разделил систему на два независимых воркфлоу — для договоров и активных тендеров. Каждый имеет собственный курсор, график запуска и Airtable-таблицу. Это позволило масштабировать источники без взаимных блокировок.
Курсорная пагинация с self-healing логикой: Prozorro возвращает упаковочный курсор в формате {timestamp}.{seq}.{hash}. Я реализовал защитный слой, который валидирует курсор перед использованием и автоматически восстанавливает его с валидной даты, если API возвращает аномалию (например, сброс до 2015 года). Без вмешательства администратора.
Двухуровневое обогащение данных: для лидов я сделал каскад HTTP-запросов — сначала контракт (покупатель, поставщик, сумма), затем тендер (участники, ставки, реестр предложений). Отдельный JavaScript-узел объединяет эти потоки и формирует JSON с массивом участников (название, ЕГРПОУ, email, начальная + финальная ставка), готовый для интеграции с email-рассылками.
Дедупликация через Airtable Search: перед каждой записью флоу делает поиск по contractID/tenderID, что позволяет безопасно перезапускать воркфлоу сколько угодно раз без создания дублей.
Маршрутизация закрытых тендеров: тендеры, которые закончились до момента обработки, не выбрасываются — IF-логика перенаправляет их в таблицу "Лиды" с полным списком участников. Так заказчик получает не только потенциальных клиентов-покупателей, но и конкурентов-поставщиков для анализа рынка.
Результат:
Работающая система, которая ежедневно обогащает CRM заказчика без какого-либо человеческого вмешательства:
2 источника данных в одной БД: Airtable с двумя таблицами ("Лиды" и "Активные тендеры"), каждая с контактами, ценами, документами и ссылками
Готовность к email-маркетингу: структурированные данные участников (с email и телефонами) можно напрямую сбрасывать в Mailchimp/SendPulse/собственный скрипт
Экономия 2-3 часа/день: вместо ручного гугления заказчик сразу получает таблицу с 18 полями
Исторический охват: backfill с 01.01.2025 позволил сформировать базу теплых лидов за 16+ месяцев еще до запуска
Стабильность 24/7: система запускается 4 раза в день по расписанию, с retry-логикой на API-ошибки и самовосстановлением курсора
#n8n #Airtable #LeadGeneration #SalesAutomation #Prozorro #API #WorkflowAutomation #JavaScript #CRM #DataPipeline #BusinessAutomation #NoCode #B2B #Лидогенерация #Автоматизация