Full Answer
The discrepancy between platforms is not a bug — it is a structural consequence of each platform optimising its measurement for its own advertising model. Facebook wants to demonstrate that its ads influenced a purchase, so it counts both direct clicks and impressions that preceded a conversion within its attribution window. GA4 wants to show the last interaction that drove the session, so it credits the most recent click. Google Ads wants to prove that its keywords generated value, so it applies its own window and may include modelled conversions where consent gaps exist.
These differences are compounding. A single purchase by a customer who saw a Facebook ad, clicked a Google search result, and then returned directly to complete checkout will appear as one conversion in Facebook (it showed the ad), one conversion in Google Ads (it drove the click), and one conversion in GA4 (it recorded the session). Three platforms, three conversions, one actual sale.
The practical solution is to anchor your analysis to a single source of truth that sits beneath all platform-level measurement: your own transaction database. For WooCommerce stores, this means capturing purchase events at the server level — from the PHP hook that fires when an order is placed — and routing that data into BigQuery or a similar warehouse. From there, you can deduplicate transactions, apply your own attribution model, and compare each platform's claimed performance against actual revenue.
Platform numbers are still useful — they inform optimisation decisions within each channel. But cross-channel budget allocation should always reference the warehouse, not the individual platforms.