Case study 17 · Business systems and integrations
HubSpot forms built to match the rest of the site
We moved a Swedish SaaS company's marketing site onto HubSpot CMS and built the custom forms it had been told were not possible, with tracking intact.
in production since 2023
Existing site migrated to HubSpot CMS
The story in 5 steps
Stack
- HubSpot CMS
- HubL
- JavaScript
- CSS
01 · Context
The client sells behavioral code analysis to engineering teams, so its website is its primary sales channel.
The client sells behavioral code analysis to engineering teams, so its website is its primary sales channel. We moved the existing site onto HubSpot CMS and rebuilt it from reusable modules.
For the client, the main result is that the marketing team now changes headlines and copy, and adds fields, without a developer or a deploy.
I was brought in specifically for the forms, after the client had been told they could not be built the way it wanted them.
02 · Could not change
Adding a HubSpot form is easy until someone wants it to look like the rest of the site.
Adding a HubSpot form is easy until someone wants it to look like the rest of the site.
HubSpot's embedded form comes with its own markup and styling, and deeper customization is limited and brittle. The alternative is to build the form yourself against the API. That gives you the design, but everything else becomes your job: validation, error states, hidden fields, conditional logic, bot protection, and the detail most people miss, passing the tracking cookie with every submission.
Without the tracking cookie the form still works, but it is worthless to marketing, because no submission can be attributed to the visit that produced it.
03 · What I did
I built the pages as HubL templates and modules, with a library of reusable blocks that every page is assembled from.
I built the pages as HubL templates and modules, with a library of reusable blocks that every page is assembled from. Building each page from scratch would have turned a migration of dozens of pages into dozens of one-off templates that nobody could maintain afterward.
I set up the fields so the marketing team edits content directly: headlines, descriptions and new fields. On a B2B site where messaging is tested constantly and campaigns launch on their own schedule, whether a change takes two minutes or needs a ticket and a wait sets the pace for the whole marketing team.
I built the purchase and contact forms fully custom against the HubSpot API, with the tracking cookie passed on every submission, so attribution still works.
04 · Result
Existing site migrated to HubSpot CMS, in production since 2023
- Existing site migrated to HubSpot CMS, in production since 2023
- The marketing team edits content without a developer or a deploy
- Custom-designed purchase and contact forms, with tracking preserved
05 · Differently
The custom forms solved the design problem and created a maintenance one: every future change in how the CRM expects submissions is now our problem rather than the platform's.
The custom forms solved the design problem and created a maintenance one: every future change in how the CRM expects submissions is now our problem rather than the platform's. If I did it again, I would write that trade-off down for the client and hand it over with the forms.
Related services
The services that draw on this work.
- How we can workApp takeover and launchWe moved a Swedish SaaS company’s marketing site onto HubSpot CMS, a platform someone else had already chosen, and built the custom forms the client had been told were not possible.
- Web developmentHubSpot CMS developmentThe marketing site of a Swedish SaaS company, moved onto HubSpot CMS and rebuilt as a library of reusable modules. It has been in production since 2023.
- Backend, data and integrationsERP, CRM and third-party integrationsCustom purchase and contact forms for a Swedish SaaS company, built against the HubSpot API. Each submission passes on the tracking cookie, so marketing can attribute it to the visit that produced it.
Case study 17
Working on a similar problem? We reply within one business day.
The first call takes 30 minutes, and you’re under no obligation.