Google Ads Setup
Foundational account + base tag, the reusable conversion-action template, and the no-code offline Data Manager flow.
Foundational Setup (account + base tag)
- 1.Create/access the Google Ads account, ensure it’s linked to the correct Google account with billing set up (a payment method is required to activate even without running live ads yet).
- 2.In GTM (Web container): build a Google Ads: Google Tag base tag — Tag ID: the AW-XXXXXXXXX conversion ID, referenced via a Constant variable (never typed raw) — Trigger: Initialization - All Pages.
- 3.Submit → Publish.
- 4.In Google Ads: Tools & Settings → Conversions, the account should now detect the Google tag as "Installed on site" (may show "Not installed yet" briefly until the container is published and a real page load occurs — don’t chase this instantly).
- 5.Build a Conversion Linker tag (mandatory companion whenever any native conversion tag exists) — Trigger: Initialization - All Pages.
- 6.Only after both the base tag and Conversion Linker are confirmed live, proceed to building actual conversion actions.
Conversion Action Creation (reusable template — used for every action in this build)
- 1.Tools & Settings → Conversions → + Create conversion action.
- 2.For an online/on-site conversion: select Website. For an offline/CRM-driven conversion: select "Conversions offline" from the data-source chooser, then follow the Data Manager path below.
- 3.Category: pick the closest match (e.g., "Submit lead form," "Contact," "Qualified lead," "Converted lead") — avoid categories that already show existing conversion actions unless intentionally grouping.
- 4.Conversion name: descriptive, matching the GTM tag naming convention (e.g., Call Click).
- 5.Value: for a genuinely new, unqualified signal, use "Use the same value for each conversion" with a proxy value calculated via the Conversion Value Methodology — never leave this on Google’s default "Use different values"/"dynamic" setting unless actually passing a real per-event value.
- 6.Count: "One" for leads/signups/contacts (only the first interaction per user is valuable) — "Every" is only appropriate for genuinely repeatable actions like purchases.
- 7.Click-through conversion window: 90 days for a real lead-gen conversion, 30 days for a weaker supporting signal like a call/WhatsApp click.
- 8.Attribution model: Data-driven (Google’s recommended default).
- 9.Action optimization: Primary for your one true business goal per account; Secondary for every supporting signal. If the chosen category isn’t an "account default goal," Google may force this to Primary at creation time regardless of your choice — fixable afterward via Conversions → Summary → click the action → change Primary/Secondary directly, just not selectable during initial creation.
- 10.Click through to "Use Google Tag Manager" as the tag setup method → copy the resulting Conversion ID and Label into two new GTM Constant variables (never paste raw values directly into a tag field).
Offline Conversion via Data Manager (No Code) — the general flow
- 1.Tools & Settings → Conversions → Summary → data source chooser → "Conversions offline."
- 2.Enable that data source, Save and continue — this does not disable or affect your existing website/other conversion sources, even though the toggle UI can look alarming. Per Google’s own "multi-source conversions" documentation: new sources enter a 14-day observation-only trial before becoming biddable; existing tag-based conversions are never disrupted.
- 3.Create conversion action → category (e.g., "Qualified lead," "Converted lead" — specifically meant for imported/CRM data, distinct from a live on-site "Submit lead form" category).
- 4.Set the value as static (same reasoning as the template above), then Save.
- 5.Next screen: "Connect a new data source" → select Google Sheets → "Use direct connection" (free, official — avoid the paid third-party/Zapier option) → toggle on the customer-data compliance checkbox → Done.
- 6.Select the actual lead Sheet file from Google Drive.
- 7.Filter: set a condition on the lead-status column (e.g., lead_status equals Good Prospect) — this determines which rows count as a conversion for this specific action. Build a separate action (repeat this whole flow) for each distinct status.
- 8.Field mapping — the trickiest screen: most fields auto-map from column headers. "Event source" must be set as a static value ("Web"), not mapped from a column — look for a small toggle icon next to the field selector to switch from "map a column" to "enter a fixed value." Leave "Conversion value" and "Currency code" unmapped here if the value was already set as static on the conversion action itself.
- 9.Consent and User agent/session sections: leave unmapped unless the source Sheet genuinely captures per-row consent state and browser/session data — most CRMs don’t, and Google falls back to an account-level consent default (a known, acceptable gap, not a blocker).
- 10.Review, confirm the filter and field count shown match expectations, Finish.
Per Conversion Type (the two specific offline actions built in this project)
Each needs its own full pass through the flow above. Both reuse the same underlying Google Sheets data-source connection (built once, during the first action’s setup) — the second action’s wizard will prompt for a new OAuth authorization even though the connection already technically exists; this is expected Google Ads UI behavior, not a sign of a duplicate/broken connection, and does not require redoing the Sheets file selection from scratch.
- 1.Qualified Lead: Category "Qualified lead," filter lead_status equals Good Prospect, static value ₹1,550, Secondary.
- 2.Converted Lead: Category "Closed deal" (LinkedIn/Google’s closest match to "Closed Won" — there is no literal "Closed Won" category), filter lead_status equals Closed - Won, static value ₹10,332, Secondary.
Why the Native Conversion Tag Was Necessary (a real architectural pivot)
- 1.Generate Lead’s Google Ads conversion was initially set up via GA4-import (the simpler, no-extra-tag path). Later discovered to be a dead end: GA4-imported conversion actions cannot support Enhanced Conversions — confirmed directly via Google’s own documentation.
- 2.This forced a pivot to a native Google Ads Conversion Tracking tag (a separate, dedicated GTM tag, requiring its own Conversion ID/Label and a Conversion Linker tag) — what unlocked Enhanced Conversions, and also what triggered the bulk of the CSP-discovery work, since the native tag calls different Google endpoints than the GA4-import path did.
- 3.The original GA4-imported action was kept as a Secondary conversion (for reporting continuity) once the native tag became Primary.
- 4.Conversion Linker tag: a mandatory companion whenever any native Google Ads conversion tag exists — stores click-ID data in first-party browser storage, preserving attribution across increasing third-party cookie restrictions. Triggered on Initialization - All Pages.
Enhanced Conversions — the Two Separate Toggles
- 1."Enhanced conversions" (base) — covers on-site/web conversions, likely already on if any website conversion action uses hashed user data.
- 2."Enhanced conversions for leads" — a separate toggle specifically for offline/CRM-driven conversions (the Data Manager-based imports). Must be explicitly enabled on its own under Tools & Settings → Conversions → Settings — check this directly, don’t assume the base toggle covers it.
- 3.When enabling "for leads," choose Google Tag Manager (not "Google tag") to match this project’s consistent GTM-only architecture — this setting typically just confirms/points at the existing on-site infrastructure, no new on-site build usually required if that’s already in place.