HubSpot integration

Lead source in HubSpot.

HubSpot says “Paid Search.” Capture the actual source and page journey on every form.

Works with all HubSpot form types No workflows or Operations Hub required Free to start · no card
Where HubSpot loses the source

Why HubSpot’s Lead Source field is often wrong, and how to fix it

HubSpot has two source properties. Original Source records a contact’s earliest tracked visit; Latest Source is overwritten on every new session. Many reports default to Latest Source, so a lead who first arrived from Paid Search but later returns via a bookmark is recorded as Direct, and the original source is lost.

HubSpot files a visit as Direct whenever it cannot see where it came from. Per HubSpot’s own documentation, that happens when:

HubSpot says
Original Source: Direct
Lead Source says
Google Ads · Local Services Sydney · /managed-it
  • the referring site uses HTTPS but yours does not, so the referrer is dropped;
  • Safari on iOS 18.7+ strips utm_source, utm_medium and gclid from the URL before HubSpot’s script can read them;
  • a visitor declines the cookie banner, or the form sits on a page without the HubSpot tracking code;
  • the click came from an app, message, or email that carried no referrer.

The result: a share of your “Paid Search” and “Organic” leads quietly land in Direct, and your reporting under-credits the channels that are actually working.

How Lead Source fixes it: one snippet captures the real source, campaign and full page journey on every form submission. Every lead lands in your Lead Source dashboard named, carrying the source HubSpot could not see. Your HubSpot fields are untouched, because nothing is written back into them.

Why lead sources get mislabelled in the first place →

Works with every HubSpot form type.

HubSpot forms, pop-ups, embedded forms and standalone landing pages are all captured, on any HubSpot tier. Nothing to configure inside HubSpot. No Operations Hub, no workflows.

The HubSpot Original Source problem

Nine values for everything you spend on marketing.

HubSpot’s built-in Original Source is a high-level bucket. It’s the right answer for “how did this contact first find us, in general?” It’s the wrong answer for “which of my Google Ads campaigns produced this customer?”

What HubSpot Original Source shows
What Lead Source shows
Paid Search
Google Ads · Local Services Sydney · managed-it-sydney-exact
Organic Search
Organic Google · “managed it services sydney” · /managed-it
Social Media
LinkedIn · Sponsored Post: 5 ways to cut IT costs
Direct Traffic
Direct · landed /pricing · full page journey captured
Email Marketing
Email · April newsletter · cta: book a call

Original Source tells you a category. Lead Source tells you which specific source produced a customer. Which is what you need to make a budget decision. For the property itself, see what HubSpot Original Source is, and to read its sub-properties, the Original Source drill-down.

How it actually works

One snippet on your site. Every HubSpot form captured.

  1. 01
    Lead Source captures the visitor’s real source, campaign, and page journey when they land. Before HubSpot’s tracking code even sees them. UTMs, referrer, ad click ID, landing page.
  2. 02
    When someone submits a HubSpot form, Lead Source hears HubSpot’s own submission event and records the fields alongside the source it already captured.
  3. 03
    The lead lands in your Lead Source dashboard named, with the real source, the landing page and the pages they read before the form.
  4. 04
    From there it goes wherever you want. Zapier writes the lead and its source into HubSpot, onto whatever property you choose, or point a webhook at your own endpoint.
Lead Source lead record showing the real source, page journey, and contact details for a named lead
The snippet

One line, before the closing </head>.

Done in five minutes.

<script async src="https://app.leadsource.co/ft.js" data-site="YOUR_SITE_KEY"></script>

One line in your site header. That is the whole install. Lead Source finds the forms on the page by itself, including HubSpot’s, and including forms you add later.

Three-step install
01

Add the snippet to your site

Paste the script tag above before the closing </head> on any page that has a HubSpot form. If your site is built in HubSpot CMS, drop it in Settings › Website › Pages › Site Header HTML.

02

Submit a test form

Submit one of your own forms with a UTM in the URL, for example ?utm_source=google&utm_campaign=test.

03

Check your dashboard

The lead appears in your Lead Source dashboard within seconds, named, with the real source attached.

Common questions

Questions, answered.

Straight answers on the property, the schema, and what happens to Original Source.

Doesn't HubSpot already track lead source?

HubSpot tracks Original Source. A high-level bucket like "Paid Search" or "Direct Traffic." Useful for general reporting. Not useful for deciding whether to keep funding a specific Google Ads campaign. Lead Source adds the source-level detail HubSpot doesn't capture by default.

Will this overwrite HubSpot's Original Source field?

No. Lead Source never writes to HubSpot, so nothing of yours can be overwritten. Original Source stays exactly as HubSpot recorded it, and the real source lives alongside it in your Lead Source dashboard.

Do I need Operations Hub or Marketing Hub Professional?

No. Capture happens on your website, not inside HubSpot, so it works the same on Free, Starter, Professional and Enterprise. No workflows, no data sync, no paid tier.

Can I get the source into a HubSpot property?

Yes, through Zapier. Lead Source fires when a lead is captured, and Zapier's HubSpot action writes the fields you pick onto the contact. You choose the property and map it once.

Does the source survive contact merges and lifecycle changes?

Yes, because it does not live in HubSpot. The lead record sits in Lead Source, so merges, lifecycle changes and rep edits on the HubSpot side cannot touch it.

See your real HubSpot lead sources.

Free. Five-minute install. No credit card.

Start free

Free to start ยท no card