| Collection coverage | Contains orders recorded by the store. | Contains purchase events successfully sent, accepted, and queried. | Compare distinct eligible order IDs with valid GA4 transaction IDs. |
| Identity and duplicates | Each order has a stable order identity. | A purchase event can be missing, malformed, or sent more than once. | Count duplicate and blank transaction IDs before comparing revenue. |
| Revenue components | Can expose gross sales, discounts, refunds, tax, shipping, and other components. | The purchase event value depends on the implementation and ecommerce payload. | Rebuild both sides with the same written component formula. |
| Refunds and cancellations | Order and refund facts can change after purchase; refund events may have their own date. | Refund or cancellation tracking depends on instrumentation and may be incomplete. | Separate original purchase value from later adjustment events. |
| Date and timezone | Orders are assigned using store and report date rules. | Events are assigned using property timezone and event timestamps. | Inspect transactions around midnight and compare timezone settings. |
| Currency | Orders may retain original or presentment currency values. | Event currency and value are implementation fields; reporting may convert them. | Group by currency first and document any FX rate and rate date. |
| Scope and filters | Store, channel, test order, draft order, and status filters affect inclusion. | Property, data stream, hostname, filters, and consent affect inclusion. | Write one scope statement and apply it to both extracts. |
| Late changes | Orders can be edited, refunded, or cancelled after initial creation. | Event data and modeled results can settle on a different schedule. | Record extraction time and repeat the comparison after a fixed close window. |