<!--
AppSprint Attribution docs markdown
Canonical HTML: https://appsprint.app/docs/google-ads
Markdown URL: https://appsprint.app/docs/google-ads.md
Docs index: https://appsprint.app/docs.md
Sitemap: https://appsprint.app/sitemap.xml
LLM guide: https://appsprint.app/llms.txt
-->

# Google Ads

Connect Google Ads to upload offline conversions when in-app events fire and to see spend next to the installs attributed by AppSprint Attribution to each campaign. You connect the account, map your events to conversion actions, and add a tracking template to your campaigns.

## Prerequisites

- A Google account with access to the Google Ads customer account you want to connect.
- The Google Ads Customer ID for the account you want to track.
- At least one offline conversion action per app, created in Google Ads before connecting (Google takes around six hours to index a new conversion action before it accepts uploads).
- Auto-tagging enabled in Google Ads (**Tools → Account settings → Auto-tagging**). It's on by default. AppSprint Attribution relies on auto-tagging to receive the click ID through your tracking template; with it off, clicks land at AppSprint Attribution without a click ID and conversions can't be uploaded.
- If you serve users in EEA, UK, or Switzerland, collect Google Ads ad user data consent in your app and send it through the SDK. AppSprint Attribution forwards that consent signal only when your app provides it.

## Reference

### Available metrics

| Metric | Definition |
|--------|------------|
| Spend | Amount spent on the Google Ads campaign over the selected window. |
| Installs | Installs attributed by AppSprint Attribution to this campaign. Falls back to Google's reported conversions when AppSprint Attribution has no match. |
| CPI | Cost per install. Spend divided by attributed installs. |
| IPM | Installs per 1,000 impressions. |
| Impressions | Times the ad was shown, reported by Google. |
| CPM | Cost per 1,000 impressions. |
| Clicks | Ad clicks, reported by Google. |
| CPC | Cost per click. |
| CTR | Click-through rate. Clicks divided by impressions. |
| CTI | Click-to-install rate. Installs divided by clicks. |
| ROAS | Return on ad spend. Attributed revenue divided by spend. |
| Revenue | Revenue from in-app events attributed to this campaign. Falls back to Google's reported conversion value when AppSprint Attribution has no match. |

### Eligible in-app events

You can map any of the following in-app events to a Google Ads conversion action. AppSprint Attribution forwards every event the SDK records, but Google requires a click ID on every upload, so events from installs without one are skipped automatically.

`install`, `login`, `sign_up`, `register`, `purchase`, `subscribe`, `start_trial`, `add_payment_info`, `add_to_cart`, `add_to_wishlist`, `initiate_checkout`, `view_content`, `view_item`, `search`, `share`, `tutorial_complete`, `achieve_level`, `level_start`, `level_complete`

## Connect to Google Ads

1. In the AppSprint Attribution dashboard, open your app and go to **Integrations → Google Ads**.
2. Click **Connect Google Ads** and sign in with a Google account that can access the Google Ads customer account you want to connect.
3. Approve the access request when Google prompts you. You'll be redirected back to AppSprint Attribution.
4. Enter your **Customer ID** (10 digits; hyphens are stripped for you).
5. If you manage the account through an MCC, also enter the **Manager Customer ID**. If your conversion actions live on a different account, fill in the optional **Conversion Customer ID**; otherwise leave it blank.

## Configure the conversion uploads

### Step 1: Create your conversion actions in Google Ads

1. In Google Ads, go to **Goals → Conversions → Summary → New conversion action**.
2. Pick **Import** → **Other data sources or CRMs** → **Track conversions from clicks**. Other action types won't accept AppSprint Attribution's uploads.
3. Create one conversion action per in-app event you want to send back to Google Ads.

### Step 2: Map your in-app events

In **Integrations → Google Ads → Event mapping**, click **Discover actions** to pull the conversion actions from your account. Only click-based actions that are enabled show up. Other types would be rejected.

Map each in-app event you care about to a conversion action. AppSprint Attribution sends the event to Google whenever the matching SDK event fires on an install that has a click ID.

When your app sends `googleAdsConsent.adUserData`, AppSprint Attribution includes Google's `consent.adUserData` field on the conversion upload. AppSprint Attribution does not invent a consent value when the SDK omits it.

### Step 3: Add the tracking template

1. In the AppSprint Attribution dashboard, click **Create ad link** and paste your App Store or Play Store URL as the destination. Copy the tracking link AppSprint Attribution generates.
2. In Google Ads, open each campaign you want to track and go to **Settings → Campaign URL options → Tracking template**.
3. Paste the AppSprint Attribution link there, not into the final URL. The tracking template runs before Google's redirect, so clicks still land on your app store page; AppSprint Attribution just captures the click ID along the way.
4. Set the campaign's device and operating-system targeting to match the app platform you connected.
5. Launch the campaign. Click-to-conversion latency in Google Ads is up to 24 hours, and new conversion actions need around six hours of indexing before they accept uploads.

## Click identifier notes

- `gclid` is Google's standard click ID for web clicks and older/pre-ATT iOS flows.
- `gbraid` is Google's SKAdNetwork-compatible identifier for web-to-app iOS clicks.
- `wbraid` is Google's SKAdNetwork-compatible identifier for app-to-web iOS clicks.

For iOS App Campaigns, AppSprint Attribution sends both `gclid` and `gbraid` when both are present.

AppSprint Attribution does not fall back to IDFA, GAID, or `mobileId` for Google Ads uploads. If an install has no Google click ID, AppSprint Attribution skips the Google conversion because Google would reject the upload.

## Troubleshooting

A few things to check first:

- The tracking template is set at the campaign level, not on individual ads.
- The campaign's device and operating-system targeting matches the app platform you connected.
- Conversion actions are enabled and use the click-based import type. Other types will be rejected.

| Problem | What to try |
|---------|-------------|
| Authentication failed | The Google account you connected lost access to the Google Ads customer account. Disconnect Google Ads from the AppSprint Attribution dashboard and reconnect with an account that can access that customer. |
| Customer not found | Double-check the Customer ID. It's the 10-digit ID in Google Ads, with hyphens stripped. If you access the account through an MCC, also fill in the Manager Customer ID field. |
| Conversions aren't showing up in Google Ads | Newly created conversion actions need around six hours of indexing before Google accepts uploads. AppSprint Attribution retries automatically, but expect a delay before the first conversions appear. Total click-to-conversion latency in Google Ads is up to 24 hours. |
| Events being skipped | Google Ads requires a click ID on every offline conversion. Installs without one (typically organic users who never clicked a tracked ad) are skipped intentionally; Google would otherwise reject them. |
| Reporting numbers don't match Google Ads | AppSprint Attribution reports installs and revenue based on its own attribution. Google reports based on its conversion view. Numbers diverge for users without a Google click, and AppSprint Attribution uses its own number whenever it has one. |

---

## Docs navigation

Use the Markdown URLs when reading the docs programmatically. Use the HTML URLs when you need the interactive docs UI.

- [Overview](https://appsprint.app/docs) ([Markdown](https://appsprint.app/docs.md)) — Introduction to AppSprint Attribution
- [Quickstart](https://appsprint.app/docs/quickstart) ([Markdown](https://appsprint.app/docs/quickstart.md)) — Get up and running in 5 minutes
- [React Native](https://appsprint.app/docs/react-native) ([Markdown](https://appsprint.app/docs/react-native.md)) — React Native / Expo SDK reference
- [iOS (Swift)](https://appsprint.app/docs/ios-swift) ([Markdown](https://appsprint.app/docs/ios-swift.md)) — Native Swift SDK reference
- [Android (Kotlin)](https://appsprint.app/docs/android) ([Markdown](https://appsprint.app/docs/android.md)) — Native Android SDK reference
- [Flutter](https://appsprint.app/docs/flutter) ([Markdown](https://appsprint.app/docs/flutter.md)) — Flutter plugin reference
- [RevenueCat](https://appsprint.app/docs/revenuecat) ([Markdown](https://appsprint.app/docs/revenuecat.md)) — Webhook integration for subscription attribution
- [Superwall](https://appsprint.app/docs/superwall) ([Markdown](https://appsprint.app/docs/superwall.md)) — Webhook integration for paywall attribution
- [Apple Search Ads](https://appsprint.app/docs/apple-search-ads) ([Markdown](https://appsprint.app/docs/apple-search-ads.md)) — Campaign and keyword attribution
- [Google Ads](https://appsprint.app/docs/google-ads) ([Markdown](https://appsprint.app/docs/google-ads.md)) — Offline click conversion upload
- [TikTok Ads](https://appsprint.app/docs/tiktok-ads) ([Markdown](https://appsprint.app/docs/tiktok-ads.md)) — Events API server-side event forwarding
