Google Analytics 4 · Measurement Protocol

Your GA4 reports describe the visitors who agreed to be counted

When the GA4 tag is blocked, the session is not marked incomplete. It does not exist. Your conversion rates are computed on a filtered population. The Measurement Protocol sends the event from your server, where no blocker sits in the way.

POST /mp/collect
{
"event":"purchase"
"user": {
"client_id":"1847…2201.1718"
"user_id":"48219"
"session_id":"1718…903"
"consent.ad_user_data":"GRANTED"
"consent.ad_personalization":"GRANTED"
},
"properties": {
"value":84.90
"currency":"EUR"
"transaction_id":"#1175"
}
}
SHA-256 hashedclick identifiersent as-is
What Trackful actually sends to GA4 for one order.

The problem

Why GA4 and your back office never agree

The gap between GA4 revenue and your store revenue is not a rounding error.

Purchases go missing, not visits

The loss is not uniform. A visitor can be counted on arrival and then vanish at purchase, because the confirmation page is where the tab closes fastest. The denominator stays, the numerator leaves.

Hosted checkouts break the session

When payment happens on a third-party domain, the return to your store looks like a fresh visit from a referral site. The sale is then credited to the payment provider instead of the campaign that produced it.

Decisions made on filtered data

These reports arbitrate budgets. If channels do not lose the same proportion of data, that arbitration runs on a distorted ranking rather than on reality.

Session continuity

What has to be sent to keep your reports intact

GA4 does not recognise a visitor by email address but by session identifiers. Sending those correctly is what separates a useful event from an orphan one.

client_id
The browser identifier, taken as-is from the GA4 cookie. Without it, the server event creates a new user and you get purchases with no journey, no source and no campaign.
session_id
Attaches the purchase to the running session instead of opening a new one. That is what lets GA4 keep the original acquisition source rather than crediting the sale to direct.
user_id
For identified customers, it links sessions across devices. A visitor who discovers on mobile and buys on desktop stays one person in your reports.
consent.ad_user_data, ad_personalization
Consent signals travel with the event. GA4 then applies the modelling Google intends, instead of treating a non-consented send as if it were consented.

GA4's rules

Constraints we respect on your behalf

Taken from the Measurement Protocol documentation.

72 hours of backdating

Google documents that events and user properties can be backdated by at most 72 hours. Past that, the event is ingested but does not land on the right date. Trackful checks age before sending.

Consent enforced server-side

A denial prevents the send. Unspecified consent lets the event through without advertising signals. The decision is made in one place for every channel, not reinvented at each call site.

The Measurement Protocol validates very little

GA4 happily accepts a malformed event without saying so. A send that returns success can appear nowhere in your reports, which is exactly why verification happens in the realtime report and not on the response code.

Setup

Connected in minutes

  1. 1

    Authorise Google Analytics

    One-click OAuth. Trackful lists your properties and creates the API secret for you.

  2. 2

    Pick the property

    Select the property and data stream. If you do not have a property yet, Trackful can create one.

  3. 3

    Verify in realtime

    The test event shows up in the GA4 realtime report, which proves ingestion rather than mere acceptance.

Read the GA4 documentation

Questions

Frequently asked

Do I need to remove the GA4 tag from my site?

No. The tag stays useful for everything the server cannot see: scrolling, engagement, navigation. Trackful completes the conversion events, which are the ones the browser loses most often.

Will this inflate my revenue?

No. The server send carries the same transaction_id as the browser purchase, and GA4 does not count a transaction twice when it has already seen that identifier. What appears in addition is the purchases that were missing.

Why are my purchases attributed to direct?

Usually because the server event is sent without the visitor client_id and session_id, so GA4 opens a new session with no source. Trackful always passes those identifiers to preserve the original attribution.

Does GA4 work with Consent Mode v2?

Yes, and Trackful passes consent signals with every event. If the visitor declines, nothing is sent. The decision is made on the server, where it cannot be bypassed.

Trackful is not affiliated with or endorsed by Google. Google Analytics is a trademark of Google LLC, referenced here to identify the service Trackful sends your events to.

Stop paying for results you cannot measure

Every day without Trackful is a day you make ad decisions with only 60% of the data. Install Trackful in 5 minutes and see the difference.

14 days free
No credit card
No developer
30-day guarantee