Skip to content

Cross-Channel Conversion Optimization

Updated: Jun 28, 2026

Cross-channel conversion optimization (CCCO) enables you to optimize conversions for both website and app within a single campaign. Capturing conversions from both website and app provides more data, which may lower cost per action (CPA) and increase conversions.

Here are the key benefits for advertisers:

  • Simplicity — Instead of managing multiple campaigns, optimize for website and app within a single campaign
  • More conversions — With more data captured, the chances of showing ads to people who'll convert increases
  • Cost-efficiency — Reach the most people at a lower cost

Get started

Cross-channel conversion optimization enhances conversions from both your website and app (iOS+ Android) in a single campaign. If an impression leads to a website conversion or an in-app conversion, or both, the product counts all the conversions as optimized events.

Restrictions

Objective

Cross-channel conversion optimization only supports the CONVERSIONS objective.

Events

Cross-channel conversion optimization supports the following events:

  • PURCHASE
  • COMPLETE_REGISTRATION
  • ADD_PAYMENT_INFO
  • ADD_TO_CART
  • INITIATED_CHECKOUT
  • SEARCH
  • CONTENT_VIEW
  • LEAD
  • ADD_TO_WISHLIST
  • SUBSCRIBE 1
  • START_TRIAL 1

Bid strategy

With or without campaign budget optimization (CBO), cross-channel conversion optimization only supports these bid strategies:

  • LOWEST_COST_WITHOUT_CAP
  • LOWEST_COST_WITH_BID_CAP

Placements

Cross-channel conversion optimization is available for all Instagram and Facebook placements, including Automatic Placements. Exceptions: Audience Network, Messenger, Facebook Instant Article, and Placement Asset Customization.

SUBSCRIBE and START_TRIAL support are currently being considered.

Ad Set

Set the optimization goal to OFFSITE_CONVERSIONS to optimize ad delivery for offsite conversions, if you configure your pixel to send offsite conversions.

To use cross-channel conversion optimization, set the following fields to their respective values:

  • Optimization goal > Set to OFFSITE_CONVERSIONS.
  • Bid strategy > See Bid strategy.
  • Billing event > Set to IMPRESSIONS.

Omnichannel object

The omnichannel_object field is available in the Ad Set.

For omnichannel object validation:

  • All custom_event_type fields in the app and pixel must be of the same event.
  • Both app SDK and pixel are required.
  • Current ad accounts must have access to all app- and pixel-promoted objects.
FieldTypeDescription
applist<AppPromotedObject>App-promoted objects associated with this omnichannel object. * application_id — Type: string. Application ID being promoted. * object_store_urls—Type: list<string>. List of object store URLs associated with application_id (Play Store and/or iTunes). * custom_event_type—Type: Event enum. Event that will be optimized. For app-promoted object validation: * All object_store_urls must be associated with that application. You can configure this on developers.facebook.com under your application settings. * custom_event_type must be one of those supported events.
pixellist<PixelPromotedObject>Pixel-promoted objects associated with this omnichannel object. * pixel_id — Type: string. Pixel ID being promoted. * pixel_rule—Type: JSON. Optional. Pixel custom conversion rule. * custom_event_type—Type: Event enum. Event that will be optimized. For app-promoted object validation, custom_event_type must be one of those supported events.

Example: Ad set with omnichannel object

{
     daily_budget: 20000,
     optimization_goal: CONVERSIONS,
     promoted_object: {
         omnichannel_object: {
             app: [
                 {
                     application_id: ,
                     custom_event_type: PURCHASE,
                     object_store_urls: [
                         "https://play.google.com/store/apps/details?id=com.facebook.ka"
                         "https://apps.apple.com/us/app/facebook/id284882215",
                     ],
                 },
             ],
             pixel: [
                 {
                     pixel_id,
                     custom_event_type: PURCHASE
                 },
             ],
         }
     }
}

You can select the desired destination where advertisers want users to land when they click their ad — from a desktop or app. Advertisers are required to insert the corresponding links — website, iOS app deep link, or Android app deep link given the chosen destination option. Learn more about product deep links.

FieldTypeDescription
creativeCreative specRequired for create. The ID or creative spec of the ad creative is to be used by this ad. Learn more about ad creatives. {"creative_id": } or creative spec as follows: { "creative": { "name": "", "applink_treatment": "" "object_story_spec": , "omnichannel_link_spec": } }
tracking_specsList of tracking specRequired tracking spec for conversion tracking. For ad validation, see the required specs below and respective example.

For ad validation:

  • The tracking spec's (tracking_specs)pixel_id and application_id must be consistent with those in promoted_object.
  • tracking_specs must include these specs:
Tracking SpecCode Sample
Pixel{ "action.type": ["offsite_conversion"], "fb_pixel": [pixel_id] }
App install{ "action.type": ["mobile_app_install"], "application": [application_id] }
App event{ "action.type": ["app_custom_event"], "application": [application_id] }

Example: Ad object

{
     "name": "sample ad"
     "adset_id": "6170648652866",
     "creative": {
         "creative_id": creative_id,
    }
    "status": "PAUSED",
    "tracking_specs": [
        {
            "action.type": ["offsite_conversion"],
            "fb_pixel": [pixel_id]
        }
        {
            "action.type": ["mobile_app_install"],
            "application": [application_id]
        }
        {
            "action.type": ["app_custom_event"],
            "application": [application_id]
        }
    ]
}

Creative

Advantage+ catalog ads

For Advantage+ catalog ads, template_url_spec can be used to specify deep links in the creative. In this field, you may use dynamic fields such as product URL or ID.

template_url_spec follows this specification.

Example: Template URL spec

{
   "creative":{
      "applink_treatment":"deeplink_with_web_fallback",
      "template_url_spec":{
         "android":{
            "url":"example://product/{​{product.retailer_id | urlencode}​}"
         },
         "config":{
            "app_id":"<APPLICATION_ID>"
         },
         "ios":{
            "url":"example://product/{​{product.name | urlencode}​}"
         },
         "web":{
            "url":"https://www.example.com/deeplink/{​{product.name | urlencode}​}"
         }
      }
   },
}

Manual upload ads

For manual upload ads, omnichannel_link_spec is used instead of template_url_spec. It includes the following fields:

FieldTypeDescription
webWeb configurationPixel-promoted objects associated with this omnichannel object. * url—Type: string. Website that the user lands on via the browser. For web validation, url must be the same as the link provided in link_data.
appApp destination configurationApp-promoted objects associated with this omnichannel object. * application_id—Type: string. Website that the user lands on via the browser. For web validation, application_id must be consistent as the application_id in omnichannel_object within promoted_object. * platform_specs—Type: JSON. Landing destination configuration per the platform.

Platform specifications

FieldTypeDescription
androidJSONLanding configuration for Android app. For web validation, ios, ipad, iphone are mutually exclusive. There can only be one of those keys that exist in the platform_specs. * url—Type: string. Deep link to open the app. Learn more about product deep links.
iosJSONLanding configuration for iOS app. For web validation, ios, ipad, iphone are mutually exclusive. There can only be one of those keys that exist in the platform_specs. * url—Type: string. Deep link to open the app. Learn more about product deep links.
ipadJSONLanding configuration for iPad-only app. For web validation, ios, ipad, iphone are mutually exclusive. There can only be one of those keys that exist in the platform_specs. * url—Type: string. Deep link to open the app. Learn more about product deep links.
iphoneJSONLanding configuration for iPhone-only app. For web validation, ios, ipad, iphone are mutually exclusive. There can only be one of those keys that exist in the platform_specs. * url—Type: string. Deep link to open the app. Learn more about product deep links.
{
  "applink_treatment": "deeplink_with_web_fallback",
  "omnichannel_link_spec": {
      "web": {
        "url": web_url
      },
      "app": {
        "application_id": application_id,
        "platform_specs": {
          "android": {
            "url": android_deeplink
          },
          "ios": {
            "url": ios_deeplink
          }
        }
      }
   },
  "object_story_spec": {
    "instagram_user_id": "<IG_USER_ID>",
    "page_id": "",
    "link_data": {
      "call_to_action": {
        "type": "LEARN_MORE",
      },
      "link": web_url,
      "message": "Purchase now!",
      "name": "Sample creative"
    }
  },
  "object_type": "SHARE"
}

Unofficial mirror for reference/search purposes. All content originates from developers.facebook.com — see the source link at the top of each page. Machine-readable indexes: llms.txt · llms-full.txt · About