How we solved “offline sources” problem in HubSpot and fixed our attribution

Attribution is the holy grail of marketing. Gone are the days when people agreed to statements like these –  

But again, Rome was not built in a day. Neither is CRM attribution. Attribution in digital marketing is a foundation stone. If done incorrectly, it can lead you down a spiral hole. We faced a similar challenge few months back with Hubspot. The issue was simple – we were getting leads but the data discrepancy was killing us.

We had over 8 sources being put into action – organic, paid, social, Email, Referral and then there was the offline source.

People who have used Hubspot must be aware of the 8 different types of “Sources” against your contacts (‘leads’ in our case). In case of Hubspot, an additional channel is added to the performance report, “Offline sources”.


Let me give you a quick overview of what offline source is?

Contacts first added to HubSpot via a list import, CRM integration (including Salesforce), or an API will appear with an original source type of Offline Source.

To drill it down one more level we have started examining the “original source drill-1/2”, in our case it was API > contacts-upsert.

A contact may fall into this category, due to any of the following reasons: 

Hypothesis 1: “Shooting in the dark”

Yes, you read it right. Practically that’s what we have started with 😀

Our team started with filling Signup-forms from all possible web pages and testing the signup source. To ensure there was no duplicacy, this was done by clearing cache & cookies. Every time :D.

Well, that was one hell of an exercise. And believe me, the findings were random. For instance, at first the contact created from one page gets marked as an offline source, while the next time it was “direct”. Not conclusive enough to find out the issue. Moving to phase 2.

Hypothesis 2: “Knock on every door” – Testing Hubspot Form Integration on CTA –

We started testing the possibility of a flawed form level integration with CTA buttons. Result – Nothing found.

Hypothesis 3: “In the right track”

In between all this testing & exchanging emails with the HubSpot team (kudos to the top-notch support) we figured that something much more fundamental was missing. So we went back literally to the starting point of the user journey – Page Load.

When a user lands on a webpage, the Hubspot pixel creates a distinct cookie on the browser. Given that the cookie has been added, all the remaining actions of user are tracked and then added to the CRM for future reference. However, if the cookie is missing or the pixel hasn’t been loaded, user action data will be lost.

The key here is that the pixel needs to be loaded in the header section so that the Hubspot cookie gets added immediately.

Creation of the cookie takes about a second. Now if the Hubspot pixel is placed in the footer and the user enters his/her email id before the web page is fully loaded, the user’s source would be tagged as offline sources.

As you can see in this snippet “hubspotutk” is in place, so there is no possibility of this contact falling in the offline source bucket. And this is how we fixed our attribution problem.

If you come across this kind of issue, feel free to reach out at