Hubspot Changed Original Traffic Source Unexpectedly

Hi,

In an attempt to improve attribution we implemented a new user registration workflow.

On our pages we have a “try it free” button to register for a trial. We’ve set this button up to pop up a form requiring the email from the user in the hopes that since this will all occur on the same page with the URL containing the UTM parameters we will have better attribution. Upon submission of the email they are re-directed to our primary registration page which contains an iframe (I know, not ideal) of the non-hubspot form that captures all the rest of the data.

As they progress through the non-hubspot form each button click (Next, to move to the next “page” of the form) we submit a custom event to track progress through the form and finally upon completion we utilize Hubspots form scrapping AND submit the results to an actual Hubspot form via the Hubspot Form API (we were testing out if we got better attribution results with the form API and it appears safe to layer them, at least nothing broke as far as we can tell).

So far in our testing this appears to be working quite well, however we aren’t quite sold on the UX of this approach and we wanted to explore that idea of just directing the user to our primary registration page and when they first submit their email in the first step of the form we would call the Form API to submit that entry along with the hubspot utk and original page uri (we record these in a first party cookie). I was testing this out in the following steps:

  1. Go to registration page with UTM parameters.
  2. Enter email, hit next.
  3. In Python fire a form submission with the extracted hubspot utk and pageuri.
  4. Complete registration like normal.

In my initial tests everything was great, all the data was captured and the attribution worked. Until around 20 minutes later Hubspot updated the original traffic source to Direct Traffic.

What gives!?

I’ve seen in some google searching that Hubspot can change the original traffic source:

FROM AI:
HubSpot will automatically update the Original Source of a contact retroactively if they submit a form and match with an earlier, previously anonymous tracking cookie

I wouldn’t have expected situation to apply since the form submission via api is what created the contact, and I assumed this basically mimicked the behavior of have the form pop up from the try it free button.

However, I’m wondering if the presence of the custom event is mucking up the works? When I submit the email, the custom event fires and is Hubspot retaining that somewhere, so later one when its processing everything it connects that custom event to this user and because it happened in the iframe it views it as direct traffic that custom event had no access to the url parameters.

Any insight would be so greatly appreciated as this will likely determine if we can pursue this path or need to stick with the email form pop up.

Hey @MJohnson59,

Thanks so much for posting in the Community!

I’d like to tag in some Community experts to see what insight they might have on why your testing phase would have produced the results you expected, only to update shortly thereafter. @SteveHTM, @stefen, and @karstenkoehler - are any of you aware of whether or not this is expected behavior, despite the contact being created via the form submission via API?

Hi @MJohnson59,

The original source properties are traffic source properties and meant to track how contacts first interact with your business. If the HubSpot cookie isn’t detecting any any utm parameters when it’s first set, then this first interaction is direct traffic – and as far as I know, this is expected behavior. There isn’t any way to change this.

Similarly, if a contact visits your website from paid search, accepts cookies, you then import them, they are first labeled as offline. If they later submit a form, they would be relabeled as paid search, since that paid search touch point happened earlier than the import, even if it was processed later.

The traffic source properties aren’t meant to track the first meaningful interaction (since it’s up to interpretation and context what meaningful is), they track the strictly first one.

If the tracking parameters are there when someone first visits your website, what you’re trying to achieve is still happening. If they aren’t there when someone first visits your website, then they shouldn’t be categorized as having had those utm parameters.

By the way, if you’re interested to see what created a contact, the record source properties would be a better fit: View and use record source properties

Hope this helps!

Adding to Karsten’s already solid answer, the conversion event should still have captured the utm values into the Latest Source, Latest Source Drill-down 1 and Latest Source Drill-down 2 properties that can be used for attribution reporting or analysis.

If you’d like to capture more values for attribution or use in reports (more than the latest value and look at historical ones), consider either shuffling this data to another format (depending on which tier and hubs you have access to: add a note/timeline event or track property changes, export property history) to use the insight in reports.

Also consider adding hidden form fields to capture the utm variables on their own:

  • utm_medium (found in Latest source if you don’t capture this way)
  • utm_source (found in Latest source Drill-Down 1 also)
  • utm_campaign (found in Latest source Drill-Down 2 also)
  • utm_id
  • utm_content
  • utm_term

(if all of these are regularly in use, otherwise pick the ones you usually employ). Create as single-line text and internal name matching the format above, add to form and set to hidden if the form is visible externally.

I suspect you’d need to include the utm values explicitly in the payload for forms API to populate the utm fields (not the latest source ones, those are via the analytics code & cookie combination). If it is a HubSpot hosted form or 3rd party form that collects submissions based on the tracking code, it will auto-populate the utm fields from the URL query parameter.

Hopefully using the latest source and a combination of methods to look at historical data you can get more information for attribution reporting at least.

Let us know how it goes :sun: