HubSpot + Zoom: что не умеет нативная интеграция

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 разберёт где именно ломается нативная интеграция и предложит архитектуру.

Ещё статьи

Все →