HubSpot + Zoom: что не умеет нативная интеграция
HubSpot имеет официальное приложение для Zoom в HubSpot App Marketplace. Оно работает — встречи создаются из HubSpot, данные об участниках попадают в CRM. Проблемы начинаются в деталях: участник зашёл без Zoom-аккаунта — контакт не создан, регистрационная форма с дополнительными полями — регистрация упала, нужны данные из нескольких Zoom-аккаунтов — подключить можно только один. Именно на этих кейсах команды обнаруживают границы нативной интеграции.
Что умеет нативная интеграция HubSpot + Zoom
По состоянию на Q2 2026 нативная интеграция предоставляет:
- Создание Zoom-встречи из HubSpot Meetings: при бронировании встречи через HubSpot Meeting Link автоматически создаётся Zoom-событие со ссылкой
- Синхронизация вебинаров: данные о регистрантах и посетителях Zoom Webinar -> HubSpot контакты
- Базовые данные участия: кто пришёл, как долго был на встрече
- HubSpot Marketing Events: Zoom-вебинары отображаются как маркетинговые события в таймлайне контакта
Для простого использования этого достаточно. Ограничения проявляются при масштабировании или нестандартных сценариях.
Ограничение 1: участники без Zoom-аккаунта не создают контакты
Если участник подключился к Zoom-встрече без авторизации в Zoom (ввёл имя как гость, не логинился) — HubSpot не получает email этого человека. Контакт не создаётся.
Реальный сценарий: вебинар для потенциальных клиентов. 40% аудитории заходит «Иван Иванов» без входа в аккаунт. Половина лидов теряется молча.
Кастомное решение: Zoom Webinars API возвращает расширенные данные участников через GET /webinars/{id}/registrants — включая email всех зарегистрировавшихся, даже если они зашли гостем. Регистрационные данные есть — они просто не попадают в HubSpot через нативный коннектор.
import requests
def get_webinar_registrants(webinar_id: str, zoom_token: str) -> list:
response = requests.get(
f'https://api.zoom.us/v2/webinars/{webinar_id}/registrants',
headers={'Authorization': f'Bearer {zoom_token}'},
params={'status': 'approved', 'page_size': 300}
)
return response.json().get('registrants', [])
# Создать/обновить HubSpot контакт для каждого регистранта
for registrant in get_webinar_registrants(WEBINAR_ID, zoom_token):
upsert_hubspot_contact(
email=registrant['email'],
first_name=registrant['first_name'],
last_name=registrant['last_name'],
properties={'zoom_webinar_attended': True}
)
Ограничение 2: только три поля в регистрационной форме
Нативная интеграция поддерживает ровно три обязательных поля в Zoom-регистрации: First Name, Last Name, Email. Если на стороне Zoom настроены дополнительные обязательные поля (компания, должность, телефон) — регистрация через HubSpot Meeting Link падает без явной ошибки для пользователя.
Это типичная точка сбоя для B2B-вебинаров, где маркетинг хочет собрать более детальные данные о регистрантах.
Правильный подход: собирать дополнительные поля через HubSpot Form (не через Zoom Registration Form), а затем через Zoom API создавать регистрацию программно с уже имеющимися данными:
def register_for_webinar(webinar_id: str, contact: dict, zoom_token: str):
payload = {
'email': contact['email'],
'first_name': contact.get('firstname', ''),
'last_name': contact.get('lastname', ''),
'org': contact.get('company', ''),
'job_title': contact.get('jobtitle', '')
}
response = requests.post(
f'https://api.zoom.us/v2/webinars/{webinar_id}/registrants',
headers={'Authorization': f'Bearer {zoom_token}'},
json=payload
)
return response.json().get('join_url')
Ограничение 3: один Zoom-аккаунт на весь HubSpot
К одному HubSpot-порталу можно подключить только один Zoom-аккаунт (один tenant). Если в компании несколько Zoom Business-аккаунтов (например, по регионам) — все данные идут только из одного.
При кастомной интеграции: backend получает данные из нескольких Zoom-аккаунтов через Server-to-Server OAuth, агрегирует и пишет в HubSpot:
ZOOM_ACCOUNTS = [
{'account_id': 'ACC_EU', 'client_id': '...', 'client_secret': '...'},
{'account_id': 'ACC_US', 'client_id': '...', 'client_secret': '...'},
]
for account in ZOOM_ACCOUNTS:
token = get_zoom_server_to_server_token(account)
meetings = get_recent_meetings(token)
for meeting in meetings:
sync_meeting_to_hubspot(meeting)
Ограничение 4: poll-ответы и Q&A не синхронизируются
Zoom Webinar поддерживает опросы (polls) и Q&A-сессии. Эти данные — ценнейший sales-сигнал: кто ответил «Да» на вопрос о бюджете, кто задал вопрос о ценах.
Нативная интеграция передаёт: факт посещения и длительность. Poll-ответы и Q&A — нет.
Zoom API предоставляет эти данные:
— GET /webinars/{id}/polls/results — ответы участников на опросы
— GET /webinars/{id}/qa — вопросы из Q&A
При кастомной интеграции poll-ответы записываются как HubSpot Custom Properties или Timeline Events, и на них можно строить Workflows:
def sync_poll_results(webinar_id, zoom_token, hubspot_client):
poll_results = requests.get(
f'https://api.zoom.us/v2/webinars/{webinar_id}/polls/results',
headers={'Authorization': f'Bearer {zoom_token}'}
).json()
for question_data in poll_results.get('questions', []):
email = question_data['email']
for qa in question_data.get('question_details', []):
# Записать ответ как HubSpot Timeline Event
hubspot_client.crm.timeline.events.basic_api.create({
'eventTemplateId': POLL_EVENT_TEMPLATE_ID,
'email': email,
'tokens': [
{'name': 'question', 'value': qa['question']},
{'name': 'answer', 'value': qa['answer']}
]
})
Ограничение 5: изменение в январе 2025 — сегментация по Zoom-данным
С 8 января 2025 HubSpot прекратил поддержку Zoom contact-based properties для сегментации контактов и enrollment criteria в Workflows. Zoom engagement data перенесена в Marketing Events framework.
Если команда использовала сегменты типа «посетил Zoom-вебинар X» — эти сегменты перестали обновляться. Workflows на основе Zoom-свойств контактов — сломались.
Это хорошо задокументированный breaking change, который застал врасплох команды с устоявшейся автоматизацией. Кастомная интеграция через Timeline Events и custom properties — более устойчива к изменениям в нативном коннекторе.
Когда нативной интеграции достаточно
HubSpot + Zoom нативная интеграция закрывает задачу если:
— Вебинары простые: три поля регистрации, без дополнительных данных
— Не нужны poll-ответы и Q&A в CRM
— Один Zoom-аккаунт на всю компанию
— Участники всегда логинятся в Zoom (корпоративная аудитория)
— Не использовались Zoom contact-based properties в сегментации до 2025
Аналогичные ограничения нативных интеграций HubSpot разобраны в статье HubSpot + Slack: что не умеет нативная интеграция — паттерн один: нативное работает для базового сценария, кастомное — для реальных требований команды.
Реальный кейс
B2B SaaS-компания (вебинары 2 раза в месяц, 300–500 участников, pipeline из вебинаров — 30% квартального revenue):
- Включили нативную интеграцию -> через 2 месяца обнаружили: 35% регистрантов не создали контакт в HubSpot (зашли без Zoom-аккаунта), poll-данные о бюджете участников пропали.
- Кастомная интеграция: Zoom Webinar API -> все регистранты создаются в HubSpot сразу при регистрации, poll-ответы -> Timeline Events -> Workflow квалифицирует лидов с нужными ответами.
- Результат: pipeline из вебинаров вырос на 28% за счёт восстановления потерянных контактов и автоматической квалификации по poll-данным.
Часто задаваемые вопросы
Zoom Events vs Zoom Webinars — в чём разница для интеграции с HubSpot?
Zoom Events — новый продукт для multi-session конференций. Нативная интеграция HubSpot не поддерживает Zoom Events вообще. Zoom Webinars поддерживается, но с ограничениями описанными выше. Для Zoom Events — только кастомная интеграция через Zoom Events API.
Как исправить потерю контактов из-за guest-участия в Zoom?
Единственный надёжный способ — собирать email при регистрации (до встречи), а не полагаться на идентификацию по Zoom-аккаунту. HubSpot Form -> регистрация через Zoom API программно. Тогда email известен до того, как человек зашёл на встречу.
HubSpot перестал поддерживать Zoom-свойства — что делать с существующими workflows?
Проверить все Workflows и Smart Lists на использование Zoom contact properties. Заменить на Marketing Events-условия (Has attended event: [Webinar Name]) или перейти на кастомные Timeline Events для гибкости. HubSpot предоставил инструкцию по миграции при анонсе изменений в ноябре 2024.
Server-to-Server OAuth vs User OAuth для Zoom API — что выбрать?
Server-to-Server OAuth (Account-level app) — предпочтительный вариант для кастомных интеграций: не требует действий пользователя для авторизации, токен получается автоматически. User OAuth нужен если интеграция должна действовать от имени конкретного пользователя (например, создавать встречи в его личном Calendar).
Итого
- Нативная HubSpot + Zoom интеграция: базовый sync участников и вебинаров, одна Zoom-учётная запись, три поля регистрации
- Ключевые ограничения: потеря участников без Zoom-аккаунта, нет poll/Q&A данных, один Zoom-аккаунт, breaking change в январе 2025
- Кастомная интеграция: Zoom Webinar API -> все регистранты в HubSpot, poll-ответы как Timeline Events, поддержка нескольких Zoom-аккаунтов
- Типовой результат: восстановление 30–40% потерянных контактов, квалификация лидов по poll-данным
Если вы проводите вебинары через Zoom и замечаете потери в HubSpot — опишите вашу схему регистрации и какие данные нужны. Exceltic.dev разберёт где именно ломается нативная интеграция и предложит архитектуру.