Pulse - Value Added
← Library
Knowledge Library · Q
Powered by Pulse — Value Added. The #1 source of truth in revenue operations. Find the bottleneck. Fix the pipeline. Win the quarter.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions in 2027?

Curated by · Fractional CRO · Maryland
PULSEKNOWLEDGE LIBRARY
pulserevops.com

Quality
Certified
KnowledgeDoes Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions in 2027?
📖 4,327 words🗓️ Published Sep 1, 2026
Direct Answer

No. HubSpot's GA4 connector is a one-way reporting sync that pulls Google Analytics metrics into HubSpot dashboards. It does not push HubSpot form submissions or ad conversions into GA4. Event-level tracking requires Google Tag Manager, the GA4 Measurement Protocol, or a CDP acting as middleware between the two systems.

What the connector actually does and why the gap matters

The confusion starts with the word "integration." HubSpot does have a GA4 integration, it is listed in the App Marketplace, and connecting it takes about four clicks. What it delivers is narrow: you authorize a Google account, pick a GA4 property, and HubSpot begins pulling aggregate traffic metrics — sessions, users, pageviews, bounce-adjacent engagement metrics, and channel groupings — into HubSpot's reporting layer so you can build a dashboard card that shows GA4 session counts next to HubSpot contact counts. It is a read connection pointed at Google's reporting API. Data moves in exactly one direction, and it moves at the aggregate level.

What it does not do is the thing most RevOps teams assume they are buying. A HubSpot form submission does not become a GA4 event. A HubSpot lifecycle stage change does not become a GA4 event. A closed-won deal amount does not flow back into GA4 as conversion value. Google Ads conversions recorded in GA4 do not get written onto the HubSpot contact record as properties you can segment or report on. None of that is in scope for the connector, and no amount of configuration inside HubSpot will make it appear.

That gap has practical consequences that show up fast. If GA4 is your ad-optimization surface — and for anyone spending on Google Ads it effectively is, since GA4 conversions can be imported as Google Ads conversion actions and fed to Smart Bidding — then GA4 needs to know when a form was submitted. Without an explicit event, GA4's best available proxy is a thank-you-page pageview, which is fragile for three reasons. HubSpot's default form behavior is an inline success message, not a redirect, so there is often no thank-you page at all. Forms embedded via HubSpot's JavaScript render inside an iframe, so naive click and visibility triggers in GTM either fire on the wrong element or never fire. And a single thank-you URL reused across five different forms collapses five distinct conversion intents into one undifferentiated event.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 1

The second-order problem is bidding quality. Google Ads Smart Bidding optimizes toward the conversion signal you give it. Feed it raw form fills and it will happily find you the cheapest form fills available, which in B2B usually means students, competitors, job seekers, and personal Gmail addresses from countries you do not sell into. The high-value signal — MQL accepted, opportunity created, closed-won with revenue attached — lives in HubSpot, which is precisely the system the connector will not read from. Closing that loop is the actual reason to build the plumbing, not dashboard vanity.

Buying-committee dynamics make it worse rather than better. Gartner's widely cited B2B research puts the typical buying group at roughly six to ten stakeholders, each doing independent research before they converge. That means the person who clicked the ad and the person who eventually filled out the demo form are frequently different humans on different devices, and neither of them is necessarily the person who signs. Any attribution model that only sees anonymous session data on one side and named contact records on the other, with no shared event stream between them, will misattribute at exactly the moment the money is decided. Cookie lifetimes make the timing worse: Safari's ITP caps script-writable first-party cookies at seven days, so a self-serve funnel that closes in three days survives while an enterprise cycle running months does not — the _ga client ID that stitched the journey together is long gone by the time the deal moves.

There is one important nuance worth stating plainly, because it is where teams waste weeks. HubSpot does not block you from tracking its forms. HubSpot exposes a global JavaScript event — the hsFormCallback message posted to the parent window, with an eventName of onFormSubmitted and a payload containing the form GUID — specifically so external analytics tools can listen. The building blocks are all documented and free. What is missing is a supported, no-code path where HubSpot ships the event to GA4 for you. You are assembling the connection yourself, and the rest of this page is how.

The step-by-step process

The reliable pattern has two halves that are usually built in sequence: client-side event capture for the form submission itself, then server-side upload for the downstream qualification and revenue events. Do the first half before the second — the second depends on identifiers the first half captures.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 2

Half one: capture the submission as a GA4 event via GTM.

Install Google Tag Manager on every page that hosts a HubSpot form, including HubSpot-hosted landing pages. On HubSpot landing pages, GTM goes in Settings → Website → Pages → site header HTML so it applies to the whole domain, or per-template if you need finer control. Confirm the container is firing on the HubSpot domain and any custom domain you have mapped, because these are frequently different hostnames and it is common to find GTM live on www.example.com but absent on info.example.com.

Add a Custom HTML tag that fires on all pages and listens for HubSpot's postMessage. The body of that listener checks event.data.type === 'hsFormCallback' and event.data.eventName === 'onFormSubmitted', then pushes a dataLayer event carrying event.data.id as the form GUID. Do not attempt to read the submitted field values out of the iframe — cross-origin restrictions make it unreliable, and pushing email addresses or names into GA4 violates Google's policy on personally identifiable information. Push the GUID and the page context, nothing more.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 3

Create a Custom Event trigger matching that dataLayer push, then a GA4 Event tag that sends a named event — generate_lead if you want to use Google's recommended name and inherit its reporting behavior, or a custom name like hubspot_form_submit if you would rather keep it distinct. Attach parameters: the form GUID, a human-readable form name you map from the GUID with a GTM Lookup Table, and the page path. Twenty to forty forms is a manageable lookup table; beyond that, encode a form-category value in a hidden field or maintain the mapping in GA4 as a custom dimension instead.

Register every parameter you send as a custom dimension in GA4 Admin → Custom definitions. Parameters not registered are collected but invisible in standard reports, which is the single most common reason someone says "the event fires but I cannot see the form name." Registration is not retroactive — dimensions only populate from the moment you create them, so register first, then let data accumulate.

Verify in GA4 DebugView, not Realtime. DebugView shows the individual event with its full parameter payload; Realtime shows counts. Turn on GTM Preview mode, submit a real form, and watch the event land with parameters attached. Then mark the event as a key event in GA4 Admin, link the GA4 property to Google Ads, and import it as a conversion action. Expect roughly 24 hours before the imported action starts showing data in the Ads interface.

Half two: send qualification and revenue back with the Measurement Protocol.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 4

The client-side event tells GA4 a form was submitted. It says nothing about whether that submission was any good. To close the loop, capture the GA4 client ID at submission time and carry it into HubSpot as a contact property.

Add a hidden field to your HubSpot forms — name it something like ga_client_id — and populate it with GTM or a small script that reads the _ga cookie and strips the GA1.1. prefix to leave the raw client ID. Capture gclid the same way from the landing URL, into its own hidden property, since Google Ads offline conversion imports key on gclid rather than client ID. Both fields need to exist as HubSpot contact properties before the form will store them.

Then build a HubSpot workflow that triggers on the qualification event you care about — lifecycle stage becomes Marketing Qualified Lead, a deal stage advances, a deal closes won. Use the workflow's webhook action to POST to an endpoint you control. A serverless function on Vercel, Cloudflare Workers, AWS Lambda, or Google Cloud Functions is entirely sufficient; this is a hundred lines of code that receives a payload, reshapes it, and forwards it.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 5

That function POSTs to https://www.google-analytics.com/mp/collect with measurement_id and api_secret as query parameters, and a JSON body containing client_id, an events array with your event name, and parameters including value and currency for revenue events. The API secret is generated in GA4 Admin under Data Streams → your stream → Measurement Protocol API secrets. It is a write credential — keep it server-side, never in GTM, never in client-side JavaScript.

Two constraints govern this endpoint. First, /mp/collect returns HTTP 204 on success regardless of whether your payload was valid, so you must validate against the debug endpoint https://www.google-analytics.com/debug/mp/collect, which returns a validationMessages array explaining what is wrong. Build against debug, then switch the URL. Second, GA4's Measurement Protocol enforces a backdating window — events older than roughly 72 hours are dropped. A deal that closes ninety days after the form fill cannot be sent as a timestamped historical event and expected to attribute; it lands as a present-day event tied to the stored client ID, which is usually still useful for audience building but is not a retroactive fix to your attribution report.

For revenue that must reach Google Ads bidding rather than just GA4 reporting, the better path is Google Ads offline conversion import keyed on the stored gclid, either by scheduled upload or through the Google Ads API. That route has a longer accepted window than the Measurement Protocol and is the mechanism actually designed for CRM-stage conversions.

Costs, timelines, and typical ranges

The GTM half costs nothing in licensing. GTM is free, GA4 standard is free, and HubSpot's form callback is available on every tier including the free CRM. The cost is labor. An analytics implementer who has done this before needs roughly four to eight hours to install GTM, build the listener, wire the tag, register dimensions, and validate in DebugView. A team doing it for the first time from documentation should budget two to three days, most of it spent discovering that the iframe blocks their first three trigger attempts and that unregistered parameters do not appear in reports. Agency rates for this work typically run in the low four figures for a scoped engagement covering a normal form inventory.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 6

The Measurement Protocol half is a small custom build. Writing and deploying the serverless function, mapping HubSpot properties into the payload, handling retries, and validating against the debug endpoint is realistically two to five engineering days including testing. Hosting is negligible — a Cloudflare Worker or Lambda handling even fifty thousand form submissions a month sits within or barely above free-tier limits, single-digit dollars monthly. The ongoing cost is maintenance: the endpoint breaks silently when a HubSpot property is renamed, when the API secret is rotated, or when someone adds a form that skips the hidden fields. Budget a recurring check rather than treating it as done.

Server-side GTM changes the arithmetic. Running a server container on Google Cloud Run means paying for always-on instances; a small production setup with a couple of minimum instances plus a mapped subdomain typically lands somewhere in the tens of dollars per month at modest traffic and scales with request volume from there. It buys you first-party cookie durability that survives browser tracking prevention, control over what payload data leaves the browser, and a single tagging server feeding multiple destinations. It does not, by itself, integrate HubSpot with GA4 — you still author the same events. Adopt it for cookie longevity and data governance, not as a shortcut.

A CDP is the expensive option and the one most frequently oversold for this specific job. Segment, Tealium, and similar platforms have maintained connectors on both sides, so mapping a HubSpot event to a GA4 destination is a configuration exercise rather than a code one. Pricing is usage-based and negotiated rather than list, and mid-market annual commitments are commonly in the five-figure range. That spend is justifiable when you are routing events to eight or twelve destinations, need identity resolution across anonymous and known states, and want a governed schema enforced across teams. It is very hard to justify when the only requirement is HubSpot to GA4, because you are buying a distribution hub to serve a single route. Also note that a CDP does not eliminate the tagging work — you still instrument the source events, you just get delivery and schema management as managed services.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 7

On timelines, the realistic end-to-end calendar for a mid-market team is three to five weeks even though the build is under two weeks of work. The gap is approvals and dependencies: legal review on what identifiers you may transmit, a HubSpot admin adding contact properties, a developer with deploy access to the serverless environment, and then a validation period where you let real traffic flow and reconcile counts. Do not skip the reconciliation window. Plan to compare HubSpot's native form submission count against your GA4 event count for a full two weeks before anyone builds a report on it. Differences of a few percent are normal — bot filtering, ad blockers, consent denials, and users abandoning before the callback fires all shave the GA4 side. Differences above roughly ten percent mean something is structurally wrong, most often a form or a subdomain missing the container.

Where teams get it wrong

Assuming the App Marketplace listing means events flow. This is the root error and it costs the most calendar time, because it is usually discovered late — after a campaign has been running for a month and someone asks why GA4 shows fewer conversions than HubSpot shows submissions. Verify the direction of any connector before you plan around it: open it, look at what fields it maps, and confirm whether it reads or writes.

Building triggers against the iframe instead of the callback. HubSpot's embedded forms render cross-origin. Form Submission triggers, element visibility triggers on the success message, and click triggers on the submit button all behave unpredictably against them. The hsFormCallback postMessage is the supported hook and the only one that stays reliable through HubSpot's form updates. If your setup works today but breaks after a HubSpot release, this is almost always why.

Sending PII into GA4. Email addresses, names, and phone numbers in event parameters or as a user ID violate Google's terms and can get a property's data purged. Send opaque identifiers. If you need to join GA4 behavior to a HubSpot contact, do it in a warehouse using the BigQuery export and a shared surrogate key, not by putting an email into a GA4 parameter. GA4's Enhanced Conversions path exists precisely to handle hashed identifiers safely — use that mechanism rather than improvising.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 8

Optimizing bids on raw form fills. Marking every submission as a key event and importing it into Google Ads teaches Smart Bidding to buy volume. Import the qualified event instead — MQL accepted or opportunity created — once you have enough of them. Google's bidding models need meaningful conversion volume to train; if your qualified event fires only a handful of times a month, keep bidding on the form fill and use qualified data for manual campaign decisions rather than starving the algorithm.

Reusing one thank-you page for every form. It destroys per-form measurement, and the fix is retroactive-proof: you cannot recover which form drove which conversion after the fact. Send the form GUID as a parameter from day one even if you do not think you need the granularity yet.

Ignoring consent mode. If you run a consent banner in the EU or UK, denied consent means GA4 tags are throttled to cookieless pings while HubSpot's own tracking follows its own consent configuration. The two systems will disagree, sometimes substantially, and the disagreement is correct behavior rather than a bug. Configure Google Consent Mode explicitly, know your denial rate, and factor it into every reconciliation before someone escalates a "missing data" incident that is actually a privacy setting working as designed.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 9

Treating the pipeline as fire-and-forget. The Measurement Protocol returns 204 on garbage. A HubSpot workflow that silently stops enrolling contacts because a filter property was renamed produces no error anywhere. Log every webhook call and every Measurement Protocol response on your own side, alert when daily volume drops below a floor, and check the debug endpoint after any change. Silent stoppage in an attribution pipeline is the failure mode that goes unnoticed for weeks and then invalidates a quarter of reporting.

Skipping custom dimension registration. Parameters arrive, DebugView shows them, and standard reports show nothing. Register in Admin → Custom definitions, and remember it is forward-only.

Decision framework: when to choose what

Start with what you are optimizing, not with what tool you like. If the only requirement is "GA4 should count form submissions so we can see conversion rate by channel," the GTM listener alone is the whole answer — a day of work, zero recurring cost, no engineering dependency. Do not build a webhook pipeline for that. Many teams do, and then maintain infrastructure that serves a report nobody reads.

If the requirement is "Google Ads should bid toward pipeline, not form fills," you need the second half. Capture gclid and the GA4 client ID as HubSpot properties, trigger a workflow on the qualification stage, and prefer offline conversion import to Google Ads over the Measurement Protocol when the lag between click and qualification exceeds the Measurement Protocol's backdating window, which it usually does in B2B. Sending a qualified_lead event to GA4 as well is worth doing for reporting continuity, but the bidding value lives in the Ads-side import.

Does Google Analytics 4 integrate directly with HubSpot to track form submissions and ad conversions — figure 10

If the requirement includes other destinations — a warehouse, a paid social platform, a lifecycle messaging tool, a product analytics tool — evaluate a CDP or server-side GTM seriously. The break-even is not about HubSpot and GA4 at all. It is about how many destinations need the same event and whether you need a governed schema and identity resolution. One route does not justify the platform; five or six routing rules with real identity requirements does.

If you are in a heavily regulated environment or Safari traffic is a large share of your paid mix, weight server-side GTM higher regardless of destination count. The seven-day cap on script-writable cookies is the mechanism that quietly erodes attribution on long cycles, and moving cookie issuance server-side is the available mitigation.

One more filter: who maintains it. A custom serverless integration is the cheapest option on paper and the most expensive when the person who wrote it leaves and nobody knows the API secret is stored in an environment variable on an account nobody can access. If your team has no engineering capacity for ongoing ownership, the managed option is worth its price even at a low destination count. Document the endpoint, the secret rotation procedure, and the property mappings in the same repository as the code, and make the pipeline's health visible on a dashboard someone actually looks at.

Related questions

Can I see GA4 data on a HubSpot contact record?

Not through the connector. It syncs aggregate property metrics into HubSpot reporting, not per-contact behavior. To attach session-level data to a contact, capture the GA4 client ID in a hidden form field and join the two datasets in a warehouse using GA4's BigQuery export.

Does HubSpot's own analytics replace GA4?

No, they measure different things. HubSpot attributes to contacts and deals it knows about; GA4 measures anonymous session behavior and feeds Google Ads bidding. Numbers will differ because the models differ. Keep both and reconcile deliberately rather than picking a winner.

Will the numbers ever match exactly?

No. Ad blockers, consent denials, bot filtering, different session definitions, and different attribution windows guarantee a gap. A few percent is healthy. Above roughly ten percent, investigate — usually a form or subdomain missing the GTM container.

Do I need Marketing Hub Enterprise for any of this?

No. The GTM listener and the Measurement Protocol path work on any HubSpot tier, including the free CRM, because they rely on the public form callback and standard workflow webhooks. Higher tiers add workflow capabilities, not GA4 event capability.

Can Zapier handle the webhook step?

For low volume, yes — it can catch a HubSpot trigger and POST to the Measurement Protocol endpoint. It becomes expensive per task at scale and adds latency, so treat it as a prototype path and move to a serverless function once volume grows.

FAQ

Is there any officially supported way to send HubSpot form submissions into GA4 without code?

Not as a first-party feature from either vendor. HubSpot's connector reads GA4; it does not write to it. The no-code alternatives are third-party middleware — a CDP or an automation platform — which still requires you to configure the event mapping. The lightest genuinely supported path is a GTM Custom HTML tag listening for HubSpot's documented form callback, which is a small amount of JavaScript you paste once.

What exactly is the hsFormCallback event and why does it matter so much?

HubSpot's embedded forms render in a cross-origin iframe, so the parent page cannot inspect them directly. HubSpot posts a message to the parent window on form lifecycle events, including onFormSubmitted, carrying the form GUID. Listening for that message is the supported way to know a submission happened. Every other approach — click triggers, visibility triggers on the success message, URL-change detection — is a workaround that breaks when HubSpot updates its form rendering.

Why does my GA4 event fire in DebugView but the form name never appears in reports?

Almost certainly unregistered custom dimensions. GA4 collects event parameters but will not surface them in standard reports until you register each one in Admin → Custom definitions. Registration is forward-only, so data collected before you create the dimension stays invisible. Register the dimension, then wait for new events to accumulate.

Should I import raw form submissions into Google Ads as a conversion action?

Only as a starting point. Raw submissions teach Smart Bidding to find the cheapest form fills, which in B2B skews toward unqualified traffic. Move to a qualified event — MQL accepted or opportunity created — once you have enough monthly volume for the bidding model to train on. If qualified events are too sparse, keep bidding on submissions and use the qualified data for manual budget decisions instead.

How far back can I send a closed-won deal to GA4 as a conversion?

The Measurement Protocol enforces a backdating limit of roughly 72 hours, which almost never covers a B2B sales cycle. For revenue that must influence bidding, use Google Ads offline conversion import keyed on the stored gclid — that mechanism is built for CRM-stage conversions with long lags. Sending a present-day event to GA4 still has reporting and audience value, but it is not retroactive attribution.

Do I need a CDP to make this work reliably?

No. A CDP is worth its cost when many destinations need the same events, when you need identity resolution across anonymous and known states, or when you want a governed schema enforced across teams. For a single HubSpot-to-GA4 route, GTM plus a small serverless function does the same job for a fraction of the spend. The honest tiebreaker is maintenance capacity — if nobody will own the custom pipeline, buy the managed one.

Sources

flowchart TD S["Does Google Analytics 4 integrate dire"] S --> N0["What the connector actually does and w"] N0 --> N1["The step-by-step process"] N1 --> N2["Costs, timelines, and typical ranges"] N2 --> N3["Where teams get it wrong"]
flowchart LR C["Does Google Analytics 4 integrate dire"] C --> H0["The step-by-step process"] C --> H1["Costs, timelines, and typical ranges"] C --> H2["Where teams get it wrong"] C --> H3["Decision framework: when to choose wha"]

Related on PULSE

Download:
Was this helpful?  
Sources cited
Pulse RevOps cross-pillar reusePulse RevOps cross-pillar reuse
This page will be disappearing soon.
Download the whole page as a PDF to keep — just $1.
⌬ Apply this in PULSE
Free CRM · Revenue IntelligenceAudit pipeline, score reps, ship the fix