# Google Analytics 4 & Google Ads Conversions

Google can see the click and the page views. It cannot see the phone call two days later, the chat that ended as a booked appointment, or the deal that closed a month on. Karmaflow.ai sees all of those, tied to the same person. This integration sends them to your Google Analytics 4 property as ordinary events, joined to the visitor's original GA session, so your GA4 reports and your Google Ads bidding learn from what actually happened, not only from what happened in the browser.

It works for every Google Ads campaign type, Search, Performance Max, Display, Video, Demand Gen and Shopping, because it never touches the campaign: it feeds the GA4 property you already link to Ads.

## What It Covers

- **A GA4 connection you own.** Paste the Measurement ID and a Measurement Protocol API secret from your web data stream; Karmaflow.ai sends server-side events through Google's Measurement Protocol. No OAuth grant, nothing installed on your site beyond the tag you already have. The connection is verified honestly: Google accepts a wrong secret silently, so the page asks you to confirm one live test event in GA4 Realtime before it calls itself connected.
- **An event map with sensible defaults.** Each Karmaflow.ai trigger maps to a GA4 event name and parameters. Out of the box the value-led events are on (a web form lead, a booked meeting, a deal moving stage, a completed call); top-of-funnel and support signals are off until you choose them. Rename any event, turn rows on or off, reset to defaults.
- **Conversation outcomes as events.** When a chat, call, text or email conversation finishes processing, Karmaflow.ai knows its outcome type (from your own analytics prompt) and sentiment. That becomes a `conversation_outcome` event, and a `generate_lead` event when the outcome is one you count as a conversion (a list you edit, e.g. `booked, qualified`).
- **The identity join.** On your site, the Karmaflow.ai tracker, the chat widget and any form posting to a Karmaflow.ai form endpoint capture the visitor's GA client id, session id and click ids (`gclid`, `gbraid`, `wbraid`). Later off-site events for that contact are sent under the same client id, so GA4 credits them to the original session's source and campaign.
- **Privacy built in.** No email, phone, name or message text ever reaches Google as a parameter. Hashed email and phone (user-provided data) are optional and never sent for a contact marked Do Not Contact. Consent Mode v2 signals ride on every event.
- **Custom events from workflows.** The **Send GA4 Event** step in the orchestration builder sends any event you name, with `{{field}}` values from the run, so a workflow can decide what counts and when.
- **Offline conversions straight into Google Ads.** The **Upload Google Ads Conversion** step reports a conversion to your Google Ads account by click id, or by hashed email and phone (Enhanced Conversions for Leads) when no click id exists. Ships switched off platform-wide until Google has approved the change to Karmaflow.ai's API application; the settings card says so in words.

## Why Teams Use It

**Smart Bidding optimises toward what you import.** Give it `chat_started` and it buys people who open the widget. Give it `conversation_outcome` with `generate_lead` on booked and qualified outcomes, and it buys people who convert in the conversation. The event map is where that choice is made.

**Off-site conversions finally count.** A tradesperson's leads convert on the phone; a clinic's convert in a chat; a B2B pipeline converts weeks later in a CRM. None of that is visible to a web-only tag. Sent as GA4 events under the visitor's own client id, they land inside the attribution window of the original ad click.

**One place to see what reached Google, and why not.** Every send and every deliberate skip is listed with a reason in plain words: *Not sent, no web identity*, *Not sent, do not contact*, *Rejected by Google* with Google's message. Nothing fails silently.

## Business Outcomes

| Outcome | How it happens |
|---|---|
| Bids follow real conversions | Key events imported into Ads from `conversation_outcome`, `generate_lead`, `purchase` and your own workflow events |
| Value-based bidding | Closed-won deals send `purchase` with value and currency; any workflow event can carry a value field |
| Offline journeys attributed | Calls, texts and deals credited to the ad click through the captured GA client id |
| Audiences you can act on | Build GA4 audiences from these events, for example "chatted, not booked" for remarketing or "purchase in 365 days" as an exclusion, and let GA4 export them to Ads |
| Compliance you can explain | Opt-out to DENIED consent signals, no PII parameters, hashed identifiers only where you turn them on |

## How It Works

```mermaid
flowchart LR
  subgraph Site["Your website"]
    Tag["Your Google tag<br/>(gtag / GTM)"]
    Widget["Karmaflow.ai tracker,<br/>chat widget, forms"]
  end
  subgraph KF["Karmaflow.ai"]
    Contact["Contact record<br/>GA client id · session id<br/>gclid / gbraid / wbraid"]
    Bus["Events: calls, texts, deals,<br/>tickets, conversation outcomes"]
    Map["Event map +<br/>workflow steps"]
    Log["Recent deliveries<br/>(every send and skip, with a reason)"]
  end
  subgraph Google["Google"]
    GA4["GA4 property"]
    Ads["Google Ads"]
  end
  Tag -->|"client_id, session_id"| Widget
  Widget -->|"captured on chat, form, tracked link"| Contact
  Bus --> Map
  Contact --> Map
  Map -->|"Measurement Protocol"| GA4
  Map --> Log
  GA4 -->|"key events imported,<br/>audiences exported"| Ads
  Map -.->|"Upload Google Ads Conversion<br/>(gclid or hashed email/phone)"| Ads
```

Two facts about the join worth knowing before you set expectations:

- **Attribution is at the user level.** A call three days after a web chat is credited to the ad click within your key-event lookback window (default 90 days), but it appears in GA4 as a new session for that user. It never shows inside the original web session.
- **Events need a captured web identity.** It is captured when the visitor chats, submits a form or clicks a tracked link while the Karmaflow.ai tracker or widget is on the page. Until then, off-site events for that contact are listed as *Not sent, no web identity*, unless you turn on the option to send them under a stable synthetic id (they then count as new, unattributed users).

## What's Different From a Web-Only Tag or a CRM Connector

| | Google tag alone | A CRM's native Ads connector | Karmaflow.ai |
|---|---|---|---|
| Sees chats, calls, texts, deals, tickets | No | Deals only, usually | All of them, from the platform that runs the agents |
| Knows the conversation's outcome | No | No | Yes, from your own analytics prompt |
| Joins to the original session | Yes, in-browser only | Rarely | Yes, via the captured client id |
| Works across all Ads campaign types | Yes | Often Search only | Yes, through the GA4 link |
| Shows every skipped send and why | No | Rarely | Yes, per row |
| Consent Mode v2 and no-PII parameters | Your responsibility | Varies | Built in |

## Learn More

- [Connect Google Analytics 4](/help/integrations/google-analytics-setup): the settings page, section by section
- [Conversation outcomes and custom events from workflows](/help/integrations/google-analytics-workflows): the outcome trigger, filters, the Send GA4 Event step and the native GA4 tag
- [Offline conversions to Google Ads](/help/integrations/google-ads-offline-conversions): the Upload Google Ads Conversion step and its settings card
- [Google Ads & Local Services](/help/integrations/google-ads): the Ads account link, lead answering and the revenue lifecycle
- [Web Analytics](/help/web-analytics/overview) and [Installing the tracker](/help/web-analytics/installing-the-tracker): where the identity capture starts
- [How the Google integrations work: technical architecture](/help/integrations/google-integrations-architecture): the identity join, click resolution and the GA4 bridge as pipelines, for technical evaluators

[Sign in to Karmaflow.ai](https://omni.karmaflow.ai/auth/login) to open **Settings → Integrations → Google Analytics 4**.
