Throttle + Google Analytics 4

Send Throttle purchases to Google Analytics 4 from the browser and server-side via the Measurement Protocol, with deduplication and UTM attribution.

What the integration does

Every completed order becomes a GA4 purchase event with the order id as transaction_id, the line items, total, and currency. How it gets there depends on how you take payment:

CheckoutHow the purchase reaches GA4
Hosted checkoutThrottle loads gtag.js on the checkout page, accepts cross-domain linking from your site, and fires purchase just before the buyer is redirected back
Embedded checkoutThe completion event hands your page the total, currency, and line items, so your own gtag fires purchase with no extra request
Server-sideThrottle sends purchase through the GA4 Measurement Protocol — card payments at capture, invoice orders when the invoice is issued

When server-side sending is on, the hosted page skips its browser event, so the purchase isn’t counted twice.

Attribution that survives checkout

Throttle records a clientContext on each order: UTM parameters, Google Ads click ids (gclid), the GA client and session ids, landing page, referrer, and consent. It’s captured when the checkout session is created and stored on the order, so server-side events stay tied to the visit that produced them — and the same data arrives in your order.created webhook for any other tool.

Setting it up

In the dashboard, open your application’s Tracking settings and enter:

  • your GA4 Measurement ID (G-…),
  • a Measurement Protocol API secret, if you want server-side events — it’s stored server-side and never shown again in full,
  • whether events require consent.

Then add checkout.usethrottle.dev to your GA4 cross-domain linking. Settings are per application and per environment, so test traffic can point at a separate property.

Good to know

  • purchase is the conversion event Throttle sends. GA4’s own page views load on the hosted page; funnel events such as begin_checkout are not sent.
  • With Require consent on — the default — nothing fires unless consent is granted on the session.
  • Subscription renewals are not forwarded as purchases.
  • Server-side sends are best-effort and aren’t retried.