Trakero
Integrationavailable

Server-side tracking from your Google Tag Manager dataLayer

Most themes, plugins and agencies already fill the dataLayer for GA4. Add one Custom HTML tag in Google Tag Manager and every one of those events also goes out from a first-party server, where ad blockers and Safari can't stop it.

GTM dataLayerBrowser SDKTrakerodedup · hash · retryMeta CAPITikTokGA4

Illustration of the event flow

What you get

One tag

A single Custom HTML tag on All Pages loads the SDK with dataLayer: true. No triggers or variables per event.

GA4 format, both styles

Reads dataLayer.push({ event, ecommerce }) and gtag('event', …) calls: view_item, add_to_cart, remove_from_cart, view_cart, begin_checkout, add_payment_info, purchase, generate_lead, sign_up, login and search.

No double purchases

A purchase becomes event purchase_{transaction_id}: the same id your server or WooCommerce plugin sends, so they merge into one. A purchase pushed twice on reload is sent once.

Earlier pushes included

Events pushed before the SDK finishes loading are read too, so the first page's view_item isn't lost.

Where browser-only tracking loses the sale

Pick a situation your shoppers are in and watch one order take both paths.

yourstore.com/checkout/thanksuBlock Origin · 3 requests bloOrder #10231Red dress × 2 · ৳2,580✓ confirmed · CODPlace order123456789🍪_fbc · 7-day cap✕ tab closed🖥️Your store's serverorder.status → paid✕ad blockerTrakeromerge · hash · dedupMeta · via PixelblockedMeta · via CAPI202 · delivered once

A shopper from your Facebook ad places an order.

✕ Browser Pixel: blocked✓ Trakero: delivered once

Illustration of what happens on shoppers' devices, not a measurement.

Set up in minutes

  1. 1In Tag Manager, add a tag of type Custom HTML with the snippet from Developers → Install, and add dataLayer:true to its init options.
  2. 2Set the trigger to Initialization - All Pages (or All Pages) and publish the container.
  3. 3Place an order and open the Debugger: the purchase shows source browser with your transaction id as the order id.
  4. 4Also send the order from your server (plugin or SDK) with the same order id, for purchases that ad blockers would stop.

Questions

Do I need a server-side GTM container?+

No. Trakero is the server. You don't need to host or pay for a separate server container.

What if my purchase push has no transaction_id?+

It isn't sent from the dataLayer, because it couldn't be matched with the server copy. Add transaction_id (your order number) to the push.

I already call trakero() in my theme. Should I turn this on?+

No: keep one of the two, or you would send each event twice.

Platform rules from Google: Measure ecommerce (Tag Manager).

Works together with