Full Answer
Step one is ensuring both platforms receive the same raw data. If GA4 relies on client-side gtag.js while Meta receives server-side CAPI events, the comparison is already corrupted at the input level — you are comparing an incomplete dataset against a complete one. Server-side tracking that sends the same purchase event, with the same transaction ID and order value, to both platforms simultaneously eliminates this input-level gap.
Step two is loading both platforms' reported data into a warehouse where you can join on transaction ID. Export GA4 data to BigQuery using the native integration. Export Meta conversion data via the Meta Marketing API or manual CSV download. Join the two datasets on transaction ID and categorise each order: matched in both platforms, present only in GA4, or present only in Meta.
Step three is analysing the gaps. Orders present in Meta but not GA4 are typically view-through conversions — purchases where the user saw a Meta ad but arrived at the site through a different channel. GA4 never saw a Meta-attributed session, so it credits the visit to whatever source delivered it. Orders present in GA4 but not Meta typically result from purchases that occurred outside Meta's attribution window or from sessions where the fbclid was stripped before CAPI received it.
Step four is establishing a regular cadence. Run the reconciliation weekly, not once. Attribution gaps shift as campaigns change, creative rotates, and platform policies update. A warehouse-anchored reconciliation process that runs on a schedule turns a bewildering data problem into a manageable operational discipline.