# ChatGPT Ads Source: https://docs.linkrunner.io/ad-networks/chatgpt-ads Run ChatGPT Ads (OpenAI) with Linkrunner attribution, oppref click IDs, and OpenAI Conversions API postbacks ## Overview Use ChatGPT Ads with Linkrunner when you want to send ChatGPT ad traffic through one Linkrunner campaign link, attribute installs and in-app events, and send server-side conversions back to OpenAI through the OpenAI Conversions API. The recommended flow is: 1. Create or prepare your ChatGPT Ads account in [ChatGPT Ads Manager](https://ads.openai.com). 2. Create a Pixel and a Conversions API key in OpenAI Ads Manager under **Tools → Conversions**. 3. Add the Pixel ID and Conversions API key in Linkrunner and validate them. 4. Create a Linkrunner campaign link for each ChatGPT ad you want to measure. 5. Use that link as the ad's destination URL, and set the landing page query parameters. 6. Test the full click, install, first open, and event flow before scaling spend. Linkrunner captures OpenAI's `oppref` click ID when a user clicks your ChatGPT ad. ChatGPT appends this value to the destination URL, so keep the Linkrunner campaign link intact and do not remove query parameters. ChatGPT app attribution is **click-through only**. There is no view-through attribution for app events, so an install with no `oppref` cannot be matched back to a ChatGPT ad. ## What you need * A Linkrunner project with the Linkrunner SDK installed in your app * Android and iOS store URLs configured in Linkrunner * Deep linking configured if the ad should open a specific in-app screen * Access to a ChatGPT Ads account * A **Pixel ID** * A **Conversions API key** Use the **Conversions API key**, not the Ads management API key. They are different credentials and only the Conversions API key authorizes event ingestion. You do not need a partnership with OpenAI to send Conversions API events. Any advertiser can create a Pixel ID and Conversions API key in Ads Manager and paste them into Linkrunner. ## How ChatGPT Ads Manager is organized Everything in [ChatGPT Ads Manager](https://ads.openai.com) hangs off four levels: | Level | What it holds | | -------------- | --------------------------------------------------------------------------------------------- | | **Ad account** | Billing, users, API keys, and your Pixels | | **Campaign** | Objective, budget, schedule, and the conversion event a conversions campaign optimizes toward | | **Ad group** | Targeting and bidding | | **Ad** | Title, description, images, and the **destination URL** | Two places in the left nav matter for this integration: * **Tools → Conversions** holds your **Pixel ID** and your **Conversions API key**. Both go into Linkrunner. * **Settings** holds the **Ads API key**, which manages campaigns. Linkrunner does not use it. These are two different credentials. Linkrunner needs the **Conversions API key** from **Tools → Conversions**. The Ads API key from **Settings** will not authorize conversion events. The destination URL lives on the **ad** (and can be defaulted from the ad group), and landing page query parameters can be set at campaign, ad group, or ad level. That is the whole surface Linkrunner touches. ## 1. Create a Pixel and Conversions API key Go to [ChatGPT Ads Manager](https://ads.openai.com) and sign in to the advertiser account that will run the campaign. If this is your first ChatGPT campaign, complete the business, billing, and advertiser setup first. Open **Tools → Conversions**. It has three tabs: **Data Source**, **Conversion Events**, and **Event Stream**. On **Data Source**, the string under each data source name is its **Pixel ID**. Copy it. The Pixel ID on the Data Source tab in ChatGPT Ads Manager Then click the key icon in the top right to open **Conversion keys**, and click **Create new key**. Copy the key when it is shown, because it is only displayed once. Creating a Conversions API key in ChatGPT Ads Manager Keep both values ready: * **Pixel ID** - identifies the data source that should receive conversions. * **Conversions API key** - authorizes Linkrunner to send events. App events (`app_installed`, `app_opened`) are Conversions API only. OpenAI does not currently support native mobile SDK setup or mobile data sources, so use a Pixel ID from an existing **web** data source. On the **Conversion Events** tab, confirm you have a conversion event whose base event is the one Linkrunner will send, usually `app_installed`. This is the event a conversions campaign optimizes toward, so it has to exist here before you create the campaign. The Conversion Events tab in ChatGPT Ads Manager ## 2. Add ChatGPT Ads credentials in Linkrunner Open your Linkrunner project and go to **Dashboard > Integrations > ChatGPT Ads**. 1. Open **Pixel Management**. 2. Click **Add ChatGPT Ads Pixel**. Pixel Management on the ChatGPT Ads integration page in Linkrunner 3. Paste the Pixel ID and Conversions API key. 4. Click **Validate** to check them, then **Save Configuration**. Add ChatGPT Ads CAPI credentials in Linkrunner Validation sends a synthetic `app_opened` event with OpenAI's `validate_only` flag, so it confirms the credentials without recording a conversion in your Ads Manager reporting. Use the Pixel ID and Conversions API key from the same ChatGPT advertiser account. A mismatched Pixel or key prevents OpenAI from accepting or matching events. ## 3. Map events for ChatGPT Ads Open the **Event Mapping** tab inside the ChatGPT Ads integration page. This tab becomes available after the Pixel ID and Conversions API key are saved. ChatGPT Ads event mapping in Linkrunner Linkrunner creates the default mappings for you when you connect. Click **Add Mapping** for any additional app event you want ChatGPT to optimize or report on. These defaults are created automatically on connect: | Linkrunner event | ChatGPT Ads event | | ---------------------- | ------------------------ | | Install or first open | `app_installed` | | App open | `app_opened` | | Registration or signup | `registration_completed` | | Purchase | `order_created` | Other standard events you can map: | Linkrunner event | ChatGPT Ads event | | --------------------------- | ----------------------- | | Lead form or qualified lead | `lead_created` | | Appointment booked | `appointment_scheduled` | | Checkout started | `checkout_started` | | Add to cart | `items_added` | | Product or content view | `contents_viewed` | | Screen or page view | `page_viewed` | | Subscription started | `subscription_created` | | Free trial started | `trial_started` | | Anything else | `custom` | ### Custom events Pick **Custom Event (custom)** when your app event has no standard equivalent, then type the event name ChatGPT should record it as. Typing a custom event name in the ChatGPT Ads event mapping OpenAI matches a custom conversion on its name, so type the **same name you already use in ChatGPT Ads Manager**. If your web pixel fires `add_to_wishlist` and you type something else here, OpenAI treats them as two different events: they will not deduplicate, and they will not roll up against the conversion event on the **Conversion Events** tab. Names are lowercase and up to 64 characters. Conversion-optimized (oCPC) campaigns optimize toward exactly one **standard** event. A custom event cannot be used as an optimization goal, which is why Linkrunner maps installs to `app_installed` rather than to a custom event. Start with the default install and signup behavior plus a purchase mapping. Add the rest after your first campaign is sending clean traffic and Ads Manager shows successful event delivery. For purchase or revenue events, enable **Send Revenue** and choose the currency. Linkrunner converts the amount into the integer minor unit OpenAI expects (for example, USD 42.00 is sent as `4200`), including zero-decimal currencies such as JPY. ## 4. Create a Linkrunner campaign link Before you create the ChatGPT ad, create the Linkrunner campaign link that ChatGPT will send users to. 1. Go to **All Campaigns** in Linkrunner. 2. Click **Create Link**. 3. Enter a campaign name. The **Display ID** fills in automatically and becomes the unique code at the end of your campaign link. 4. Turn on **Enable Deferred deeplinking** if the ad should open a specific in-app screen after install. 5. Open **Advanced Options**. 6. Under **Ad Channel**, select **ChatGPT Ads**. 7. Click **Create Campaign**, then copy the campaign link. Select ChatGPT Ads as the ad channel when creating a Linkrunner campaign Selecting **ChatGPT Ads** is what tells Linkrunner to send this campaign's conversions to the OpenAI Conversions API. A campaign left on **None** still records clicks, but sends no postbacks. Create a new Linkrunner campaign for every ChatGPT destination link you want measured independently: different creatives, landing destinations, audiences, or experiments. Do not paste the App Store or Play Store URL directly into ChatGPT Ads if you want Linkrunner attribution, deferred deep linking, or OpenAI CAPI postbacks. ChatGPT must send the user to the Linkrunner campaign link first. ## 5. Create the ChatGPT campaign After the Linkrunner campaign link is created, go to [ChatGPT Ads Manager](https://ads.openai.com) and create the campaign that will use it. The **New campaign** wizard has three steps: **Create Campaign**, **Create Ad Group & Ads**, and **Review**. ### Step 1: Create Campaign Name the campaign, then set: * **Objective** to **Conversions**, so OpenAI optimizes delivery toward your app event. * **Conversion event** to the event you want to buy, usually **App Installed**. This list comes from the **Conversion Events** tab you checked earlier. * **Locations**, **Eligible platforms**, **Budget**, and the schedule. Setting the objective and conversion event on a ChatGPT campaign A conversions campaign optimizes toward exactly **one standard** event, and the objective cannot be changed after the campaign is created. Pick the event you actually want to buy, usually `app_installed`. A `custom` event cannot be an optimization goal. Start with a deliberately low daily budget so you can verify the full click, install, and event flow before any meaningful spend. ### Step 2: Create Ad Group & Ads Name the ad group and set the bid strategy, then fill the two fields Linkrunner depends on. Setting the Linkrunner campaign link and tracking macros on a ChatGPT ad group **Default Ad Destination URL** takes your **Linkrunner campaign link**, and every new ad in the ad group inherits it: ``` https://app.product.com/AbCdEf ``` Nothing else goes in that field. ChatGPT appends `oppref` to it on every click. Do not replace the Linkrunner campaign link with a store URL or your website URL. ChatGPT must send the click to Linkrunner first so Linkrunner can capture `oppref`, redirect the user, attribute the install, and send the CAPI postbacks. **Landing page query parameters** takes the tracking macros: ``` campaign_id={campaign_id}&ad_group_id={ad_group_id}&ad_id={ad_id} ``` This field exists at campaign, ad group, and ad level, and the most specific level wins. Setting it once on the campaign covers everything beneath it. The supported macros are `{campaign_id}`, `{ad_group_id}`, `{ad_id}`, `{ad_account_id}`, and `{oppref}`. Do not add `oppref` as a parameter name. ChatGPT reserves it and rejects the field with "Reserved query parameters are not supported: olref, oppref." It appends `oppref` to the landing URL itself on every click, so all you have to do is make sure nothing in your setup strips query parameters. ChatGPT substitutes each macro at click time, so a real click arrives at your Linkrunner link as: ``` https://app.product.com/AbCdEf?campaign_id=cmp_123&ad_group_id=grp_456&ad_id=ad_789&oppref=gAAAA... ``` Linkrunner records these macro values against every click, so a single Linkrunner campaign link gives you a per campaign, ad group, and ad breakdown. You only need separate links when you want the campaigns themselves kept apart in Linkrunner. If an ad points at a link with no Linkrunner campaign on it, Linkrunner creates one from the `{campaign_id}` macro (named `ChatGPT Ads - `) so the installs still land on a campaign instead of showing as organic. ### Step 3: Create the ad Add the headline, description, and images. **Destination URL** is pre-filled from the ad group's default, so leave it as the Linkrunner campaign link. The Destination URL on a ChatGPT ad ### Step 4: Review and publish 1. Confirm the ad account owns the same Pixel configured in Linkrunner. 2. Confirm the destination URL is the Linkrunner campaign link. 3. Confirm the landing page query parameters are set. 4. Confirm the budget is intentionally low for the first test. 5. Unpause the campaign when everything is correct. ## 6. Open a specific screen with deep linking By default a ChatGPT ad sends a new user to your app's home screen. Deep linking sends them to a specific screen instead, such as the exact product in the ad, and it keeps working when the user did not have your app yet: they tap the ad, install from the store, and land on that screen the first time they open the app. That second case is called **deferred** deep linking, and it is the one that matters for ads. You do not need a different link for this. The same Linkrunner campaign link carries it. Your app must handle deep links before this works. Follow [Deep Linking Setup](/features/deep-linking-setup) first, then come back here. In the **Create Campaign** form, switch on **Enable Deferred deeplinking?**, then enter the screen you want users to land on. Enable Deferred deeplinking in the Linkrunner Create Campaign form Enter the destination your app already knows how to open, for example: ```text theme={null} https://app.product.com/product ``` Keep values that change per ad out of this field. A value set here always wins over the same value on the clicked link, so putting `variant_id` here would force every ad to the same product. Step 3 is where per-ad values go. Nothing changes in ChatGPT Ads Manager. Paste the **Linkrunner campaign link** into **Default Ad Destination URL** on the ad group, exactly as you would for a campaign without deep linking. Where to paste the Linkrunner campaign link and the tracking macros in ChatGPT Ads Manager Do not paste the deep link destination (`https://app.product.com/product`) here. That value stays in Linkrunner, on the campaign. ChatGPT only ever sees the campaign link, and Linkrunner resolves the destination after the install. Put your own values in **Landing page query parameters**, next to the tracking macros, and set them at the level you want them to vary. Setting them on an individual ad lets each creative open a different screen: ```text theme={null} campaign_id={campaign_id}&ad_group_id={ad_group_id}&ad_id={ad_id}&variant_id=987 ``` Linkrunner merges these onto the destination from Step 1, so this ad resolves to: ```text theme={null} https://app.product.com/product?variant_id=987 ``` Use this field rather than editing the destination URL. The macros already live here, the values stay in one place, and the campaign, ad group, and ad levels give you exactly the granularity you need. After the user installs and opens your app, call `getAttributionData()`. The `deeplink` field holds the resolved URL: ```json theme={null} { "deeplink": "https://app.product.com/product?variant_id=987&campaign_id=cmp_123&ad_group_id=grp_456&ad_id=ad_789&oppref=gAAAA..." } ``` Read the values your app defined, in this example `variant_id`, and route the user to that screen. The tracking values ride along. `oppref`, `campaign_id`, `ad_group_id`, and `ad_id` are merged into the deep link with everything else, so your app must read the parameters it knows and ignore the rest. Do not fail or show an error screen on an unrecognized parameter. ### Test it before you spend Deferred deep linking only takes the deferred path on a genuinely fresh install, so test in this order: 1. Delete your app from the test device. 2. Click your Linkrunner campaign link on that device. 3. Install the app from the store. 4. Open the app and log what `getAttributionData()` returns. 5. Confirm `deeplink` holds the destination you configured, with your parameters on it. Reinstalling over an existing install, or opening the link on a device that already has the app, tests direct deep linking rather than the deferred path. Delete the app first or the result will not tell you what you think it does. ## How attribution and CAPI work When a ChatGPT user clicks your ad, OpenAI appends `oppref` to the destination URL. It is an opaque token, and Linkrunner captures it on the campaign link click and carries it through install attribution unchanged. For attributed installs and mapped in-app events, Linkrunner sends an OpenAI Conversions API event to `https://bzr.openai.com/v1/events?pid=` containing: * The OpenAI click ID (`oppref`) * The mapped event name and its data type * Event time in milliseconds * A deterministic deduplication ID, so a retry never double-counts * Hashed user identifiers when available (email, phone, external ID, name) * Google Advertising ID, IP address, user agent, and coarse location when available * Amount in integer minor units plus currency, for revenue events Every request is tagged with `integration_source: linkrunner`. Conversions typically appear in the Ads Manager **Conversions** metric 24 to 48 hours after the event is sent. ## Frequently Asked Questions ChatGPT campaigns do not appear automatically on the Linkrunner dashboard. They show up after users click the Linkrunner campaign links you set as destination URLs in your ChatGPT ads. Confirm each ad uses a Linkrunner campaign link, the ad is active and receiving traffic, and your app is live with the Linkrunner SDK installed. `oppref` is OpenAI's click ID. ChatGPT appends it to the destination URL when a user clicks an ad, and Linkrunner captures it from the campaign link click. It is the only key OpenAI matches app conversions on. Keep the Linkrunner campaign link intact and do not strip URL parameters, or Linkrunner cannot match the install or event back to the ad click. OpenAI's Conversions API accepts `android_advertising_id` (GAID) but does not support IDFA. On iOS, matching relies on `oppref` plus any hashed user identifiers your app provides, so iOS attribution depends on the click ID being preserved. OpenAI rejects any event whose timestamp is more than 7 days old, and a single rejected event fails the entire batch it was sent in. Linkrunner drops events older than 7 days before sending and logs them as skipped, so one stale event can never block your other conversions. Not for app events. ChatGPT app attribution is click-through only. A 1-day view-through window exists for web events, but it is reporting-only and does not apply to installs or in-app events. OpenAI opened self-serve Ads Manager to India, 31 European markets, and 11 MENA markets on 31 August 2026, in addition to the earlier US, CA, AU, NZ, UK, JP, and KR markets. Check Ads Manager for the current list for your account. Yes. Map your purchase event to `order_created` and enable **Send Revenue** with the correct currency. Linkrunner converts the amount to the integer minor unit OpenAI requires. Use the **Validate** action on the Pixel Management tab to confirm credentials, then use Linkrunner's test-event action for a mapped event. Verify installs and events through the Linkrunner SDK testing flow first, then confirm delivery in the Ads Manager Conversions tab after 24 to 48 hours. ## Related setup Configure Android App Links and iOS Universal Links. Read deferred deep link data after first app open. **Need help?** Contact [support@linkrunner.io](mailto:support@linkrunner.io) # Google Ads Source: https://docs.linkrunner.io/ad-networks/google-ads Connect your app with Google Ads for enhanced campaign tracking and optimization ## Overview Google Ads integration with Linkrunner enables you to track conversions and optimize your app campaigns directly within the Google Ads platform. This integration allows you to import events from your app into Google Ads as conversion actions, providing better insights into your campaign performance and user behavior. ## Setup Process Setting up Google Ads integration involves four main steps: connecting your Google Ads account, creating a link ID for your mobile app, mapping events in Linkrunner, and importing events for conversion tracking. Running iOS App Campaigns? Google measures iOS installs via SKAdNetwork. After completing this guide, follow the [Google Ads SKAN Setup](/features/google-skan-setup) guide. ## 1. Connect Your Google Ads Account Start in the Linkrunner dashboard. 1. Go to [Integrations](https://dashboard.linkrunner.io/dashboard/integrations) and click **Configure** on the **Google Ads** card All Integrations page with the Google Ads card 2. On the **Account Integration** tab, click **Add Google Account** 3. Sign in with a Google account that has access to your Google Ads account and approve the requested permissions Once connected, your account appears in the **Google Ad Accounts** table with **Auth Status** showing **Connected**. ## 2. Create Link ID for Android/iOS App To connect your mobile app with Google Ads, you'll need to create a link ID that enables data sharing between Linkrunner and Google Ads. ### Step 1: Access Third-party App Analytics 1. Go to your Google Ads dashboard 2. Navigate to **Tools** (side panel) → **Data Manager** → **Third-party app Analytics** 3. Or visit directly: [https://ads.google.com/aw/productlinks/thirdpartyappanalytics](https://ads.google.com/aw/productlinks/thirdpartyappanalytics) and click on **Create Link ID** Google Ads Dashboard - Third-party App Analytics ### Step 2: Add App Analytics Provider 1. In the Third-party app analytics section, click on the **"+ Create link ID"** 2. Select **"Other provider"** from the App analytics provider dropdown menu 3. Enter the following provider ID: `9936233049` 4. Select the platform (iOS or Android) and search for your app 5. Click on **"Create link ID"** Google Ads third-party app analytics form with Other provider selected Google Ads then shows the generated link ID. Copy it. Google Ads confirmation dialog with the generated link ID and its copy button Link IDs are per platform. Repeat Step 2 for your other platform if you ship both Android and iOS. ### Step 3: Configure in Linkrunner Dashboard Now paste that link ID into Linkrunner. 1. Go to [Integrations → Google Ads](https://dashboard.linkrunner.io/dashboard/integrations/google-ads) in your Linkrunner dashboard 2. On the **Account Integration** tab, open the three-dot menu on your Google Ads account row Linkrunner Google Ad Accounts table with the three-dot menu on the account row highlighted 3. Choose **Setup Link IDs** Account row menu open showing the Setup Link IDs option 4. Paste the link ID into **Android Link ID** or **iOS Link ID**, matching the platform you selected in Google Ads 5. Click **Save Link IDs** Setup Link IDs dialog with the Android field, iOS field, and Save Link IDs button highlighted in order You only need one link ID to save, but add both if you ship on Android and iOS. ## 3. Set Up Event Mapping Map your app events to Google Ads events so Linkrunner can send postback conversions. **Install** and **Sign up** are included by default as `first_open` and `sign_up`. You do not need to add mappings for these events. 1. Go to [Google Ads Event Mapping](https://dashboard.linkrunner.io/dashboard/integrations/google-ads?tab=event_mapping) 2. Click **Add Mapping** 3. Select your event under **Your Events** 4. Select the matching **Google Ads Event** 5. Turn on **Send Revenue** only for revenue events, then choose the **Currency** 6. Click **Save** 7. Click the paper plane **Send event to ad network** icon to fire a test event Google Ads event mapping table in Linkrunner After Linkrunner sends an event, it can take up to **6 hours** to appear in Google Ads. If an event is not available as a conversion action in Google Ads, fire a test event from Linkrunner, then import it from **Goals** → **Conversions** → **Summary** after Google finishes processing it. ## 4. Importing Events for Conversion Actions Setup After creating the link ID and mapping events in Linkrunner, you can import app events into Google Ads to set up conversion tracking. ### Step 1: Access Conversions Dashboard 1. On Google Ads Dashboard, navigate to **Goals** \[sidebar] → **Conversions** → **Summary** 2. Or visit directly: [https://ads.google.com/aw/conversions](https://ads.google.com/aw/conversions) ### Step 2: Create Conversion Action 1. Click on **"+ Create conversion action"** 2. On the "Start tracking conversions" popup: * Select **"App"** * Then select **"Third-party app analytics"** * Press **Continue** ### Step 3: Import Events 1. Select all the events you want to import from the available list 2. To get started, we recommend selecting the `first_open` event 3. Configure additional settings as needed for each conversion action 4. Save your conversion actions ## 5. Create Your First Campaign With steps 1 to 4 complete, launch an App campaign in Google Ads. App campaigns need no tracking links. Attribution flows through the link ID, and campaigns appear in Linkrunner automatically as installs come in. ### Step 1: Start a New Campaign 1. Open [Google Ads](https://ads.google.com) and go to **Campaigns** 2. Click the **+** button and choose **New campaign** Google Ads Campaigns page with the create button and New campaign menu item highlighted 3. Under **What's your campaign objective?**, select **App promotion** and click **Continue** Campaign objective screen with the App promotion card highlighted ### Step 2: Choose Subtype and Select Your App 1. Under **Select a campaign subtype**, choose the subtype that matches your goal. **App installs** is the right choice for most first campaigns. 2. Select your app's platform (**Android** or **iOS**) 3. Under **Look up your app**, search by app name, package name, or store URL and select your app 4. Enter a campaign name and click **Continue** Campaign subtype screen with App installs and the Android platform highlighted Pick a different subtype when your goal is not new installs: * **App engagement**: re-engage users who already have your app with in-app actions. Google requires a minimum of 50K installs. * **App pre-registration** (Android only): drive Play Store pre-registrations before your app launches. ### Step 3: Set Locations and Languages 1. Under **Locations**, select the countries to run in 2. Under **Languages**, select the languages your customers speak 3. Click **Next** Campaign settings screen with the Locations and Languages sections highlighted ### Step 4: Add Ad Assets App campaigns generate ads automatically from the assets you provide. Google mixes and matches them across Search, Play, YouTube, Display, and Discover. 1. Add up to 5 **Headlines** and 5 **Descriptions** 2. Upload images and videos if you have them 3. Click **Next** Ad group screen with the Headlines panel highlighted and the ad preview on the right ### Step 5: Set Bidding and Budget 1. Under **What do you want to focus on?**, pick what Google should optimize for. You can choose either option; for your first campaign, choose **Install volume**. 2. Under **What kind of users do you want to target?**, pick either option. For this guide, we select **All users**. 3. Set your average daily **Budget** 4. Click **Next**, review the campaign, and click **Publish campaign** Bidding and budget screen with Install volume and All users highlighted Bid on **In-app actions** only after your imported conversion actions have enough volume. Under **How do you want to track install volume?**, Google lists the download conversion actions imported from Linkrunner. ### Step 6: Verify the Campaign in Linkrunner Campaigns and spend sync automatically from your connected Google Ads account. Attribution rows appear after the campaign receives its first install. 1. Open the [**Campaigns** section](https://dashboard.linkrunner.io/dashboard) in your Linkrunner dashboard 2. Click **All Channels** and select **Google** to filter your campaigns 3. Open the campaign to view installs, events, and revenue attributed to it Linkrunner Campaigns section with the channel filter open and Google selected Campaigns appear after the first attributed install, not immediately at launch. New campaigns can also take a few hours to exit Google's review and start serving. To open a specific screen after install, click **Edit** on the campaign row and set a **Deferred Deep Link**. Your app receives the URL from `getAttributionData()`. See [Deferred Deep Linking](/features/deferred-deep-linking). ## Important Notes After generating the link ID, it might take up to **12 hours** for the events to show up in Google Ads. This is a normal processing delay from Google's side. Start with basic events like `first_open` to verify the integration is working before adding more complex conversion events. Running App Campaigns for an iOS app? Set up [Google Integrated Conversion Measurement](/features/google-icm) so Google can attribute installs from users who declined App Tracking Transparency. ## FAQ and Discrepancies For answers to common questions and an explanation of why numbers in Google Ads may not exactly match Linkrunner, see [Google Ads FAQ and Discrepancies](/ad-networks/google-ads-discrepancies). ## Troubleshooting ### Campaign Not Showing in Linkrunner * Wait for the first install. Campaigns appear only after at least one install is attributed. * Confirm the link ID is saved for the right platform under [Integrations → Google Ads](https://dashboard.linkrunner.io/dashboard/integrations/google-ads?p_id=89) * Confirm the campaign is active and serving impressions in Google Ads * Confirm your released app build includes the Linkrunner SDK at 100% rollout ### Events Not Showing Up * Ensure the link ID was copied correctly * Verify the event is mapped in [Google Ads Event Mapping](https://dashboard.linkrunner.io/dashboard/integrations/google-ads?tab=event_mapping) * Wait the full 12 hours for Google's processing * Verify that your app is sending events to Linkrunner ### Re-enabling Previously Deleted Events If you previously added an event as a conversion action and then deleted it, the event won't appear in the "Create conversion action" flow when you try to add it again. Instead of creating a new conversion action, you need to re-enable the existing (deleted) one. #### Step 1: Navigate to All Conversion Actions 1. Go to **Goals** → **Conversions** → **Summary** in the sidebar 2. Click on **"View all conversion actions"** link Google Ads - View All Conversion Actions #### Step 2: Set Filter to Show All Conversions 1. Click on the **Status** filter 2. Select **"All"** from the dropdown to show both enabled and removed conversion actions Google Ads - Status Filter #### Step 3: Re-enable the Deleted Event 1. Find your previously deleted event in the list 2. Click on the status indicator (red "Removed" icon) next to the event 3. Select **"Enabled"** from the dropdown menu Google Ads - Enable Removed Conversion Your event will now be active again and will start tracking conversions. ### Link ID Creation Issues * Make sure you've selected the correct platform (iOS/Android) * Verify your app is published and searchable in the respective app store * Double-check the provider ID: `9936233049` *** For any questions or assistance with Google Ads integration, please contact us at [support@linkrunner.io](mailto:support@linkrunner.io). # Google Ads FAQ and Discrepancies Source: https://docs.linkrunner.io/ad-networks/google-ads-discrepancies Troubleshoot common issues and understand expected discrepancies between Google Ads and Linkrunner Google Ads and Linkrunner will rarely show identical numbers. Most of the gap is expected — this page explains what's normal, what's fixable, and how to compare the two dashboards correctly. For setup instructions, see the [Google Ads integration guide](/ad-networks/google-ads). Google publishes its own explanation of the unavoidable differences: [Discrepancies in App Conversion Attribution](https://developers.google.com/app-conversion-tracking/api/discrepancies). ## Google Ads FAQ Walk through this checklist. Open [Integrations → Google Ads](https://dashboard.linkrunner.io/dashboard/integrations/google-ads), open the three-dot menu on the Google Ads row, choose **Setup Link IDs**, and verify the link ID is saved for the correct platform (Android or iOS). On the Google Ads [Conversions summary](https://ads.google.com/aw/conversions) page, confirm the `first_open` conversion event is imported. If it was previously deleted, follow [Re-enabling Previously Deleted Events](/ad-networks/google-ads#re-enabling-previously-deleted-events). Full setup: [Importing Events for Conversion Actions Setup](/ad-networks/google-ads#4-importing-events-for-conversion-actions-setup). If you run from an MCC (manager account) with sub-accounts, either: * The MCC imports `first_open` on behalf of all linked sub-accounts, or * The MCC shares the Link ID with the sub-account, and the sub-account imports `first_open` itself. After creating or updating a Link ID, allow up to **12 hours** for Google to start attributing events. You most likely haven't imported `first_open` as a conversion action. Follow [Importing Events for Conversion Actions Setup](/ad-networks/google-ads#4-importing-events-for-conversion-actions-setup). Trigger the event in your app (on iOS, allow tracking so the IDFA is available) and confirm it appears in your Linkrunner dashboard. In the Linkrunner Google Ads integration tab, confirm the event is mapped and postbacks are enabled. From Google Ads, go to **Tools → Conversions** and import the event. See [Importing Events for Conversion Actions Setup](/ad-networks/google-ads#4-importing-events-for-conversion-actions-setup). Conversions can take up to **6 hours** to appear in Google Ads after the event is performed. It depends on the campaign type. * **User acquisition campaigns:** Not mandatory. * **Re-engagement campaigns:** Recommended. Import `session_start` to measure engagements. Linkrunner works with a single Link ID per platform. Generate one Link ID in Google Ads and share it across the relevant accounts. See [Google's documentation on sharing Link IDs](https://support.google.com/google-ads/answer/3030657). Both are supported. Work with your Google Ads representative to confirm the account structure, especially if multiple teams or agencies manage the same ad accounts. Google is a Self-Reporting Network (SRN), so Google Ads reports its own attributed installs and events back to Linkrunner through its API. * **Android:** Requires GAID collection. The Linkrunner SDK captures GAID automatically when the user has not opted out. * **iOS:** Measurement happens via **SKAdNetwork (SKAN)**. Google Ads sends SKAN postbacks to Linkrunner, and installs with `did_win=TRUE` are counted. Deterministic SDK attribution only works when the user grants ATT and the IDFA is available. See [SKAdNetwork integration](/features/skadnetwork-integration) and [iOS Campaign Data Limitations](/features/ios-campaign-data-limitations). * **iOS without ATT consent:** [Integrated Conversion Measurement](/sdk/ios#google-integrated-conversion-measurement-optional) can attribute installs even when ATT is denied and no IDFA is available. It complements SKAN rather than replacing it, and needs setup in your iOS app. Google keeps it inactive for users in the EEA, the UK, and Switzerland. See the [Google Ads integration guide](/ad-networks/google-ads) for full setup on each platform. ## What causes discrepancies The differences fall into three groups. Google Ads dates conversions to the **ad click**. Linkrunner dates them to the **first app open** (or the event itself). A Jan 5 conversion in Linkrunner can show on Jan 1 in Google Ads if the click happened then. As an SRN, Google attributes every install that follows any Google Ads engagement within its window. Linkrunner uses **last-click attribution**, deduplicates across networks, and counts one install per user. On iOS, Linkrunner counts only SKAN postbacks with `did_win=TRUE`. Google Ads treats all SKAN events the same, so its dashboard typically reports more iOS installs. [Integrated Conversion Measurement](/sdk/ios#google-integrated-conversion-measurement-optional) narrows this gap for users who declined ATT. ### Row-by-row comparison | Area | Google Ads | Linkrunner | | ------------------------ | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | Install record time | Click time | First app open (Android) or SKAN postback time (iOS) | | In-app event record time | Click time | Dashboard views: install time. Raw data: actual event time | | Attribution window | 30 days for installs, 90 days for in-app events | Uses Google's API defaults; configurable per project | | Time zones | Account local time | Project time zone | | View-through conversions | Shown in **All conversions** column, not **Conversions** column by default | Click-through and view-through surfaced separately when Google provides them | | Assisted installs | Every install following any engagement within the window is credited | Last-click attribution; earlier engagements are assists | | Reinstalls | Reported as `session_start` conversions | Surfaced as re-attributions in the remarketing view | | Count setting | "Every" conversion counted | One install per user; multiple occurrences of the same in-app event | | Processing delay | Up to 24 hours | Near real time | | Deduplication | Reports all claims, including overlap with other networks | Credits a single source per user | | SKAN installs (iOS) | Counts postbacks with `did_win=TRUE` and `did_win=NULL` together | Counts only `did_win=TRUE` | **Web-to-App is a Linkrunner-specific case.** When a Google Ads click originates from a web page that carries `gad_campaignid` in its referrer URL, Linkrunner attributes the resulting install to the **original SEARCH campaign from the referrer** rather than the App Campaign returned by Google's API. This keeps the real source intact across the web → install handoff. Google Ads will still report the install under the App Campaign, which produces a predictable per-campaign discrepancy. ## Troubleshooting checklist If the gap is much bigger than expected: * Event is **imported** in the correct Google Ads account. * Event is **mapped and enabled** in the Linkrunner → Google Ads integration. * The correct **Link ID** is saved in Linkrunner and shared with the right MCC sub-account. * iOS: SKAdNetwork is configured and you're running App Campaigns. See [SKAdNetwork integration](/features/skadnetwork-integration). * Android: cross-check the re-install rate in the Google Play Developer Console to rule out measurement-model differences. *** For any questions or assistance, please contact us at [support@linkrunner.io](mailto:support@linkrunner.io). # LinkedIn Ads Source: https://docs.linkrunner.io/ad-networks/linkedin-ads Run LinkedIn ads for your app with in-app event optimization and deferred deep linking ## Overview LinkedIn Ads integration with Linkrunner enables you to run powerful app growth campaigns while optimizing on real in-app events and providing seamless deferred deep linking. This integration allows you to track installs, sign-ups, purchases, and custom events across both Android and iOS platforms. **📱 Works for both Android & iOS Apps** ### What You'll Get * **Optimization on real in-app events** — Track and optimize on Install, Sign Up, Purchase, and custom events * **Deferred deep linking** — Drop users into the right screen after first open, even if they need to install the app first * **Consistent tracking** — Unified tracking across Android & iOS via the Linkrunner SDK * **Cross-platform consistency** — Track installs across iOS and Android with one unified flow ## Setup Process Setting up LinkedIn Ads integration involves three main steps: creating conversions in LinkedIn Campaign Manager, configuring ad accounts in Linkrunner, and setting up your first campaign. ## 1. Creating Conversions This process creates conversion events in LinkedIn that will be used to track and optimize your campaigns. ### Step 1: Access LinkedIn Campaign Manager 1. Go to [LinkedIn Campaign Manager](https://www.linkedin.com/campaignmanager) 2. Select your ad account ### Step 2: Create Conversion 1. Select **Conversion Tracking** under **Measurement** 2. Click **Create conversion** 3. Select **Conversions API** LinkedIn - Create Conversion ### Step 3: Configure Conversion Details 1. Name your conversion 2. Select the appropriate category 3. Click **Next step** LinkedIn - Configure Conversion Details ### Step 4: Select Data Source 1. Select **Direct API** as the data source 2. Click **Next step** LinkedIn - Select Data Source ### Step 5: Review and Create 1. Review your conversion settings 2. Click **Create** ### Step 6: Create Additional Conversions 1. Create different conversions as per your tracking needs (e.g., Install, Sign Up, Purchase) ## 2. Configuring Ad Accounts in Linkrunner Connect your LinkedIn ad accounts with Linkrunner to enable seamless data sharing and conversion tracking. ### Step 1: Access LinkedIn Integration on Linkrunner 1. Go to [LinkedIn Integration tab on Linkrunner](https://dashboard.linkrunner.io/dashboard/integrations/linkedin-ads) ### Step 2: Add LinkedIn Account 1. Click **Add LinkedIn Account** to add your LinkedIn Ad accounts Linkrunner - Add LinkedIn Account ### Step 3: Generate Access Token in LinkedIn 1. Go to [LinkedIn Campaign Manager](https://www.linkedin.com/campaignmanager) 2. Select your ad account 3. Select **Signals manager** under **Data** 4. Select **Direct API** LinkedIn - Signals Manager Direct API 5. Click **Generate access token** LinkedIn - Generate Access Token 6. Copy the token LinkedIn - Copy Token ### Step 4: Configure CAPI on Linkrunner 1. Go back to Linkrunner and click on the three dots of the LinkedIn ad account you added Linkrunner - LinkedIn Account Options 2. Click on **Configure CAPI** Linkrunner - Configure Signal 3. Paste the token 4. Click **Save Configuration** Linkrunner - Save Signal Configuration ### Step 5: Repeat for Additional Accounts 1. Do the same process for all the ad accounts you want to integrate **At this point your LinkedIn integration setup is completed!** Your LinkedIn Ads account is now connected to Linkrunner and ready to track conversions. ## 3. Setting Up Your First LinkedIn Campaign After your accounts are configured, you can create your first LinkedIn ad campaign optimized for app conversions. ### Step 1: Create Campaign Link in Linkrunner 1. Go to [Linkrunner Dashboard](https://dashboard.linkrunner.io/) 2. Create a new campaign for each creative you plan to run 3. Select **LinkedIn** as the ad channel and select an ad account 4. Copy the **Shareable campaign link** of the campaign Linkrunner - Select LinkedIn Ad Channel Linkrunner - Copy Campaign Link ### Step 2: Access LinkedIn Campaign Manager 1. Go to [LinkedIn Campaign Manager](https://www.linkedin.com/campaignmanager) 2. Select the same ad account ### Step 3: Create Campaign 1. From the **Overview** tab, click on **Create** 2. Select **Campaign** LinkedIn - Create Campaign 3. Add your campaign name 4. Select the objective LinkedIn - Campaign Objective 5. Click **Next** ### Step 4: Configure Ad Set 1. Select **Classic** for the ad set type 2. Click **Next** LinkedIn - Classic Ad Set Type 3. Name your ad set 4. Paste the campaign link in **source URL** LinkedIn - Source URL 5. Select the suitable conversion events for this campaign LinkedIn - Select Conversion Events 6. Click **Next** ### Step 5: Create Ad 1. Click on **Create ad** 2. Select **Start from a blank ad** LinkedIn - Start From Blank Ad 3. Give an introductory text 4. In **External URL**, paste the campaign link copied from Linkrunner LinkedIn - External URL 5. Click on **Save ads** You can easily duplicate campaigns once created for every ad creative, making it faster to create multiple campaigns with different tracking links. ## Deferred Deep Linking One of the powerful features of running LinkedIn ads with Linkrunner is deferred deep linking support: * If your campaign includes deep link parameters, Linkrunner ensures that **after the install and first open**, users land on the correct in-app content * This means a user who clicked an ad for a specific product but hadn't installed your app yet will still be taken directly to that product screen inside the app after installation * Works seamlessly across both iOS and Android platforms ## Why Run Web-to-App Ads? Running **web-to-app ads** with LinkedIn gives you more flexibility and control over your campaigns, while still unlocking: * **In-app event optimization** — LinkedIn can optimize on installs or post-install events like purchases * **Deferred deep linking** — Users land on the right content inside your app after they install from the ad * **Cross-platform consistency** — Track installs across iOS and Android with one unified flow * **Better attribution** — More accurate tracking of user acquisition and in-app behavior Start by optimizing on simple events like app installs or sign-ups before moving to more complex conversion events like purchases. This helps LinkedIn's algorithm gather initial data. For any questions or assistance with LinkedIn Ads integration, please contact us at [support@linkrunner.io](mailto:support@linkrunner.io). # Meta Ads Source: https://docs.linkrunner.io/ad-networks/meta-ads Configure your Meta app integration settings to enable proper attribution tracking for your mobile app campaigns ## Overview Connect Meta Ads to send installs, registrations, purchases, and custom app events from Linkrunner to Meta. Use this guide to connect your Meta app and ad account, configure Conversions API, and map the events Meta should receive.