90 Seconds · May 2026 · GTM · GA4 · PostHog · HubSpot
Web Attribution.
Built the full attribution stack for 90 Seconds from zero. Every visitor identified, tracked and tied to a contact in HubSpot.
GTM → GA4
SPA page views tracked
PostHog
visitor identified at form submit
HubSpot
contact synced end-to-end
The problem.
When I joined 90 Seconds, we had no reliable way to know where pipeline came from. The site had some tracking in place, but it was inconsistent: pixels firing twice, SPA navigation not registering as page views, form submissions not connecting an anonymous visitor to a HubSpot contact.
That made attribution guesswork. We were investing in paid, SEO, email and events, and could not say with confidence what was working. Going into go-live on the new React site, this had to be fixed properly.
The approach.
I built the attribution stack end-to-end. I scoped, designed and shipped it.
- GTM container. Set up the container from scratch. Moved the runtime config out of environment variables and into a
system_settingstable with an admin UI, so tracking IDs could be updated without a deploy. - SPA page view tracking. The new site is a React single-page app. Without explicit instrumentation, GA4 only sees the initial load. I wired route-change events to push
page_viewto the dataLayer on every navigation, so GA4 sees the full journey. - PostHog identify. On every HubSpot form submission, I fire a PostHog
identifycall with the submitter's email. That stitches the anonymous visitor session to a known person, so PostHog's person timeline becomes a real attribution record from first click to form fill. - Pixel audit. Found and removed a double-firing pixel that had been inflating event counts. Deduplication matters more than adding more tags.
- HubSpot sync. Confirmed the form-to-contact flow was clean, with submissions creating or updating contacts in HubSpot with correct attribution fields.
The outcome.
We launched the new 90seconds.com with a clean, end-to-end attribution stack. Visitors are tracked across the full SPA journey in GA4. Form submitters are identified in PostHog and tied to HubSpot contacts. Channel and campaign data flows through consistently.
For the first time, we can look at a deal in HubSpot and trace it back through the marketing touchpoints that influenced it. That is what attribution is supposed to do.