Conversion tracking
Most Google Ads campaigns fail because conversion tracking is broken or incomplete. VibeAds wires the entire chain automatically. You never touch tag manager unless you want to.
GTM and GA4 (per account)
Every paid-tier user gets a dedicated GTM container and a GA4 property provisioned on first campaign publish. The containers are owned by VibeAds (so we can sync tags atomically) but scoped to your account.
Auto-created tags:
- GA4 page view + scroll + form_submission + phone_call_click
- Google Ads conversion (awct) firing on both events with conversion_value from dataLayer
- Meta Pixel (Pro+) firing on form_submission with hashed PII
- TikTok and LinkedIn pixels (Max) firing on form_submission
On config changes (new conversion action, new pixel), the agent reconciles tags via sync-gtm-tags.
The four conversion actions
Every published campaign auto-creates a 4-action conversion split on your Google Ads account:
- UPLOAD_CLICKS_LEAD. Form submissions uploaded via GCLID. Primary at launch. Drives Smart Bidding.
- UPLOAD_CLICKS_REVENUE. Paid invoices from Jobber uploaded via GCLID. Starts secondary, promoted to primary once you have 30 paid invoices in a rolling 30-day window. Category PURCHASE.
- AD_CALL. Native Google call tracking, call duration as a conversion signal. Primary if business_phone is set. Category CONTACT.
- WEBPAGE. GTM form_submission and phone_call_click events. Primary. Category LEAD.
Why start REVENUE as secondary: Smart Bidding needs ~30 conversions in 30 days on a primary action before it can reliably optimize. Most new campaigns get 5 to 15 paid invoices in their first month. Secondary status lets the agent collect signal without choking spend.
dataLayer events
Every funnel and landing page fires dataLayer events the GTM container consumes:
landing_page_viewon boot. Carriescampaign_id+ad_group_idfrom server-injected meta tags.funnel_step_completeon each step. Carriesstep_name,time_on_step_ms.scroll_depthat 25/50/75/100%.form_submissionon lead form submit. Carriesconversion_value(the category lead value) +conversion_currency.phone_call_clickon any click-to-call link.
Offline conversion upload
Pro and Max tiers upload offline conversions back to Google Ads:
- Form submissions. Once a lead is qualified (score over 30 or human review),
upload-conversionsuploads it to UPLOAD_CLICKS_LEAD. - Qualified calls.
upload-call-conversionsruns every 15 min and uploads calls with score over 30 (Twilio + Deepgram + Gemini pipeline) to UPLOAD_CLICKS_LEAD. - Paid invoices (Max + Jobber).
upload-jobber-conversionsuploads paid invoices to UPLOAD_CLICKS_REVENUE. Recurring categories get predictive LTV (cleaning 10x, pool 12x, pest 8x). One-time invoices upload actual revenue. GCLID expiration handled at 85 days (Google's window is 90).
jobber_job_id because the eventual paid invoice will upload anyway. One gclid, one conversion.Signal quality and retraction
When a lead is marked as spam in the CRM, the system automatically retracts the conversion from Google Ads via the Adjustment API. Smart Bidding stops over-bidding on the source keyword. Same mechanism for marking a call as spam.
Verifying installation
Every campaign detail page has a Tracking tab with a Verify Installation panel. Paste any landing page URL and it runs 7 checks:
- GTM container present
- GA4 measurement ID firing
- Conversion Linker present
- Google Ads conversion tag present
- Block 1 campaign_id init
- form_submission handler
- phone_call_click handler
Useful when you bring your own landing page and need to confirm the GTM + GA4 + DNI snippets are pasted correctly.