A conversion is the record that a visitor completed an action a business has decided matters, but Google Analytics 4, Google Ads and Meta each define and count that action as a different object. GA4 marks it as a key event, an event flagged important inside the property. Google Ads defines it as a conversion action with its own counting setting, and Meta defines it as a conversion event chosen as the goal an ad set optimizes for, so the same purchase can produce three totals without any tool being wrong.
Why it matters for agencies
In a client review this shows up as three tabs telling three different stories about the same week. Google Ads books its conversion action against the date of the click, not the date the action happened, so a campaign that runs hard at month's end keeps posting conversions backward into a month already reported. Google Ads Help is explicit: the primary conversion columns are calculated by the time of the click, and a click one week that converts the next is reported back to the click's week. GA4 records its key event on the day it fired, and Meta reports whichever conversion event was chosen as the ad set's optimization goal, matched inside its own window. None of the three was built to agree, so a marketer who treats the gap as a bug spends the call defending arithmetic instead of results.
What teams get wrong
The common mistake is asking why the conversion number will not match, as if it is one shared metric with a single broken setting. It was never one metric. A Google Ads conversion action carries its own count setting, either every occurrence after an ad interaction or only one per ad click, and switching it to chase a GA4 total changes what the account optimizes toward, not just what it reports. A Meta conversion event carries the opposite risk: run the Pixel and the Conversions API together without matching event IDs, and Meta counts the same sale twice inside its own 48 hour deduplication window.
Archon Labs sees the same pattern from the other direction: agencies spend hours trying to force three separately configured objects to agree, instead of defining the conversion once in a dataset the client owns, with the platform totals kept beside it as each platform's own claim rather than competing versions of one fact.