<!--
AppSprint 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

Google Ads support is available in AppSprint for Signal Campaign reporting and click-based offline conversion upload.

A Google Signal Campaign uses a Google Ads setup with an AppSprint Signal link as its Tracking template. AppSprint captures the click ID, uploads selected in-app events back as offline conversions, and reports spend beside attributed installs and revenue.

## Requirements

- The AppSprint SDK installed and sending installs/events for this app.
- A Google account with access to the Google Ads customer account you want to connect.
- The 10-digit Google Ads Customer ID for the account that runs your Signal Campaigns.
- Auto-tagging enabled on that customer account (**Tools → Account settings → Auto-tagging**). It's on by default. Without it, clicks reach AppSprint with no click ID and conversions can't be uploaded.

## Available metrics and definitions

| Metric | Definition |
|--------|------------|
| Spend | Amount spent on the Google Signal Campaign over the selected window. |
| Installs | Installs attributed by AppSprint to this Signal Campaign. Falls back to Google's reported conversions when AppSprint 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 Signal Campaign. Falls back to Google's reported conversion value when AppSprint has no match. |

## Eligible in-app events

Map any of these SDK events to a Google Ads conversion action. Events from installs without a Google click ID are skipped automatically (Google would reject them).

`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`

## Click identifiers AppSprint accepts

| Click ID | When it's used |
|----------|----------------|
| `gclid` | Standard Google click ID for web clicks and older/pre-ATT iOS flows. |
| `gbraid` | SKAdNetwork-compatible identifier for web-to-app iOS clicks. Sent alongside `gclid` for iOS App Campaigns when both are present. |
| `wbraid` | SKAdNetwork-compatible identifier for app-to-web iOS clicks. |

AppSprint does not fall back to IDFA, GAID, or `mobileId` for Google uploads. Without a Google click ID, the conversion is skipped.

## Setup

### 1. Connect Google Ads

1. In AppSprint, 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 customer account you want to connect.
3. Approve access, then enter the **Customer ID** for the account that runs your Signal Campaigns.
4. Fill the **Manager Customer ID** or **Conversion Customer ID** only for cross-account setups.

### 2. Create the conversion actions in Google Ads

> **Use click-based import actions.** AppSprint uploads offline conversions from ad clicks. Other conversion-action types will not accept these uploads. New actions also need about six hours to index before Google accepts uploads, so create them before launch.

1. In Google Ads, go to **Goals → Conversions → Summary → New conversion action**.
2. On the data-source screen, pick **Conversions offline**.
3. Click **Edit data sources** on the offline card, then choose **Skip this step and set up a data source later**. The card should show **Connect data source later**.
4. Leave **Enhanced conversions for leads** off unless you are also sending hashed lead-form data. If Google shows a click/call choice, pick **Track conversions from clicks**.
5. On **Group your conversions**, choose the category that matches the event: **Sign-up** for trials or account creation, **Purchase** for one-time purchases, and **Subscribe** for paid subscriptions. Avoid qualified/converted lead unless you intentionally track lead statuses.
6. In the category card, click **+ Create conversion**. Name the action after the AppSprint event, for example `appsprint_start_trial`, `appsprint_purchase`, or `appsprint_subscribe`.
7. Keep the action **Primary** when campaigns should optimize for it. Use different values for purchases/subscriptions, and use a simple default value for trials or sign-ups.
8. After Google indexes the actions, return to **Integrations → Google Ads → Event mapping** and click **Discover actions**. New actions can appear immediately; select them in the dropdowns, click **Save mappings**, then reload the page to confirm the saved mappings are still selected.

### 3. Map your in-app events

In **Integrations → Google Ads → Event mapping**, click **Discover actions** and map the events your Signal Campaigns optimize for. Only enabled click-based actions are shown. Click **Save mappings** after selecting the dropdowns, then reload the page to verify the mappings were saved.

When your app sends `googleAdsConsent.adUserData`, AppSprint forwards it as Google's `consent.adUserData` on the upload. AppSprint never invents a consent value.

### 4. Create the Google Ads Signal Campaign

> **Campaign-level template, store URL as final URL.** The AppSprint URL goes in the campaign-level **Tracking template**. Your ad's Final URL stays as the App Store or Play Store page. Do not paste the AppSprint URL into Final URL or Final URL suffix.

1. In AppSprint, copy the generated Google Signal link from the Google Ads integration. Use the full Google Tracking template URL.
2. In Google Ads, click **+ Create → Campaign**. On **What's your campaign objective?**, choose **Website traffic** or **Create a campaign without guidance**. Do not choose **App promotion** for this workflow.
3. On the campaign type screen, Google shows options like **Performance Max**, **Search**, **Demand Gen**, **Video**, **Display**, and **Shopping**. Choose **Search** for your first Signal Campaign.
4. On **Select the ways you'd like to reach your goal**, enter the real destination link: your App Store URL for iOS or your Play Store URL for Android. Do not enter the AppSprint Tracking template URL here.
5. On **Use these conversion goals to improve Website traffic**, keep only the goal that contains the AppSprint conversion action you mapped, such as **Purchases**, **Sign-ups**, or **Begin checkout**. Expand the goal or action count if needed and check the action name. Remove unrelated account-default goals from **More actions**.
6. Name the campaign, then continue through Google's normal campaign setup: bidding, budget, locations, languages, keywords, and ads. Choose the bidding settings that match your Google Ads strategy.
7. Set devices to mobile only. If Google exposes operating-system targeting for the campaign type, keep only the platform for this app: iOS for App Store campaigns, Android for Play Store campaigns.
8. Create the ad group and ad. Use keywords that match your app or use case, and put your App Store or Play Store page in the ad **Final URL**.
9. Before publishing, open **Settings → Campaign URL options → Tracking template** and paste the full AppSprint Google Tracking template there. AppSprint's template already includes Google click IDs and the final-URL insertion token Google needs.
10. Click **Test**. The test should resolve through AppSprint and end on the store page. Fix any URL errors before launch.
11. Publish the campaign. Conversions usually appear in Google Ads within 24 hours.

## Troubleshooting

| Problem | What to try |
|---------|-------------|
| Authentication failed | The Google account you connected lost access to the Google Ads customer account. Disconnect Google Ads in AppSprint and reconnect with an account that can access that customer. |
| Customer not found | Re-check the Customer ID (10 digits, 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 | New conversion actions need around six hours to index before Google accepts uploads. AppSprint retries automatically. Total click-to-conversion latency in Google Ads is up to 24 hours. |
| Events being skipped | Google 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 reports use AppSprint attribution. Google reports use its conversion view. Numbers diverge for users without a Google click. AppSprint 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
- [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)) — Keyword and ad attribution
- [Google Ads](https://appsprint.app/docs/google-ads) ([Markdown](https://appsprint.app/docs/google-ads.md)) — Reporting and offline conversion upload
- [TikTok Ads](https://appsprint.app/docs/tiktok-ads) ([Markdown](https://appsprint.app/docs/tiktok-ads.md)) — Events API server-side event forwarding
- [Meta Ads](https://appsprint.app/docs/meta-ads) ([Markdown](https://appsprint.app/docs/meta-ads.md)) — In review
