Ads and Commerce

Multidestination Profile Visit Ads

Updated: Jul 12, 2026
Copy for LLM
Ads in WhatsApp Status are available via the Marketing API. Learn more about ads in WhatsApp Status.
Profile visit ad creation on the Marketing API is in limited availability and is being rolled out incrementally to advertisers. If you do not have access, contact your Meta representative or create profile visit ads in Ads Manager.
This guide explains how to create and publish multidestination profile visit ads using the Marketing API.
Multidestination profile visit ads send people who click on your ad to either your Instagram profile or your Facebook Page. Meta selects the destination that each person is most likely to engage with. Use this ad type to maximize total profile visits across both surfaces with a single campaign.
If you want to create an ad that sends people to a single destination, see:

Ad creation overview

This document outlines the steps you need to follow to set up your integration for multidestination profile visit ads. You will need to:
  1. Create an ad campaign
  2. Create an ad set that links your ads to your ad campaign
  3. Create an ad creative for the multidestination profile visit ad
  4. Create an ad by linking your ad creative to your ad set

Before you begin

This guide assumes you have:

Step 1: Create an ad campaign

Start by creating your ad campaign. To do this, make a POST request to the /act_<AD_ACCOUNT_ID>/campaigns endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:

Parameters

Name Description
name
string
Required.
Name for the multidestination profile visit campaign.
objective
enum
Required.
Campaign’s objective.
Supported objectives are OUTCOME_ENGAGEMENT and OUTCOME_TRAFFIC.
special_ad_categories
list<Object>
Required.
Special ad categories associated with the multidestination profile visit campaign. Currently, special ad categories aren’t supported for profile visit ads, so it needs to be NONE or empty array. See the Ad Campaign reference for more details.
status
enum
Optional.
Valid options are PAUSED and ACTIVE.
If this status is PAUSED, all its active ad sets and ads are paused and have an effective status CAMPAIGN_PAUSED.

Request

curl -X POST \
  -F 'name=Multidestination Profile Visit Campaign' \
  -F 'objective=OUTCOME_TRAFFIC' \
  -F 'status=ACTIVE' \
  -F 'special_ad_categories=[]' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/act_<AD_ACCOUNT_ID>/campaigns

Response

On success, your app receives a JSON response with the ID of your newly created campaign.
{
  "id": "<AD_CAMPAIGN_ID>"
}

Updating

You can update a campaign by making a POST request to /<AD_CAMPAIGN_ID>.

Reading

To verify that you have successfully created a multidestination profile visit campaign, you can make a GET request to /<AD_CAMPAIGN_ID>. See the Ad Campaign reference for the complete list of available parameters.

Request

curl -X GET -G \
  -d 'fields=name,status,objective' \
  -d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/<AD_CAMPAIGN_ID>

Response

{
  "name": "Multidestination Profile Visit Campaign",
  "status": "ACTIVE",
  "objective": "OUTCOME_TRAFFIC",
  "id": "<AD_CAMPAIGN_ID>"
}

Step 2: Create an ad set

Once you have an ad campaign, create your ad set. To create an ad set, make a POST request to the /act_<AD_ACCOUNT_ID>/adsets endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:

Parameters

Name Description
bid_strategy
enum
Optional.
The bid strategy for this campaign to suit your specific business goals. See the Ad Campaign reference for more details.
Values: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP
billing_event
enum
Required.
Set billing_event to IMPRESSIONS for multidestination profile visit ads. Meta bills you when people see your ad.
campaign_id
numeric string or integer
Required.
A valid multidestination profile visit campaign you wish to add this ad set to.
daily_budget
int64
Required if lifetime_budget is not set.
The daily budget defined in your account currency. Allowed only for ad sets with a duration (difference between end_time and start_time) longer than 24 hours.
Either daily_budget or lifetime_budget must be greater than 0.
destination_type
string
Required.
Set destination_type to INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE for multidestination profile visit ads.
Note: The Facebook Page referenced in promoted_object.page_id must have an Instagram business account connected to it for Meta to deliver to the Instagram destination.
end_time
datetime
Required when lifetime_budget is specified.
When creating an ad set with a daily_budget, specify end_time=0 or leave this field empty to set the ad set as ongoing with no end date.
Example: 2026-09-12 23:59:59-07:00 or 2026-09-12 23:59:59 PDT. UTC UNIX timestamp.
lifetime_budget
int64
Required if daily_budget is not set.
The lifetime budget of the ad set defined in your account currency. If specified, you must also specify an end_time.
Either daily_budget or lifetime_budget must be greater than 0.
name
string
Required.
The name of the multidestination profile visit ad set.
optimization_goal
enum
Required.
What the ad set is optimizing for. The valid value depends on the campaign’s objective:
  • Set to PROFILE_VISIT when the campaign objective is OUTCOME_TRAFFIC.
  • Set to PROFILE_AND_PAGE_ENGAGEMENT when the campaign objective is OUTCOME_ENGAGEMENT.
promoted_object
Required.
The object this ad set is promoting across all its ads. For multidestination profile visit ads, promoted_object has the following condition:
  • page_id: Required. The ID of the Facebook Page connected to the Instagram business account you want to send traffic to.
See Ad Set, Promoted Object for more details.
start_time
datetime
Optional.
The start time of the ad set. This field defaults to the current time if no value is provided.
Example: 2026-09-12 23:59:59-07:00 or 2026-09-12 23:59:59 PDT. UTC UNIX timestamp.
status
enum
Optional.
The status of the ad set. It can be different from the effective status due to its parent campaign. This field defaults to ACTIVE if no value is provided.
Values: ACTIVE, PAUSED, DELETED, ARCHIVED
targeting
Targeting object
Required.
The targeting structure of the ad. See Targeting for more details.
Visit the Ad Account Ad Set reference for the complete list of available parameters.

Request

curl -X POST \
  -F 'access_token=<ACCESS_TOKEN>' \
  -F 'bid_strategy=LOWEST_COST_WITHOUT_CAP' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'daily_budget=<DAILY_BUDGET>' \
  -F 'destination_type=INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE' \
  -F 'name=<AD_SET_NAME>' \
  -F 'optimization_goal=PROFILE_VISIT' \
  -F 'promoted_object={
      "page_id": "<PAGE_ID>"
    }' \
  -F 'status=ACTIVE' \
  -F 'start_time=<START_TIME>' \
  -F 'targeting={
        "geo_locations": { "countries":["US"] }
  }' \
https://graph.facebook.com/v26.0/act_<AD_ACCOUNT_ID>/adsets

Response

On success, your app receives a JSON response with the ID of your newly created ad set.
{
  "id": "<AD_SET_ID>"
}

Updating

You can update an ad set by making a POST request to /<AD_SET_ID>.

Reading

To verify that you have successfully created a multidestination profile visit ad set, you can make a GET request to /<AD_SET_ID>. See the Ad Set reference for the complete list of available parameters.

Request

curl -X GET -G \
  -d 'fields=name,destination_type,optimization_goal,bid_strategy' \
  -d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/<AD_SET_ID>

Response

{
  "name": "<AD_SET_NAME>",
  "destination_type": "INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE",
  "optimization_goal": "PROFILE_VISIT",
  "bid_strategy": "LOWEST_COST_WITHOUT_CAP",
  "id": "<AD_SET_ID>"
}

Step 3: Create an ad creative

The ad creative allows you to add assets to your ads. To create an ad creative for a multidestination profile visit ad, make a POST request to the /act_<AD_ACCOUNT_ID>/adcreatives endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:

Parameters

Name Description
name
string
Required.
The name for your ad creative.
asset_feed_spec
Required.
A spec defining the call to action shown for each destination. For multidestination profile visit ads, you must include both calls to action and the multidestination optimization type:
  • call_to_actions: A list with the call to action for each destination. Include both VIEW_INSTAGRAM_PROFILE (for the Instagram profile destination) and VISIT_PROFILE (for the Facebook Page destination). Each entry has a type and a value containing the destination link.
  • optimization_type: Set optimization_type to UNIFIED_PROFILE_VISIT_DESTINATION for multidestination profile visit ads.
degrees_of_freedom_spec
Optional.
See Standard Enhancements for Advantage+ Creative for more details.
Visit the Ad Creative reference for the complete list of available parameters.

Ad creative create examples

Request

curl -X POST \
  -F 'name=<CREATIVE_NAME>' \
  -F 'asset_feed_spec={
       "call_to_actions": [
         {
           "type": "VIEW_INSTAGRAM_PROFILE",
           "value": {
             "link": "http://instagram.com/<IG_USERNAME>",
             "app_link": "instagram://user?username=<IG_USERNAME>&userid=<IG_USER_ID>"
           }
         },
         {
           "type": "VISIT_PROFILE",
           "value": {
             "link": "http://fb.com/<PAGE_ID>"
           }
         }
       ],
       "optimization_type": "UNIFIED_PROFILE_VISIT_DESTINATION"
     }' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/act_<AD_ACCOUNT_ID>/adcreatives

Response

On success, your app receives a JSON response with the ID of your newly created ad creative.
{
  "id": "<AD_CREATIVE_ID>"
}

Creating ad creatives using Instagram content

You can also create a multidestination profile visit ad creative from an existing Instagram post. Refer to Use Posts as Instagram Ads for more details.
curl -X POST \
  -F 'name=<CREATIVE_NAME>' \
  -F 'object_id=<PAGE_ID>' \
  -F 'instagram_user_id=<IG_USER_ID>' \
  -F 'source_instagram_media_id=<INSTAGRAM_POST_ID>' \
  -F 'object_type=PHOTO' \
  -F 'body=<AD_PRIMARY_TEXT>' \
  -F 'asset_feed_spec={
       "call_to_actions": [
         {
           "type": "VIEW_INSTAGRAM_PROFILE",
           "value": {
             "link": "http://instagram.com/<IG_USERNAME>",
             "app_link": "instagram://user?username=<IG_USERNAME>&userid=<IG_USER_ID>"
           }
         },
         {
           "type": "VISIT_PROFILE",
           "value": {
             "link": "http://fb.com/<PAGE_ID>"
           }
         }
       ],
       "optimization_type": "UNIFIED_PROFILE_VISIT_DESTINATION"
     }' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/act_<AD_ACCOUNT_ID>/adcreatives

Updating

You can update an ad creative by making a POST request to /<AD_CREATIVE_ID>.

Reading

To verify that you have successfully created a multidestination profile visit ad creative, you can make a GET request to /<AD_CREATIVE_ID>. See Ad Creative for the complete list of available parameters.

Request

curl -X GET -G \
  -d 'fields=name,asset_feed_spec' \
  -d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/<AD_CREATIVE_ID>

Response

{
  "name": "<CREATIVE_NAME>",
  "asset_feed_spec": {
    "call_to_actions": [
      {
        "type": "VIEW_INSTAGRAM_PROFILE",
        "value": {
          "link": "http://instagram.com/<IG_USERNAME>",
          "app_link": "instagram://user?username=<IG_USERNAME>&userid=<IG_USER_ID>"
        }
      },
      {
        "type": "VISIT_PROFILE",
        "value": {
          "link": "http://fb.com/<PAGE_ID>"
        }
      }
    ],
    "optimization_type": "UNIFIED_PROFILE_VISIT_DESTINATION"
  },
  "id": "<AD_CREATIVE_ID>"
}

Step 4: Create an ad

Ads allow you to associate ad creative information with your ad sets. To create an ad, make a POST request to the /act_<AD_ACCOUNT_ID>/ads endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:

Parameters

Name Description
name
string
Required.
The name for your ad.
adset_id
numeric string or integer
Required.
The ID of the ad set.
creative
Required.
The ad creative to be used by this ad. You may supply the creative_id of an existing ad creative or create a new ad creative by including all required fields. See Ad Creative for more details.
status
enum
Required.
The configured status of the ad.
Values: ACTIVE, PAUSED, DELETED, ARCHIVED

Request

curl -X POST \
  -F 'name=<AD_NAME>' \
  -F 'adset_id=<AD_SET_ID>' \
  -F 'creative={
       "creative_id": "<AD_CREATIVE_ID>"
     }' \
  -F 'status=ACTIVE' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/act_<AD_ACCOUNT_ID>/ads

Response

On success, your app receives a JSON response with the ID of your newly created ad.
{
  "id": "<AD_ID>"
}

Updating

You can update an ad by making a POST request to /<AD_ID>.

Reading

To verify that you have successfully created a multidestination profile visit ad, you can make a GET request to /<AD_ID>. See the ad reference for the complete list of available parameters.

Request

curl -X GET -G \
  -d 'fields=status,adset_id' \
  -d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v26.0/<AD_ID>

Response

{
  "status": "ACTIVE",
  "adset_id": "<AD_SET_ID>",
  "id": "<AD_ID>"
}