GA4 server-side tracking, without the Unassigned problem
Send your store's events to the GA4 Measurement Protocol from the server, not from the browser: stitched onto the browser session with the same client_id and session_id, so they keep their real source instead of landing in Unassigned. No custom Measurement Protocol script to write yourself, no GTM server container to configure: one connection key, and the same event also reaches Meta CAPI, Google Ads, TikTok, Pinterest and Microsoft Advertising.
Your measurement ID and API secret stay encrypted on our side: you never paste them into your store.
What is GA4 server-side tracking?
GA4 server-side tracking sends your events from your own server to the Measurement Protocol, the server-to-server interface of Google Analytics 4. Instead of asking the visitor's browser to report a purchase, your server sends the event directly. The request leaves your infrastructure, so an ad-blocker or a browser cookie policy has nothing to intercept.
The Unassigned trap
This is what most server-side GA4 setups get wrong, and it is easy to miss because nothing looks broken. GA4 attributes by SESSION. A Measurement Protocol event sent without a session_id opens a brand-new session with no source, and GA4 files the revenue under Unassigned. The conversions are real; they have simply lost their channel. You end up unable to tell which campaign paid for them.
client_id and session_id are what keep the channel
The browser and the server send the same client_id and the same session_id, read from the GA4 cookies. The server event then joins the session the browser already labelled with its real source and medium, instead of opening a sourceless one.
Server-side does not mean consent-free
Moving a tag to the server changes where the request comes from, not whether you need permission to send it. Analytics consent still applies, and we enforce it on both layers.
Looking for the wider picture rather than GA4 specifically? Read what server-side tracking is and how it works.
Why GA4 alone under-reports your revenue
The GA4 tag runs in the customer's browser: the one place in the chain you don't control, and the place under the most pressure.
-
Ad-blockers
stop the tag from loading on the order confirmation page: the purchase is simply never recorded in GA4.
-
Safari ITP and browser cookie limits
shorten or delete the
_gacookie GA4 uses to recognise a returning visitor, so one person is counted as several. -
Sessions without a source
are what a naive server-side setup produces: the events arrive, but GA4 cannot tell where they came from.
The result is not just a reporting gap. Every channel decision you make, every budget you move, rests on what GA4 tells you converted. Under-reported or unattributed revenue means the report is answering a different question from the one you are asking.
A managed GA4 connection, without the plumbing
Install the connector for your platform, or call our API directly, and every funnel step is mirrored server-side to the Measurement Protocol, stitched onto the browser session and gated on consent.
Events that survive the browser
The server-side purchase is delivered from your infrastructure. When the browser tag is blocked, that event is the one GA4 receives.
Session stitching handled for you
The connector reads the GA4 cookies and forwards client_id
(client_id and session_id, so the server event joins the right session with the right source.
Richer user data
The server event can carry the hashed email, phone and address from the order, the inputs behind user-provided data/cross-device reporting, which the browser rarely holds at conversion time.
Nothing lost in transit
A retry queue replays retryable delivery failures automatically, so a brief outage on either side doesn't cost you an event.
Consent enforced twice
The browser layer injects nothing without consent, and the dispatcher applies a second check before anything reaches GA4.
Secret never in your store
Your measurement ID and Measurement Protocol API secret are encrypted on our side. A compromised store front-end can't leak them.
Inspector to prove it works
Every event and its per-destination status is visible in the Inspector, so you can confirm delivery to GA4 rather than assume it.
One event, six destinations
The same event also reaches Meta CAPI, Google Ads, TikTok, Pinterest and Microsoft Advertising, no second integration to build.
Connecting your store to GA4
Add your GA4 credentials once
In your DataFirefly account, add your GA4 measurement ID (G-XXXXXXX) and a Measurement Protocol API secret created in Admin, Data Streams. They're stored encrypted and never sent to your store.
Install the connector for your platform
PrestaShop,
WooCommerce or
Shopware: then paste
your single dfss_ connection key. On any other stack, post
events to our API.
Verify in GA4 Realtime
Place a test order, then check the Inspector for a delivered
purchase and confirm it appears in GA4 Realtime with a real source and medium, not Unassigned.
Your own script, server-side GTM or a managed connector?
Three routes reach the same Measurement Protocol. They differ in what you have to run, and in whether GA4 is the only destination.
Your own integration
Code you write against the Measurement Protocol: reading the GA4 cookies, session stitching, hashing user data, retries. Full control, and every subtlety of the protocol is yours to discover.
Server-side GTM
A GTM server container you host and configure, with a GA4 tag inside. Maximum control over tags and variables, and a real GTM skill set required to build and maintain it.
DataFirefly
A managed connector: no container, no cloud account, one key. GA4 plus Meta CAPI, Google Ads, TikTok, Pinterest and Microsoft Advertising from the same event, EU-hosted.
When another route fits better. If you have a developer who will own the integration and GA4 is your only destination, writing it yourself is perfectly sound. If you have GTM expertise in-house and need tag-level control over transformations, server-side GTM is more flexible than we are. We're the better fit when you want events reaching several platforms reliably without becoming a tracking infrastructure team. See also our Stape alternative and Addingwell alternative pages.
GA4 server-side tracking for every e-commerce platform
PrestaShop
A native module that sends the full funnel to GA4, with session stitching and consent handling built in.
WooCommerce
A WordPress plugin with a retry queue, an Activity panel and HPOS support, delivering the funnel server-side to GA4.
Shopware 6
A Shopware plugin covering the same funnel, connected with the same single key.
Shopify
Shopify's order webhooks, subscribed in minutes with the same single key. Nothing to add to the theme.
A headless front-end or a custom stack? Post your events to our API and the dispatcher handles GA4 and every other destination the same way. Tell us about your setup.
GA4 included in every plan
One subscription covers your whole account and all its destinations: GA4 is not a paid add-on. Move up a tier for more sites and more monthly events.
Free
Free while you stay under the monthly allowance: nothing breaks if you go over.
Starter
For a single store getting GA4 server-side in place properly.
Billed €390 per year: 12 months commitment, no pro-rata refund.
Growth
For merchants and small agencies running up to five stores.
Billed €1 190 per year: 12 months commitment, no pro-rata refund.
Scale
For agencies and portfolios managing up to twenty stores at higher volume.
Billed €3 490 per year: 12 months commitment, no pro-rata refund.
Just want to try the connection first? The free plan lets you send events and see them land before you subscribe.
Sending data to GA4, under European rules
Server-side tracking moves where the request comes from. It does not move you outside the GDPR: so we built the consent checks in rather than around.
Events are processed in the EU before they reach Google.
Nothing fires client-side without consent, and the server re-checks.
Your Measurement Protocol API secret is encrypted at rest and never sent to the browser or the store.
Email, phone and address are hashed as Google requires: raw identifiers are not sent.
A data processing agreement covering this flow is on our DPA page.
Tracked in real time on our public status page, in line with our SLA.
Frequently asked questions: GA4 server-side tracking
What is GA4 server-side tracking?
Sending your events (page view, add to cart, purchase) from your own server to Google Analytics 4 through the Measurement Protocol, instead of relying only on the gtag running in the visitor's browser. Because the request leaves your infrastructure rather than the browser, it is not affected by ad-blockers or by browser restrictions on cookies. Done properly the server event carries the same client_id and session_id as the browser, so it joins the same session rather than opening a new one.
Why do my server-side GA4 events show up as Unassigned?
Because they arrive without a session_id. GA4 attributes by session, so an event that opens its own session has no source and lands in Unassigned. The fix is not to drop server-side, which is the more complete data: it is to give the event its label back by forwarding the client_id and the session_id read from the GA4 cookies. Our connectors do that by default. If you already have Unassigned revenue, this is almost always why.PrestaShop, WooCommerce, Shopware
Will server-side tracking count my GA4 events twice?
GA4 has no deduplication key of its own, so this depends on how the funnel is split, and our connectors do the splitting for you: the browser tag keeps the engagement events it is good at, and the server owns the conversion. You do not end up sending the same purchase twice. If you wire the Measurement Protocol yourself and re-send an event the tag already sent, GA4 will count both, because it has no way to know they are the same.client_id
How do you connect a website to the GA4 Measurement Protocol?
Three usual routes: write your own integration against the Measurement Protocol, run a server-side GTM container with a GA4 tag, or use a managed connector. With DataFirefly you install the connector for your platform (PrestaShop, WooCommerce, Shopware) or call our API, then paste a single connection key. Your measurement ID and API secret are stored on our side, encrypted: you never paste them into your store.
Is server-side tracking to GA4 GDPR-compliant?
Server-side tracking does not remove the need for consent. Our connectors gate both the browser layer and the server layer on consent, and the dispatcher applies a second check before any event leaves for Google. Events are processed in the EU (Germany), a DPA is available, and the API secret never leaves our server. Server-side is a reliability and data-quality mechanism, not a way around a consent banner.
Does this replace my GA4 browser tag?
No, and you should not want it to. The browser tag sees things the server never will: scroll, engagement time, page sequence, the real referrer. The server sees things the browser loses: the validated order, its true value, the hashed customer data. Our connectors run both and split the funnel so each does what it is good at, which is also why you do not get double counting. The
user-provided data and cross-device reporting session stitching is what keeps the two halves in the same session.
Google, Google Analytics and GA4 are trademarks of Google LLC. DataFirefly is not affiliated with Google. Product names are used to describe interoperability.
Stop losing GA4 revenue to the browser
Send the complete funnel to the GA4 Measurement Protocol, stitched onto the right session: consent-aware, EU-hosted, with Meta CAPI, Google Ads, TikTok, Pinterest and Microsoft Advertising from the same event.