HubSpot Webinar Events And Analytics Payloads
When you connect a Wistia webinar (live stream event) to HubSpot, Wistia writes two kinds of data to the contact: timeline activities (a record of what someone did — registered, attended, answered a poll, asked a question) and contact properties (the latest values stored directly on the contact). This page documents what Wistia sends, when it sends it, and the cases where nothing is sent.
For point-and-click setup — connecting the integration, mapping form fields, reconnecting, or fixing sync errors — see the Help Center. This page covers the wire format and the integration decisions that depend on it.
Prerequisites
Two conditions have to be true before webinar data reaches HubSpot:
- Use a Wistia registration form, not an embedded HubSpot (MAP) form. Attendance and engagement data only sync when registration goes through Wistia's own form.
- Enable the custom-fields option on the HubSpot integration if you want the
wistia_*contact properties (see Contact properties). In the HubSpot connect settings this is the checkbox labeled "For Webinars: 17 new properties will be added to the Contact object in your Hubspot instance" — it's on by default. This toggle gates the properties only; the timeline activities below are not gated by it.
Availability
Webinar data in HubSpot is scoped by when the webinar was created — there is no backfill for older events:
- Attendee analytics in general only exists for webinars created on or after January 22, 2025. A webinar created before that date has no attendee-level data to sync, regardless of the integration.
- Registration and attendance timeline activities apply to webinars created on or after January 6, 2026 (when timeline events for webinars launched). Earlier webinars don't get registration/attendance activities even if they have attendee analytics.
- Poll-response and Q&A timeline activities shipped earlier (spring 2025); the exact event-created rule for those two isn't documented here yet.
When data is sent
Wistia does not stream webinar activity to HubSpot in real time. Sync happens at two moments:
- Registration syncs when someone registers, through the registration pipeline.
- Attendance, poll responses, and Q&A questions are sent together after the event ends, as a single batch built from Wistia's post-event attendee data. There is one attendance activity per attendee, plus one activity for each of that attendee's poll responses and questions, all delivered in the same contact sync.
Both live and prerecorded webinars follow the same post-event attendance path — the batch runs once the event's recording is ready.
Every sync requires an email. HubSpot contact sync is keyed on the contact's email address. If an attendee has no associated email (anonymous attendance, or a poll answered without a captured email), the sync fails before any activity is written — nothing reaches HubSpot for that person. See On-demand and anonymous viewing below.
Timeline activities
Each activity is a HubSpot timeline event with a fixed event template and a set of tokens. nil values are dropped, so a contact only receives the tokens that have data.
Registration
Sent when a viewer registers for the webinar.
| Token | Source |
|---|---|
email_address | Registration email |
first_name, last_name | Registrant name |
phone_number | Phone |
job_title | Job title |
company | Company |
live_event_name | Webinar title |
eventUrl | Audience join link |
country, ipCountry, ipRegion, ipCity | IP-based location |
utmCampaign, utmMedium, utmSource | UTM parameters from the registration visit |
referrer | Referrer URL |
A HubSpot user token (hubspot_utk) is attached when the registration carries one, so HubSpot can stitch the activity to a known visitor.
Attendance
Sent after the event, one per attendee. The activity is associated with the attendee's unique identifier.
| Token | Source |
|---|---|
emailAddress | Attendee identifier |
eventName | Webinar title |
eventUrl | Event URL |
eventId | Wistia's internal attendance event ID |
ipCountry, ipRegion, ipCity | IP-based location |
utmCampaign, utmMedium, utmSource | UTM parameters |
referrer | Referrer URL |
watched | Engagement rate for the session |
timeWatched | Time watched |
chats | Number of chat messages sent |
pollResponsesCount | Number of poll responses |
externalLinkClicks | Clicks on links/annotations during the event |
Poll response
One activity per poll a viewer answered, associated with the attendee's email.
| Token | Source |
|---|---|
name | Webinar title |
type | Always Live Event |
question | Poll question text |
answer | The option the viewer chose |
url | Webinar URL |
Q&A question
One activity per question a viewer asked, associated with the attendee's email.
| Token | Source |
|---|---|
name | Webinar title |
type | Always Live Event |
question | The question text |
url | Webinar URL |
There is no answer token on a Q&A activity — it records the question a viewer asked, not any answer given.
Contact properties
Alongside the timeline activities, Wistia updates properties directly on the HubSpot contact so you can segment and personalize on the latest values.
Standard properties map straightforwardly: registration writes email, firstname, lastname, phone, company, jobtitle, and country; attendance updates the contact keyed on email.
Wistia webinar properties (prefixed wistia_) are written only when the custom-fields option is enabled on the integration (see Prerequisites), and only for webinars created on or after December 2, 2024. Older events do not receive them.
| Property | Written on | Value |
|---|---|---|
wistia_last_utm_campaign / _source / _medium | Registration + attendance | Latest UTM values |
wistia_last_referrer | Registration + attendance | Latest referrer |
wistia_last_ip_country / _region / _city | Registration + attendance | Latest IP location |
wistia_visitor_key | Registration + attendance | Wistia visitor key |
wistia_live_last_registered | Registration | Registration time |
wistia_live_last_registered_event_name | Registration | Webinar title |
wistia_live_last_attended | Attendance | Attendance time |
wistia_live_last_attended_event_name | Attendance | Webinar title |
wistia_last_engagement | Attendance | Engagement as a percentage |
wistia_last_played_time | Attendance | Time watched, in whole minutes |
wistia_live_last_poll_response_count | Attendance | Poll responses this event |
wistia_live_last_chat_count | Attendance | Chat messages this event |
wistia_live_last_link_click_count | Attendance | Link clicks this event |
Watch the units. On the contact property,
wistia_last_engagementis a percentage andwistia_last_played_timeis whole minutes. On the attendance timeline activity,watchedandtimeWatchedcarry the raw values (engagement as a fraction, time watched unconverted). If you build reports off both, don't assume they're in the same units.
Registration and attendance also add the contact to the configured HubSpot list (a registrant list and an attendee list, respectively), and — when HubSpot Marketing Events are enabled — submit the matching Marketing Event status (register on registration, attend on attendance).
On-demand and anonymous viewing
Two common questions:
- Do on-demand / VOD replay views sync to HubSpot? No. Attendance is a one-time batch built from the live event's attendee data after the event ends. Watching the recording on demand afterward does not generate a new attendance, poll, or Q&A activity, and does not update the webinar contact properties. There is no per-view tracking path for on-demand webinar viewing.
- What about anonymous viewers? Nothing syncs without an email. Because contact sync is keyed on email, an attendee (or poll response) with no captured email is dropped before any activity is written.
No "did not attend" activity (current behavior). As of today, Wistia sends registration and attendance activities, but there is no did-not-attend / no-show activity for HubSpot. This page will need revision when did-not-attend sync ships.
If you need engagement data for on-demand views, that lives in Wistia's standard media analytics, not the webinar → HubSpot pipeline documented here.
Updated 1 day ago