GTM Kit Premium 1.6: bid on profit, and tell new customers from returning ones
GTM Kit Premium 1.6.0 is about the quality of the signal you hand to your ad platforms. Until now a purchase told them one thing about its worth: how much money changed hands. This release adds two more. What the order actually earned you, and whether the person who placed it had bought from you before.
Both are computed on your server, stamped on the order when it is placed, and sent with the server-side event. Neither is a guess.
Profit instead of turnover
Revenue is a poor optimisation target when your margins vary. A campaign that sells high-margin products at a ROAS of 4 is worth more than one selling low-margin products at a ROAS of 6, and bidding on revenue cannot tell the difference.
GTM Kit Premium now works out each order’s gross profit and sends it with the order. The calculation starts from your WooCommerce cost prices, which WooCommerce has carried in core since 10.3, and subtracts a cost model you configure: payment fees as a percentage plus a fixed amount, shipping cost as either a flat figure or a percentage of shipping revenue, and packaging and handling. Products with no cost price fall back to a default margin you set.
Three things about how this is built are worth knowing before you switch it on.
- Every cost field starts at zero. GTM Kit does not guess your payment rates or your shipping costs, because a plausible guess produces a plausible profit figure that is wrong, and nothing about it looks wrong. An order with no cost data behind it carries no profit at all rather than a number assembled from defaults.
- The settings screen tells you how much of your catalogue has a cost price. An incomplete profit figure is a visible problem instead of a silent one.
- Profit goes to your server container only, unless you decide otherwise. Anything on the data layer is readable by anyone who opens the page source, competitors included. There is a setting to expose profit on the browser purchase event as well, off by default, and the settings screen says plainly what it costs you.
The figure travels as gross_profit, with margin_pct alongside it, as a flat field on the server-side event. Your container decides what to do with it. To bid on profit, point a Google Ads conversion tag at gross_profit as its conversion value, or map it to a GA4 custom metric to report on it. Nothing changes in your bidding until you do that, and we recommend running a profit conversion action as a secondary action for a couple of weeks before promoting it, because your targets need re-baselining: a ROAS of 5 is roughly a POAS of 1.5, and switching without adjusting will look like a collapse.
If you run a headless storefront, a read-only REST endpoint returns the same stored figure the server-side event reports, so both sides agree on what an order earned.
New and returning customers
Every order now reports whether it came from a new or a returning customer, on the browser purchase event and on every server-side order and refund event.
The answer is worked out once, when the order is placed, and stored on the order. A resent or retried event says the same thing as the original, which matters more than it sounds: a signal that changes between the first send and the retry is worse than no signal.
Matching is by account first, and for guests by the billing email they checked out with, counting only orders that were actually paid.
In your Google Ads server tags, new customer reporting is switched off by default, because until this release the plugin did not send the data the option needs. If you want new-customer acquisition goals to use this signal, enable that option on the conversion tag and set its source to event data. Note that Google’s option also asks for a customer lifetime value, which GTM Kit does not send: this release reports the new-versus-returning flag only, deliberately, so no customer’s spending history ends up in a tag payload.
An important change to new_customer
If you already use new_customer in your bidding, read this one.
The value used to come from WooCommerce Analytics. On any store that has never run the WooCommerce Analytics import, that source reports every single customer as new, which is not a subtle inaccuracy. GTM Kit now computes the value itself, on the definition described above, and the computed value replaces the one from Analytics.
For most stores this is a correction. But if a bidding strategy has been feeding on the old value, its new-customer segment will shift once, shortly after you update. That is the correction arriving, not a fault, and it settles.
Recovered purchases keep their traffic source
When a purchase does not confirm in the browser, GTM Kit Premium can send it from your server instead so the sale is not lost. Since 1.5.0 that recovered purchase has carried the visit’s identity.
It now keeps the visit’s source and campaign as well, on one condition: the Google Analytics client in your server container needs “Migrate from JavaScript Managed Client ID” enabled. Containers generated by the Template Assistant from 2 September 2026 onwards have it on already. Older containers do not, and their recovered purchases show a traffic source of (not set).
The fix is one checkbox. Open the Google Analytics client in your server container, expand More Settings, and tick it. Or re-import your container template from the Template Assistant, which brings it in along with everything else current. This applies whichever advertising platform your container was generated for. The server-side purchase webhook explains what to check afterwards.
Conversions remember where the visit started
Orders and form entries now record the page the visitor actually arrived on and the site that sent them, instead of being overwritten by the last page they viewed before converting.
The old behaviour reported the checkout page as the conversion’s page location and, for a visitor who arrived directly, recorded your own site as the referrer. Both are now the entry page and the real referrer for that visit. When a new campaign brings someone back, the pair is recorded afresh, so it always describes the visit the campaign belongs to.
Smaller things
Event names such as purchase and add_to_cart are now marked as literal values in the settings screens. On translated sites some of these names were being translated, which made the settings disagree with the events GTM Kit actually sends.
Under the hood, licence checking and integration start-up were consolidated into one place, so every feature answers the same question the same way. No site behaves differently for it.
Upgrade notes
- Profit tracking is off until you fill in your cost model. Nothing is sent, and no conversion value changes, until you configure it and map
gross_profitin your container. - Browser exposure of profit is off by default and should stay off unless you have a specific reason.
new_customerchanges definition in this release. If you bid on it, expect the segment to shift once. See the section above.- If your server container was generated before 2 September 2026, tick “Migrate from JavaScript Managed Client ID” on its Google Analytics client, or re-import the template, so recovered purchases keep their traffic source.
- No minimum-core change: GTM Kit Premium 1.6.0 requires GTM Kit 2.18.1 or later, as in 1.5.0.