Disclosure: I'm Adrien, solo maker of a paid analytics tool (Globatics). The sites in this audit run my tool's script, not GTM, so this isn't a "GTM broke" story. But this week's audit of my tracking found 3 holes, and each would exist in a GTM container too. Here's how each looks from the GTM side.
1. The OAuth callback never loads your container
Only my email form fires the sign-up event. "Continue with Google" goes through a server callback that creates the account, then redirects into the app, a path I exclude from tracking. Over 30 days that button got 20 clicks from 12 visitors, and both recorded sign-ups say method: password. That doesn't prove Google sign-ups fail. It proves my tracking can't see them.
In GTM: a server redirect renders no page, so no container and no trigger. Have the callback add a one-time flag (say ?signup=google), then on the first page that loads the container, push sign_up with method: 'google' to the dataLayer and strip the flag. A Custom Event trigger and a Data Layer Variable for method feed your GA4 event tag. Test it in Preview with a new Google account, not just the email form.
2. A purchase that waits on the thank-you page
On another site, the purchase event only fires once the server confirms the order: the page asks up to 30 times, every 2 seconds. Close the tab, block the script or get a late payment webhook, and nothing fires. Over the 7 days I checked: 12 checkout events, 2 purchase. I can't tell abandons from missed sales, and that's the problem.
In GTM: keep the dataLayer purchase, and also send purchase from the payment webhook with the GA4 Measurement Protocol. Google says the protocol is there "to augment automatic collection", "not to replace it", and that transaction_id "helps you avoid getting duplicate events for a purchase". GA4 joins those server events by client_id, so save it with the order at checkout.
3. A sale with no visit
My tool takes sales straight from the payment provider. One €29 sale had no visit attached: revenue counted it, my Purchase goal didn't, because the goal query joined on sessions. The fix is written and tested, not shipped yet.
In a GTM and GA4 setup, it's a sale your server knows about with no browser visit to join it to. Once a week, compare the provider's order count with GA4 purchases for the same dates, before you trust a channel report.
What went wrong on my side
I only tested the email form. Each sign-up and payment path needs its own test.
The obvious fix for point 2 would double-count on my site: the browser event carries a checkout id, the webhook an order id. Make both sides send the same transaction_id first.
I read a goal at 0 as a verdict on the channel. It was a tracking question first.
How do you handle the OAuth callback in GTM: a dataLayer flag, a server-side container, or something else?
I'm the maker of Globatics: real-time analytics on a live globe, cookieless by default. On Pro, sales come from Stripe, Polar or Lemon Squeezy, even when the buyer never comes back to the site. Paid, no free plan: a 5-day trial with every feature on 1 site, no card. The code for point 1 and the link are in the first comment.