folder_open Analytics & Attribution

GA4 tracking mistakes that hide pipeline in Singapore

Martin Marinov Martin Marinov
16 min read
Topics ga4-tracking-mistakessingapore-measurementkey-event-misconfigurationwhatsapp-click-eventsduplicate-gtm-tags

The Looker Studio tab on a Monday in Raffles Place said 41 “leads.” The CRM said 17 opportunities. WhatsApp Business on the ops phone in Tampines showed another 9 threads that never hit either dashboard. Nobody had inflated the numbers on purpose. GA4 was simply counting the wrong moments, then Google Ads was bidding on those moments as if they were pipeline.

That is the job of GA4 for a Singapore marketing lead: not prettier session charts, but events that match real enquiries (web forms, click-to-call, WhatsApp, booked consults) so paid and organic spend can be judged in SGD. When the property is messy, Smart Bidding and Performance Max still “optimise.” They just optimise toward ghosts. A blended ROAS number means nothing if your conversion action is a careers thank-you or a PDF of the company brochure.

Below are the costly configuration errors we keep seeing on SG lead-gen sites, why they hide qualified work, and the fix for each. Then a repair order, one turnaround, and a sprint you can run without waiting for a full rebuild.

Six GA4 configurations that make SGD pipeline vanish in the UI

These are not “strategy” problems. They are tags, key-event toggles, thank-you URLs, and click listeners. Each one has a mechanism you can inspect in DebugView or GTM Preview this week.

Common mistakes

  1. Marking page_view or engaged_session as a key event Someone needed a number in week one of the GA4 migration, so they promoted page_view, scroll, or engaged_session to a key event and imported it into Google Ads. - Mechanism: every Central or East-side visit now looks like a conversion. Smart Bidding floods cheap sessions. CPL in Ads looks heroic while sales still wait on PayNow deposits. Fix: demote those events. Keep page_view for diagnostics only. Promote only events that mean an enquiry (generate_lead, form_submit, whatsapp_click after a dedicated landing path, call_click, book_consult). Recreate the Ads conversion from that key event and let the old action expire rather than sit in the bidding mix.

  2. One thank-you URL for careers, newsletter, and demo The site fires generate_lead on /thank-you/. Careers, GST-registered supplier forms, and the real demo form all land there. - Mechanism: a Woodlands hiring spike shows up as “pipeline” and Performance Max starts hunting job seekers. You will see this as a sudden lift in conversions with no lift in SQL or WhatsApp quality. Fix: unique confirmation URLs or unique events per form (careers_apply, newsletter_signup, demo_request). In GTM, fire generate_lead only when the form ID or thank-you path matches demand-gen. If you cannot split URLs this sprint, use a form-specific dataLayer push and never a catch-all page_view on /thank-you/.

  3. Counting every WhatsApp icon tap as a closed enquiry Singapore buyers live in WhatsApp. Marketers therefore wire wa.me and the floating button as key events. - Mechanism: a tap from a Punggol mobile session (MRT commuters and HDB-area browsing skew heavily mobile, and conversion still lags desktop) is not a qualified thread. Users open chat, bounce, or ask a price they never intended to pay. Ads then learns “WhatsApp click = win.” Fix: fire a click event for diagnostics, but only mark it as a key event if it sits on high-intent pages (pricing, service area, HDB/condo quote, demo). Better: a second event when the chat widget confirms a message sent, or a daily reconcile against WhatsApp Business labelled chats. Do not import raw icon clicks into bidding.

  4. gtag.js and GTM both firing the same conversion A theme plugin injects gtag. GTM also loads the GA4 config and a conversion tag. - Mechanism: one form submit becomes two key events. Ads may import both. Last-click already double-counts across channels; now you double-count inside one property. CPL looks 30-50% better than reality. DebugView shows two identical events a few milliseconds apart. Fix: one transport. Prefer GTM. Remove the plugin’s GA4 snippet. Use a single measurement ID. Deduplicate with event_id if a second system (CRM, webhook) must fire. Then re-import a clean conversion into Ads and pause the duplicate action.

  5. Payment or booking hops that break the session Checkout, Calendly, or a PayNow / Stripe interstitial lives on another domain. The user returns to /booking-complete without linker parameters. - Mechanism: the conversion lands as a direct session. Paid search gets the click, organic or “(direct)” gets the credit, and the CMO kills a campaign that actually booked work. Cross-domain is worse on mobile WebViews. Fix: list every hop in GA4 Admin cross-domain settings, enable linker on outbound clicks in GTM, and fire the conversion on the destination with the original client_id still intact. Test with a real UTM from a staging Search ad, not an internal bookmark.

  6. Ads conversions that do not match the GA4 key event The Ads account still has a Universal Analytics goal, a “thank you page” pixel, and a new GA4 import. Three actions, overlapping windows. - Mechanism: bidding sees inflated conversions; GA4 Explorations show a different count; CRM shows a third. Privacy and ad-blockers already drop 20%+ of browser conversions. Stacking duplicate pixels makes the remainder untrustworthy. Fix: one primary conversion for bidding, aligned to the same key event name and value (SGD, GST exclusive if that is how finance books revenue). Turn on Enhanced Conversions with first-party email or phone from the form. Secondary actions for observation only. If Meta is in the mix, do not let Instant Form “leads” sit in the same weekly pack as GA4 web enquiries without a quality flag.

If the form itself is the leak (fields, proof, or a CTA that dies below the fold on mobile), GA4 will never save you. Session recordings and heatmaps in HeyLead Insights show whether people even reach the submit button before you argue about event names.

DIY playbook

  1. Export the last 30 days of key events. Next to each row, write the real business action (demo, WhatsApp thread, call, job application). Anything you cannot map gets demoted today.

  2. Open GTM Preview on the live landing page your Search ads use. Submit the form, tap WhatsApp, tap tel:. Confirm one event, one measurement ID, no plugin double-fire.

  3. In GA4 Admin, check key events and the Google Ads link. Pause imported actions that are not the enquiry event. Do not leave “page_view” or “click” in the bidding column.

  4. Hit the thank-you and booking-complete URLs with a tagged test click. If the session source dies at the payment hop, fix cross-domain before you raise budget.

  5. Reconcile 20 CRM or WhatsApp threads against GA4 user explorer. If fewer than 15 match, you still have a definition problem, not a media problem.

Slow pages hide conversions too: if INP is ugly on mobile, the form never submits and GA4 looks “clean” because nothing fired. Fewer than 60% of origins pass all three Core Web Vitals as of mid-2026 CrUX data. Check the landing URL you actually advertise, not the homepage. If you want a specialist to own the event map rather than another round of plugin conflicts, start with HeyLead’s GA4 configuration and events work rather than adding more tags.

Not sure where your funnel leaks?
Get a free marketing audit - we review your search, ads, and landing pages and send back what to fix first.
Get a free audit

What to fix while spend is live versus what can wait

You do not get a freeze on Performance Max while someone “does a tracking project.” You also should not rebuild content, audiences, and events in the same week. Sequence matters because each bad key event is still teaching the auction.

This month, only touch signal quality. Demote vanity key events. Kill duplicate gtag. Split careers from demo thank-yous. Stop importing WhatsApp icon clicks. Align the Ads primary conversion to one GA4 enquiry event and turn on Enhanced Conversions. Those five jobs change what bidding sees. They do not require a new creative sprint.

Wait on pretty Explorations, custom channel groupings, and a full BigQuery export until the counts in GA4, Ads, and the CRM sit within a range you can explain (small gaps from consent and ad-blockers are normal; 2x gaps are not). Wait on new landing art until you know the form event fires once. Wait on adding Bing or another Meta conversion API until the web event is trustworthy. Adding platforms on dirty events just multiplies the lie.

A practical rule: if finance cannot use the number in an SGD conversation, it is not a bidding conversion. Observation actions can stay. Primary actions cannot. When Google Ads, GA4, and WhatsApp still disagree after the cleanup, the next place to look is the landing handoff, not another campaign clone. If the pack still will not reconcile, a short GA4 event audit is cheaper than another month of Smart Bidding on the wrong action.

Do not reshuffle campaign structure while you fix tags. Learning resets on top of bad conversions is how you spend two weeks proving nothing. Keep the live campaigns. Change the conversion they optimise toward. Then give the system enough conversions to relearn before you judge CPC or ROAS.

GA4 mistakes that hide your real pipeline from Singapore marketing teams

The Jurong B2B marketer who stopped buying a brochure download

A head of growth at a West-side industrial supplier was reporting a 4.1% “conversion rate” on Search. CPL looked better than the year before. Sales kept saying the calendar was empty. The mechanism was a single generate_lead event on /resources/thank-you/, which also served a 14-page PDF gated as “contact.” Google Ads treated every download as a lead. Performance Max, which already “drives the bulk” in many SG accounts, piled budget onto queries that wanted a spec sheet, not a sales visit.

They did one change first: a new dataLayer event, request_quote, fired only from the quote form on the service landing pages. The PDF kept a download event that was not a key event and not imported. Within 11 days the Ads conversion volume dropped by about 37%. That felt like a failure in the weekly pack. SQL volume from the remaining conversions rose because bidding was no longer hunting brochure traffic. They did not add campaigns. They stopped teaching the auction the wrong success. The same pattern showed up on careers thank-yous sitting on generate_lead: Ads CPL looked cheap for three weeks, sales never saw the lift, and the fix was one form ID in GTM, not another campaign.

Secondary cleanup came after: WhatsApp on the quote page stayed as a key event; the global floating button did not. Volume from the icon had been fine; quality was not, because HDB and condo jobs start in chat but empty taps from a floating button are not pipeline. Cross-domain to the booking tool was linked so the quote did not show as direct. None of that would have mattered if the PDF had stayed in the primary conversion column.

Prefer to just ask? Message Martin directly on WhatsApp: Chat with us on WhatsApp

GA4 mistakes that hide your real pipeline from Singapore marketing teams

FAQs

Should WhatsApp clicks be GA4 key events in Singapore?

Treat them as key events only when the click sits on a high-intent page and you have a way to spot empty taps. A global floating button is a diagnostic event. Importing it into Google Ads teaches bidding to buy curiosity, not jobs.

Why do Google Ads conversions not match GA4?

The most common cause is the default attribution window mismatch-Google Ads counts conversions within a 30-day click window by default, while GA4 counts by session, so the same conversion can appear in different reporting periods. Different windows, duplicate tags, Enhanced Conversions modelled counts, and extra pixels from old UA goals. Pick one primary action that matches the enquiry event. Expect a small gap from consent and blockers. A 2x gap means configuration, not “attribution is dead.”

Is page_view ever useful as a conversion?

No for bidding. Use it to debug landing load and to see if Core Web Vitals are killing the form. Never promote it to a key event on a lead-gen property.

Do we pause spend while we fix GA4?

Usually no. Pause the bad conversion actions, not the campaigns. Keep spend on the enquiry event so learning continues on the right signal.

Where does GTM fit if the CMS already has a GA4 plugin?

Pick one. Two loaders duplicate events. GTM wins when you have forms, WhatsApp, tel: links, and thank-you paths that a plugin cannot distinguish.

Putting it to work

Execution sprint

This week

  1. Pull 30-90 days of performance for ga4 mistakes that hide real pipeline from marketing (Search Console, ads, CRM, or call logs - whatever you have).
  2. Flag the top leak: wrong intent, weak page, slow response, or dirty conversion tracking.
  3. Ship one fix on the highest-traffic money path (page, campaign split, or response rule).
  4. Run the free tools below on that same URL or account and log the findings.

Next 30 days

  1. Expand the fix to the next one or two money paths only after the first one shows cleaner bookings.
  2. Align creative, keywords, or content with the same offer the page now states.
  3. Review booked outcomes weekly; cut anything that still only produces unqualified volume.

This week

  • List every GA4 key event and mark which ones a salesperson would recognise as an enquiry.

  • Run GTM Preview on your highest-spend landing URL and confirm a single form or WhatsApp event.

  • Remove careers and newsletter thank-yous from generate_lead.

  • In Google Ads, keep one primary conversion tied to that enquiry event; pause the rest.

  • Build two test URLs with the UTM link builder and walk them through booking or PayNow hops.

  • Spot-check the advertised URL in the Core Web Vitals checker so a dead form is not mistaken for a tracking win.

Next 30 days

  • Turn on Enhanced Conversions with first-party form fields.

  • Reconcile 50 CRM or WhatsApp threads against GA4.

  • Separate observation events from bidding events in a written spec the media team cannot ignore.

  • Only then reopen campaign structure or new demand-gen tests.

Pull the last 30 days of GA4 key events next to CRM and WhatsApp counts and highlight every event that is not an enquiry. That single list is the brief. HeyLead can take the messy part off your plate: the GTM and GA4 event map that matches real Singapore enquiries so Ads stops bidding on ghosts. Chat with us on WhatsApp

Work with HeyLead
Free marketing audit, or reach Martin directly:
Get a free audit Connect on WhatsApp · [email protected]