The short version

Most webinar platforms host the registration page on their own domain, then send the real join link inside a confirmation email that people click days later, straight from their inbox or calendar app. Neither hop carries your UTM parameters. By the time the registrant or attendee record syncs to your CRM, there is no source left to write down, and most CRMs default that blank field to Direct. The fix is the same pattern that works for Calendly bookings: capture the source before the visitor ever reaches the platform's page, and relay it through as a custom field instead of hoping the join link remembers it.

Why webinar platforms quietly drop your lead source

Zoom Webinars, GoToWebinar, Livestorm, and WebinarJam all work the same way at the point that matters: the registration form usually lives on the platform's own domain, not yours. An ad, a LinkedIn post, or an email links straight to a zoom.us or gotowebinar.com registration page, and the moment a visitor clicks through, they leave your site entirely, taking whatever UTM parameters and first-party cookies your own tracking would have captured with them. Append UTMs to that link and a few platforms will store them on the registrant record, but most only surface them in a manual CSV export, not in the API payload your CRM's native integration actually reads.

Registration is also only half the sync. Attendance gets recorded separately, when someone actually joins on the day of the event, and by then the registrant is clicking a join link sitting in a confirmation email, a reminder email, or a calendar invite they added right after signing up. None of those carry a referrer or a query string tied to the original campaign. If your CRM integration writes lead source at the attendance step instead of the registration step, or overwrites it there, the correct source you had a chance to capture at signup gets replaced with Direct, blank, or an unhelpful catch-all like "Webinar."

Why this breaks more than one report

A webinar is usually a deliberate, budgeted content investment, so it is exactly the kind of channel marketing needs to point to directly in a pipeline report. When every registrant and attendee rolls up under Direct, that report cannot show which campaign filled the room, which is the same overwrite-and-erase failure covered in why your leads show up as "Direct". It gets worse because registration and attendance sync at different times: a lead can carry a correct source right after they register, then have it silently overwritten once the attendance webhook fires days later, so the CRM ends up less accurate after the event than it was before it.

How to fix webinar attribution

None of this requires switching webinar platforms. It requires catching the source before the registration page ever loads, and making sure nothing downstream is allowed to overwrite it.

  1. Capture the source before the visitor clicks through to register. Read UTM parameters and click IDs off the URL the moment they land on your site, before they ever reach the platform's registration page.
  2. Store it in a first-party cookie, not the URL. A short script that writes utm_source, utm_campaign, and any click IDs to a cookie means the data survives even if the visitor browses your site for a while before registering.
  3. Use an embeddable or API-based registration form instead of the platform's hosted page. Zoom, GoToWebinar, Livestorm, and WebinarJam all support registering people through your own site or via API, which keeps the visitor on your domain long enough for the cookie to travel with them.
  4. Pass the captured values as custom registration fields. Read the source back out of the cookie and submit it as hidden custom fields on the registration form, so it rides along on the registrant record itself instead of depending on a link that gets clicked days later.
  5. Map those custom fields explicitly in your CRM integration. Whether you sync through a native connector or Zapier, set lead source from the custom fields on the registration payload, not from whatever the attendance webhook sends afterward.
  6. Lock lead source after first write. Configure the CRM field so the attendance sync can update engagement data without touching a source that registration already set correctly.
  7. Audit what your last few webinars already sent you. Pull recent registrant and attendee records and check how many already landed as Direct or got overwritten after the event, so you know how much history to distrust.

Platform-hosted registration vs. embedded registration with a source relay

The registration experience looks identical to the attendee either way. What differs is whether the source survives long enough to reach your CRM.

AspectPlatform-hosted registration linkEmbedded registration + source relay
Where the visitor registersRedirected away to the platform's own domainStays on your site through registration
What happens to UTM tags on clickLeft behind the moment the visitor leaves your domainCaptured into a cookie before the click happens
What the attendance sync can overwriteA source that was already missing or wrongNothing, source is locked after registration
What your CRM records on the registrantDirect, blank, or a generic "Webinar" sourceThe original campaign, ad, and source
Setup effortNone, it is the defaultOne embed or API change plus a small capture script, done once

Your webinar attribution checklist

Before you trust the source on another registrant or attendee record, run through this.

  • ☐ You register attendees through an embedded or API-based form on your own site, not a bare link to the platform's hosted registration page.
  • ☐ UTM parameters and click IDs are captured into a cookie on page load, not read only at the moment of registration.
  • ☐ The captured source is submitted as a custom field on the registration payload, not left for the platform to infer.
  • ☐ Your CRM integration maps lead source from the registration payload's custom fields, not from the attendance webhook.
  • ☐ Lead source is locked after its first write, so the day-of attendance sync cannot overwrite it.
  • ☐ You have sampled recent webinar registrants to see how many already landed as Direct or got overwritten post-event.

Where to start

If Direct is already your largest lead source, webinars are a common, under-checked reason why. It is the same overwrite problem covered in why your leads show up as "Direct", and it shows up for the same reason Calendly bookings do in why Calendly bookings show up as Direct traffic: a third-party tool hosting the interaction breaks the chain between the click and the CRM record.

Run the free attribution audit to see how many of your existing webinar registrants, and the rest of your lead sources, are already unreliable before you touch a single registration setting.

Webinar Attribution FAQ

Why do webinar registrants show up as Direct traffic in my CRM?

Most webinar platforms host the registration page on their own domain, so the visitor leaves your site before your tracking script ever captures the UTM parameters on the URL. When the registrant record syncs to your CRM with no source attached, most systems default that blank field to Direct.

Does Zoom or GoToWebinar's native CRM integration pass UTM data automatically?

Not by default. Some platforms store UTM parameters on the registrant record if they were present on the registration URL, but that data usually only surfaces in a manual export, not in the API payload most native CRM integrations read. You have to map it explicitly as a custom field for it to reach your CRM.

Why does a registrant's source change to Direct after they attend, even though it was correct at signup?

Attendance syncs separately from registration, usually when the CRM integration processes the day-of join event. If that integration writes lead source at the attendance step instead of only updating engagement fields, it can overwrite a source that registration already captured correctly. Lock the source field after its first write to stop this.

Do I need to switch webinar platforms to fix this?

No. Zoom, GoToWebinar, Livestorm, and WebinarJam all support embeddable or API-based registration that keeps visitors on your domain long enough to capture their source, and all of them support custom registrant fields you can use to relay it. The fix is in how you register people, not which platform you use.