← Back to changelog

GTM Kit Premium 1.4.0

Free

GTM Kit Premium 1.4.0 is about one shared server-side container doing more work with less wiring. If you run a single sGTM container across several sites, or you want standard GA4, Meta CAPI and Google Ads tags to just work with GTM Kit’s webhook traffic, this release removes the manual steps that used to stand in the way. It also makes purchase revenue count once, not twice, when the same order arrives from both the browser and the server.

One shared server container, one GA4 property per site

Agencies and multi-site owners have long pointed a single server-side container at many WordPress sites, then hand-rolled per-site routing with the gtmkit_webhook_payload filter. The new Server-side GA4 measurement ID setting (WooCommerce settings, under Server-side webhooks) makes that a first-class option.

Set a measurement ID on each site and every webhook that site sends (purchase, order-status, refund, subscription, and Preview test sends) carries its own destination. The routing travels with the event, so adding a site means filling in one field, not editing the shared container. Leave the field empty and that site keeps using the measurement ID configured in the container itself, exactly as before.

Using this setting means re-importing the updated server container template once, so the container reads the destination from the incoming event. After that, onboarding a new site needs no container work at all.

Standard tags work with no mapping variables

GTM Kit’s server-side webhook has always delivered a GA4-shaped payload, but the ecommerce, cookie, attribution and consent values sat inside nested objects. Standard sGTM endpoint tags read their parameters from the flat Event Data model, so implementers had to build a mapping variable for nearly every parameter on every tag.

Webhook events now also carry those values as flat top-level fields, alongside the original nested objects. Standard GA4, Meta CAPI and Google Ads tags in your server container pick them up through default parameter inheritance, with no per-parameter mapping variable and no GTM template to import. The nested objects stay in place, so anything already reading them keeps working. The same set of endpoint tags can now serve both your browser GA4 traffic and GTM Kit’s webhook traffic.

Purchases count once in a shared container

When the same order reaches a shared server container from both the browser and the webhook, revenue can be counted twice. 1.4.0 fixes that at the source: every purchase now carries a stable, transaction-based event_id on both the browser event and the server-side webhook. Because both sides use the same ID, your GA4 tag deduplicates the order instead of double-counting it, and a retried webhook stays idempotent rather than adding a second sale.

You can turn the flat fields and purchase deduplication on or off with a single setting (on by default). If several stores share one container, an optional event_id prefix (defaulting to your site name) keeps their IDs from colliding.

Cleaner server-side debugging in Preview

While an sGTM Preview/Debug session is active, server-side webhook events now carry GA4’s debug signal, the same one browser debug traffic carries. It is scoped to the Preview session and never marks normal traffic, so you can watch webhook events in the container’s Preview panel without touching a live setup.

One caveat worth stating plainly: GA4’s DebugView does not reliably list purely server-originated events, even with the debug signal attached. Verify webhook delivery in the server container’s Preview/Debug panel and in GA4 Realtime, not in DebugView.

Developer notes

  • The flat top-level fields are additive. They are set only when absent and never overwrite an existing value, the nested ecommerce, cookies, attribution and consent objects are preserved, and the gtmkit_webhook_payload filter still runs last, so any override you already have keeps winning.
  • If you previously hand-built flat aliases (in a Data Client template patch or through gtmkit_webhook_payload), you can retire that once you have confirmed parity with the built-in behaviour.
  • Purchase deduplication uses a transaction-based event_id on both the browser and the webhook. Deploying only one side does not deduplicate; both halves ship together here, so the default behaviour is correct out of the box.

Upgrade notes

  • The flat Event Data fields and purchase deduplication are on by default and require no container or template changes. Nothing in your existing container breaks.
  • The per-site GA4 measurement ID setting is opt-in. To use it, re-import the updated server container template once so the container reads the destination from the incoming event. Sites that leave the field empty are unaffected.
  • No minimum-core change in this release.