The Rest of This Post Is for Members
You can read this post and the other members-only posts for free.
Instead of putting two dashboard totals side by side, join at row level on an identifier present in both. How the join key is chosen, the precondition in the Ads Webpages report, the three-bucket reading, and the measured ceiling of first-party cookie capture.
Taking the difference between two dashboard totals is not a method. What works is joining at row level on an identifier present on both sides, then reading the result in two layers rather than as one match rate. The key changes with the conversion action; what decides it is not its name but whether it is unique per row. Verify the GA4 side's own count first, because the difference may belong to the measurement layer rather than to Ads.
You can read this post and the other members-only posts for free.