On this page
- What actually needs to connect
- Installing the tracking code correctly
- The realistic ways to connect a custom website
- Lifecycle stage and deal creation, set up deliberately
- Meeting booking on your own site
- What to keep on your own site versus hosted by HubSpot
- Data hygiene and duplicate contacts
- Consent and tracking cookies
- What to check after go-live
- Where a managed setup earns its keep
Before any of this gets technical, it's worth being clear about the goal: your website needs to hand a small, well-defined set of information to HubSpot, reliably, without creating duplicate records or breaking the story of where a lead came from. That's the whole job. Everything below is about doing that job well, not about replatforming your site onto HubSpot or replacing a CRM you already rely on.
What actually needs to connect
Most businesses only need a handful of things to flow from the website into HubSpot. It helps to name them before picking any tool or method:
- Form submissions, mapped to the right contact properties, not just dumped into a generic notes field.
- A contact record that gets created or updated, not duplicated, when the same person submits more than once.
- A lifecycle stage that moves in a way your sales team actually trusts, whether set automatically on contact creation or manually by a rep.
- A deal, when the form or the follow-up conversation indicates real sales interest, associated with the right contact and company.
- Meeting bookings, if your process depends on prospects scheduling time directly rather than waiting for a callback.
- Enough tracking to see which page, source, or campaign a contact came from, so marketing reporting means something.
Notice that none of this requires your website to run on HubSpot's own content platform. It requires your website to load a tracking script, submit form data in a way HubSpot can read, and (optionally) expose a scheduling link. That's a connection, not a migration.
Installing the tracking code correctly
HubSpot's tracking code is a JavaScript snippet, copied from Settings > Tracking & Analytics > Tracking Code, that should load on every page template, not just the homepage. It identifies visitors using a token stored in the hubspotutk cookie in the browser, and it exposes methods for identifying a visitor by email, tracking page views and custom events, checking privacy consent status, and honoring do-not-track requests, all pushed through the _hsq array HubSpot documents for the tracking code API.
Source: HubSpot Developers: Tracking code API, visitor identification and available methods
- WordPress: the official HubSpot plugin installs the snippet and adds forms, chat and tracking to the WordPress dashboard.
- Webflow, Next.js, React or plain HTML: paste or render the snippet in the global layout or footer so it loads on every route, once.
- Google Tag Manager: add it as a custom HTML tag firing on all pages if a single team manages every script from one place.
- Whichever route you choose, register every domain and subdomain your site actually uses (including a booking or checkout subdomain) in the tracking settings, or HubSpot will not associate those page views with a contact.
The realistic ways to connect a custom website
There isn't one correct method. There are three production-ready options, and the right one depends on how your forms are already built and how much developer time you have available.
| Method | How it works | Best for | Trade-off |
|---|---|---|---|
| Native plugin or form-vendor integration | A CMS plugin or form tool with a built-in HubSpot connection maps fields for you | Sites on WordPress or a form vendor HubSpot already supports | Less control over validation and custom field logic than a hand-built form |
| Non-HubSpot forms setting | HubSpot's tracking code scans the page for a plain HTML <form> tag and records submissions once the setting is turned on | Existing HTML forms you don't want to rebuild | Only works on static forms wrapped in a real <form> tag, not ones intercepted entirely by JavaScript before submission |
| Forms API or CRM Contacts API | A developer submits form data to HubSpot directly, with full control over fields and validation | Custom-built forms, server-side validation, or design that a native embed can't match | Attribution depends on passing the visitor's hubspotutk cookie value and page context yourself; skip it and the contact is still created but without the source history |
Source: HubSpot Knowledge Base: Use non-HubSpot forms, requirements and tracking dependency
Lifecycle stage and deal creation, set up deliberately
HubSpot can automatically set a contact's or company's lifecycle stage when a new record is created, and it can update that stage when a deal is created and associated with the contact or company, all configured under the object's Lifecycle Stage settings rather than left to guesswork inside a workflow. Decide, before launch, which form submissions should count as a lead versus a marketing-qualified contact, and whether a deal should be created automatically from a form or only after a rep reviews the submission. Automatic deal creation from every form fills a pipeline with noise; a manual review step, or a workflow with a filter on form type, usually reflects reality better.
Source: HubSpot Knowledge Base: Automatically set and sync record lifecycle stages
Meeting booking on your own site
If your process depends on prospects booking time directly, HubSpot's scheduling widget can be embedded on an external page with a copy-paste embed code from the Meetings tool, available to users with Sales or Service access. On a HubSpot-hosted page, the same widget is available as a module, but that only applies to pages HubSpot itself hosts, not to your externally built site.
Source: HubSpot Knowledge Base: Embed the scheduling widget on a page
What to keep on your own site versus hosted by HubSpot
A common and reasonable split: keep your marketing site, blog and landing pages on the platform you already control (WordPress, Webflow, a custom build), and use HubSpot for what it's genuinely good at, which is the CRM, email, workflows and reporting behind the scenes. Moving your entire site onto HubSpot's CMS is a real option for some businesses, but it's a separate decision from connecting HubSpot as a CRM, and it isn't required to get accurate contact, lifecycle and attribution data. Summit's own approach is to work with whatever CRM a client already runs, HubSpot included, rather than requiring a switch.
Data hygiene and duplicate contacts
HubSpot automatically deduplicates contacts by email address: a new form submission with a matching email updates the existing contact rather than creating a second one, and a manual attempt to create a contact with a duplicate email is blocked outright. Duplicates still happen, usually from imports, from a contact using a second email address, or from an integration writing records without checking for an existing match first. HubSpot's duplicate management tool compares records daily and lets you merge or reject potential duplicates, though bulk duplicate management and higher duplicate-pair limits require a Data Hub Professional or Enterprise subscription; the basic duplicates manager and individual merges are available more broadly.
- Check the duplicates dashboard monthly for the first quarter after any integration change, not just at launch.
- Standardize how any third-party form or automation writes the email field, since inconsistent formatting is a common source of near-duplicates that automatic matching misses.
- Before merging, confirm which record has the activity history you want to keep. Merges cannot be undone.
Source: HubSpot Knowledge Base: Deduplicate records in HubSpot
Source: HubSpot Knowledge Base: Review and manage duplicate records
Consent and tracking cookies
If your visitors are in the EU or other jurisdictions with cookie consent requirements, HubSpot's consent banner tools can show a cookie policy and let visitors opt in or out of tracking, on both HubSpot-hosted pages and external pages carrying the tracking code. If a visitor rejects non-essential cookies, the tracking script can still load, but it will not set the identifiers needed to tie page views to an individual contact; HubSpot's own documentation is explicit that this affects source and behavioral attribution, and that legal compliance advice should come from your own counsel, not from the existence of the banner tool itself.
Source: HubSpot Developers: Consent banner API, impact of rejected cookies on tracking
Source: HubSpot Knowledge Base: Consent banner frequently asked questions
What to check after go-live
- 01Submit a real test form on every form template and confirm a contact appears in HubSpot with the correct source, not an offline or unattributed value.
- 02Confirm every domain and subdomain the site touches, including booking or checkout subdomains, is registered in the tracking settings.
- 03Watch the form spam or non-HubSpot forms log for the first week; an unregistered helper domain is the most common reason a legitimate submission gets flagged.
- 04Check the lifecycle stage on a handful of new contacts against what your sales team expects to see.
- 05Review the duplicates dashboard after the first real week of traffic, and again a month later.
- 06If cookie consent is required for any visitor segment, confirm the banner actually blocks tracking cookies until consent is given, on a fresh incognito session.
Where a managed setup earns its keep
None of the failures above are dramatic on their own. A missing domain, a stage that never updates, a duplicate contact skimming the pipeline report, they show up weeks later as a gap nobody notices until the numbers look thinner than they should. Summit connects a client's website to the CRM they already use, HubSpot or otherwise, and checks the connection on an ongoing basis as the site and the marketing stack around it keep changing.
We connect a client's website to the CRM they already run, HubSpot included. We don't ask anyone to switch CRMs to work with us.
See how the membership works