GA4 + GTM Conversion Tracking Recipes: Forms, Calls, WhatsApp & Viber
Stop optimizing for pageviews
Business sites need lead events: form submits, phone taps, WhatsApp/Viber clicks, booked calls. This recipe set matches what I deploy for Gurkha Technology clients.
Recipe 1: Thank-you page form conversion
- GTM trigger: Page View — URL contains
/thank-you -
GA4 event tag:
generate_leadwithmethod: form - Mark as conversion in GA4 Admin
Recipe 2: Click-to-call (tel: links)
- Trigger: Click — Click URL matches RegEx
^tel: - Event:
phone_call_clickwithlink_urlvariable - Optional: Google Ads conversion tag fired on same trigger
Recipe 3: WhatsApp / Viber clicks
Nepali SMEs often convert on messaging apps — track them explicitly.
- Trigger: Click URL contains
wa.meORapi.whatsapp.comORviber:// - Event:
messaging_app_clickwith parameterapp: whatsapp|viber - Compare messaging vs form volume by landing page in Explorations
Recipe 4: B2B demo form (enhanced)
Builds on our GA4 demo form GTM guide:
- Hidden fields for UTM persistence
-
form_starton first field focus -
form_submitonly on successful POST (not button click)
Validation checklist
- GTM Preview shows tags firing
- GA4 DebugView receives events
- Conversions marked in GA4
- Google Ads imported (if running ads)
- 24h real-time test from mobile
Recipe 5: Scroll depth on long Nepal landing pages
- Trigger: Scroll Depth — 75% vertical
- Event:
scroll_75withpage_path - Use in Explorations to compare content quality vs bounce
Recipe 6: Outbound email / mailto clicks
- Trigger: Click URL matches
^mailto: - Event:
email_click
GTM container export discipline
Export container JSON after every production change. Store in private repo — rollback in minutes when a tag breaks production.
Consent Mode (brief)
If serving EU traffic, implement Consent Mode v2 before running remarketing. Nepal-only campaigns may still use basic cookie banners for trust.
Debugging failed events
| Symptom | Likely cause |
|---|---|
| Events in Preview but not GA4 | Wrong measurement ID |
| Duplicate events | Tag + gtag double-fire |
| WhatsApp clicks missing | Link uses JS redirect not <a href>
|
GTM container setup (foundation)
Before recipes, ensure the base container is correct — most “broken tracking” is foundation, not trigger logic.
Step 1: Create GA4 property + web data stream
- GA4 Admin → Create property → Web stream
- Copy Measurement ID (
G-XXXXXXXX) - Enable Enhanced measurement (file downloads, outbound clicks — optional keep on)
Step 2: Install GTM
- Create container (Web)
- Paste GTM snippet in site
<head>and<body>— WordPress via plugin or theme header - For static/Jekyll sites, inject in layout template (our CI/CD pattern)
Step 3: GA4 Configuration tag
- Tag type: Google Analytics: GA4 Configuration
- Measurement ID: your
G-ID - Trigger: All Pages
- Publish container
Verify in Tag Assistant / GTM Preview → Tags Fired on homepage.
Step 4: Mark conversions
GA4 Admin → Events → toggle Mark as conversion on: generate_lead, phone_call_click, messaging_app_click, purchase (e-commerce)
Import to Google Ads if running paid search — CPC benchmarks mean wasted spend without conversion import.
Recipe 7: Contact form with validation-safe tracking
Nepali SME sites often use Contact Form 7, WPForms, or custom HTML forms.
Anti-pattern: firing conversion on submit button click — fires when required fields empty.
Pattern A — thank-you page (recommended):
- Form redirects to
/thank-you/on success only - Trigger: Page View — Page Path equals
/thank-you/ - Tag: GA4 Event
generate_leadwith parameters:method: contact_formpage_location:
- Optional: Google Ads conversion tag on same trigger
Pattern B — AJAX success callback:
- Push to
dataLayeron successful API response:
dataLayer.push({
event: 'form_submit_success',
form_name: 'contact_main',
});
- Trigger: Custom Event
form_submit_success - Tag: GA4 Event
generate_lead
Recipe 8: Nepali messaging apps (detailed)
Many leads convert on WhatsApp, Viber, or Messenger — not forms. Track each channel separately.
Variables
- Built-in Click URL variable enabled
- Optional REGEX variable for app type:
matches RegEx (wa.me|api.whatsapp.com) → whatsapp
contains viber:// → viber
Triggers
| Trigger name | Condition |
|---|---|
| WhatsApp click | Click URL matches RegEx wa.me | api.whatsapp.com
|
| Viber click | Click URL contains viber://
|
| Messenger click | Click URL contains m.me or fb.me
|
Tags
Event name: messaging_app_click
Parameters: app: whatsapp|viber|messenger, link_url:
Analysis
Exploration: Landing page × messaging_app_click vs generate_lead — if messaging dominates, optimize bio copy and auto-reply speed, not form length.
Common on hotel/trekking sites and local service businesses (home services guide).
Recipe 9: WooCommerce purchase (e-commerce)
For Nepali stores with wallet checkout:
- Enable GA4 enhanced ecommerce or use plugin (GTM4WP, etc.)
- Events:
view_item,add_to_cart,begin_checkout,purchase - Pass
currency: NPRandvalueon purchase - Debug wallet redirect — purchase must fire on thank-you/order-received URL
Cross-reference payment gateway guide and e-commerce guide.
Recipe 10: Google Ads offline conversion import (calls)
When click-to-call dominates:
- Fire
phone_call_clickin GA4 (Recipe 2) - Optionally capture GCLID in session storage on landing
- Upload offline conversions or use Google Ads call reporting
For SMEs without CRM, even call click proxy metric beats optimizing for bounce rate.
UTM discipline (campaign reporting)
| Parameter | Example | Rule |
|---|---|---|
| utm_source | google, facebook | Platform |
| utm_medium | cpc, social | Channel type |
| utm_campaign | dashain_sale_2026 | Lowercase, no spaces |
| utm_content | hero_banner_a | Creative variant |
Persist UTMs to hidden form fields on landing pages for lead source attribution in CRM.
QA runbook (pre-launch)
| Step | Action | Pass criteria |
|---|---|---|
| 1 | GTM Preview on staging | Config tag fires all pages |
| 2 | Submit test form |
generate_lead in DebugView |
| 3 | Tap tel: link on Android/iOS |
phone_call_click fires |
| 4 | Tap WhatsApp float button |
messaging_app_click fires |
| 5 | Complete test purchase (NPR 10) |
purchase with value |
| 6 | Check GA4 Realtime | Events within 30 seconds |
| 7 | Ads → Conversions | Imported events active |
| 8 | Wait 24h | Explorations populate |
Document results in client handover PDF — part of digital marketing pricing deliverables for analytics setup lines.
Common Nepali site mistakes
- Meta refresh redirects instead of HTTP 301 — breaks referrer and sometimes tags (static site note)
- Caching entire site including thank-you page — never cache order confirmation
- Multiple GA properties — marketing agency + old UA + client GA4 triple-firing
-
Floating WhatsApp implemented as
onclickwithout<a href>— untrackable - Consent banner blocking tags before consent on Nepal-only campaigns — often overkill but test if running EU remarketing
Training resources
University labs align with these recipes — digital marketing notes · career guide for students building portfolio analytics cases.
Server-side tracking (when client needs it)
Browser blocking and iOS limitations push some accounts toward:
- GA4 Measurement Protocol from server on form POST
- Meta Conversions API parallel to pixel
For typical Nepali SME lead-gen sites, well-implemented GTM client-side is sufficient to start. Add server-side when ad platform diagnostics show >20% event gap — common at scale on e-commerce (e-commerce guide).
Cross-domain tracking (marketing + shop subdomain)
If marketing site is static and shop is WooCommerce subdomain:
- GA4 Admin → Data streams → Configure domains
- Add
www.example.com.npandshop.example.com.np - Linker parameters on cross-links
- Single GTM container or linked containers with shared dataLayer convention
Looker Studio starter dashboard (lead-gen)
Dimensions/metrics to template for clients:
| Widget | Source |
|---|---|
| Sessions by channel | GA4 default channel group |
| Conversions by type |
generate_lead, messaging clicks |
| Top landing pages | Landing page + sessions |
| Device split | Mobile vs desktop (Nepal mobile-heavy) |
| City | Kathmandu vs national |
Export PDF monthly — automation via n8n + GA4 API in agency stack.
Event naming convention (team standard)
Use snake_case, stable names:
-
generate_lead(GA4 recommended) phone_call_clickmessaging_app_click-
form_start/form_submit scroll_75
Document in client wiki — prevents duplicate events when two freelancers edit GTM.
Privacy and Nepali-only traffic
Most local campaigns target Nepal only — full GDPR stack optional unless remarketing to EU diaspora. Still use:
- Clear privacy link
- No PII in URL parameters
- Hashed email only if using advanced matching with consent
Hands-on lab (30 minutes)
- Create GTM container on personal WordPress or GitHub Pages test site
- Implement Recipe 2 (tel:) and Recipe 3 (WhatsApp)
- Submit form to thank-you page (Recipe 1)
- Screenshot DebugView — portfolio ready
Pairs with Google vs Meta channel choice once tracking works.
Recipe 11: File download (PDF brochure / rate card)
Nepali B2B sites often gate PDFs:
- Trigger: Click — Click URL matches RegEx
\.pdf$ - Event:
file_downloadwithfile_name,link_url - Mark conversion if PDF is primary CTA (consultancies, trekking packages)
Recipe 12: Outbound link to partner sites
Track clicks to booking engines or partner domains:
- Trigger: Click — Click URL does not contain your domain
- Event:
outbound_click - Filter exceptions for social/wallet domains already tracked
Google Tag Manager variables cheat sheet
| Variable type | Use in Nepal context |
|---|---|
| Click URL | tel:, wa.me, mailto: |
| Page Path | thank-you, order-received |
| Referrer | Diagnose Facebook in-app browser |
| Custom JS variable | Read dataLayer form_name |
| Lookup table | Map city landing pages to region |
Enable built-in click variables before debugging “trigger not firing.”
GA4 Explorations for lead-gen clients
Build these monthly:
- Funnel: session → landing → form_start → generate_lead
- Path exploration: messaging_app_click → return visit → generate_lead
- Segment overlap: Google CPC vs Meta paid — which assists conversion
Share in Looker — template in agency automation stack.
WordPress-specific GTM install notes
- Use GTM plugin or insert in header/footer — not both
- Exclude caching on admin and preview
- CF7: use redirect on success, not AJAX-only without dataLayer push
- WooCommerce: use GTM4WP plugin; test wallet return URLs
Static/Jekyll-specific notes
- Inject GTM in
_includes/head.htmlequivalent - Thank-you page must be real URL, not JS modal
- GitHub Actions deploy — verify GTM survives build
Ads platform linking checklist
| Platform | Requirement |
|---|---|
| Google Ads | Link GA4, import conversions, enable auto-tagging |
| Meta | Pixel + CAPI optional, UTM on ads |
| Both | Same thank-you/event names for comparison |
Without linking, optimization stays on clicks — expensive in Kathmandu CPC markets (benchmarks).
Pre-launch tracking audit (agency deliverable)
Charge NPR 10,000–20,000 for this audit — prevents wasted ad spend:
| Check | Pass/Fail |
|---|---|
| Single GTM container per site | |
| No duplicate GA4 config tags | |
| Conversions marked in GA4 | |
| Thank-you only on successful submit | |
| Mobile WhatsApp float trackable | |
| Real-time test documented | |
| Client has Admin access GA4/GTM |
Deliver PDF with screenshots — reusable template across clients (pricing guide).
Attribution windows and Nepali sales cycles
B2B services (law, consulting, trekking quotes) have 7–30 day consideration:
- Enable GA4 data-driven attribution when volume allows
- Compare last-click vs data-driven in Explorations
- Import messaging clicks as micro-conversions if sales finish on WhatsApp
Do not kill Meta campaigns at day 3 — common mistake for high-consideration Nepal verticals (law firm playbook).
Consent Mode and remarketing (Nepal + diaspora)
If campaigns target Nepali diaspora in UK/EU/US:
- Implement Consent Mode v2 before Meta/Google remarketing
- Document consent banner behavior in GTM
- Nepal-only domestic campaigns: lighter touch, but disclose cookies for trust
Enhanced measurement toggles (GA4)
Review Admin → Data streams → Enhanced measurement:
- Page views: on
- Outbound clicks: on (or custom for control)
- Site search: on if internal search exists
- Form interactions: optional — prefer custom form events for accuracy
Enhanced form events can duplicate custom GTM events — test before enabling both.
Client training session (1 hour agenda)
- Show GTM Preview live (5 min)
- Walk GA4 Realtime (5 min)
- Explain difference pageview vs conversion (10 min)
- Demo WhatsApp click test on mobile (10 min)
- Show monthly Looker PDF they will receive (15 min)
- Q&A — “why did last month drop?” (15 min)
Recorded Loom for stakeholders who miss call — reduces support tickets.
FAQ
How long until conversions show in Google Ads?
Often 24–48 hours after GA4 import; allow 7 days for stable bidding.
Should I track every button click?
No — track business outcomes (lead, call, message, purchase). Noise obscures decisions.
Can one GTM container serve multiple domains?
Yes with cross-domain configuration — document in client handover.
Recipe 13: Newsletter signup (email capture)
- Trigger: Form submit or thank-you
/subscribed/ - Event:
sign_upwithmethod: newsletter - Optional: Meta Lead event if running lead ads
Nepali SMEs building owned audiences before marketplace dependency — ties to e-commerce retention.
Recipe 14: Video engagement (YouTube embed)
- Trigger: YouTube video trigger — progress 50% and 100%
- Event:
video_progresswithpercentparameter - Use to compare explainer vs testimonial performance on landing pages


