WooCommerce plugin + GA4 Measurement Protocol, EU-hosted

GA4 server-side tracking for WooCommerce

A WordPress plugin that sends your WooCommerce funnel to the GA4 Measurement Protocol from your server, with the same client_id and session_id as the browser. It reads the order through HPOS when your store uses custom order tables, and it detects product grids on block themes, where most tracking plugins stop seeing anything.

The problem

What a WordPress stack loses on the way to GA4

WooCommerce tracking usually rides on the front-end: a tag in the theme, a listener on a button. Both assumptions broke when WordPress moved to block themes and WooCommerce moved to HPOS.

Block themes broke the selectors

The product grid of a modern WordPress theme is a block, not the old markup with a data-product_id on an add-to-cart button. Plugins that scrape the DOM see an empty page and report nothing, on a store that is selling fine.

HPOS moved the orders

With High-Performance Order Storage, orders no longer live in wp_posts. Any integration that reads the legacy tables sees a store with no sales, and fails quietly rather than loudly.

A plugin conflict is enough to lose the day

A cache plugin, a consent plugin, an optimiser that defers JavaScript: any of them can stop the browser event. The order is still in WooCommerce, GA4 never hears of it.

The fix

Read the order where WooCommerce actually keeps it

The plugin hooks the order lifecycle through the WooCommerce API rather than the database, so HPOS and the legacy tables behave the same. The purchase is sent from your server, with the browser session attached.

HPOS declared, both storages supported

Custom order tables compatibility is declared, and the plugin reads orders through the WooCommerce API. Switching your store to HPOS changes nothing for your tracking.

Block and classic themes both detected

Product grids are recognised on block themes as well as on classic ones, with a data attribute convention as an escape hatch when a theme is truly exotic.

A retry queue, and a panel that shows it

A failed delivery is queued and replayed rather than lost, and the Activity panel in your WordPress admin shows what left, what failed and why, without leaving the site.

Setup

Three steps, and GA4 starts receiving

  1. Install the connector

    A WordPress plugin installed from the admin, with a retry queue and an Activity panel so you can see what left and what did not.

  2. Paste your connection key

    One key from your DataFirefly console identifies the site. It is the only thing your shop holds: no destination credential ever lives in your store.

  3. Add GA4 as a destination

    Your GA4 settings go into the console, stored encrypted on our side. Rotating them later touches nothing in the shop.

The same connector feeds every other destination from the same events, so GA4 is a starting point rather than a silo. See the WooCommerce connector in detail or Google Analytics 4 across all platforms.

Same connector

Your other destinations from WooCommerce

One installation, one key. The events you already send reach every destination you switch on.

Pricing

Included in every plan, free plan included

10,000 events a month free, no card. Paid plans from 39 €/month when your volume grows. Every destination is included in every plan: GA4 is never an add-on.

FAQ

Frequently asked questions: WooCommerce and GA4

Is the plugin compatible with HPOS?

Yes, compatibility with custom order tables is declared, and the plugin reads orders through the WooCommerce API rather than touching wp_posts. Enabling or disabling HPOS on your store changes nothing for your tracking.

Does it work with block themes?

Yes. Product grids are detected on block themes as well as on the classic markup. If your theme is unusual, a data-df-* attribute convention lets you name the products explicitly rather than hoping a selector matches.

Why do my WooCommerce events land in Unassigned in GA4?

Because they reach GA4 without a session_id, so they open a session of their own with no source. The plugin forwards the client_id and session_id read from the GA4 cookies with every server event, which puts the purchase back in the session that produced it.

Will it conflict with my existing GA4 plugin?

It can, if both send the purchase. Our plugin splits the funnel: the browser layer keeps engagement, the server owns the conversion. Disable the purchase event of your other plugin, or let ours handle the whole funnel.

What happens if GA4 is unreachable when an order comes in?

The event goes to a retry queue and is replayed. A passing outage costs you nothing, and the Activity panel shows the queue rather than leaving you to guess.

Does it respect consent plugins?

Yes. The plugin reads the consent state exposed by the usual WordPress consent APIs and gates both layers on it, and the dispatcher checks again before anything leaves for Google. Events are processed in the EU and a DPA is available.

Measure the WooCommerce orders your theme hides

Install the plugin, paste one key, connect GA4. Block theme or classic, HPOS or not, the order is read where WooCommerce keeps it.