I'm struggling with transaction d-duplication in GA4 - particularly when using Measurement Protocol.
I have a transaction ID that was sent to GA4 twice:
- as a standard GTM event
- from the backend via Measurement Protocol
This is showing up twice, both in the GA4 interface and in my BigQuery export.
Google's documentation suggests that duplicate transaction IDs should be de-duplicated automatically.
By adding a transaction ID, Google Analytics will deduplicate purchases if two purchases are registered with the same transaction ID.
Google Analytics only de-duplicates transactions with the same transaction ID from the same user. The same transaction ID can be used for different users without de-duplicating the transactions.
I've confirmed - through the API push and retrospectively in the BigQuery data - that the following data points are identical:
- transaction_id
- user_pseudo_id
- session_id
- event_timestamp
- value
- items
Is this behaviour documented and expected? Does de-duplication not occur when through Measurement Protocol? Has anybody encountered similar and have solutions?

I haven't used Measurement Protocol or Big Query, but I did notice duplicate transaction_ids for purchase events in the Google Analytics UI once when looking at data from the previous day. A couple days later, it was fixed. I guess I take from that that data isn't accurate unless more than 24 hours has passed. I wanted to mention it in case maybe you were looking at Yesterday's data as well.