Skip to content

Website ads that click to message

Updated: May 7, 2026

Website ads that click to message let you add a messaging banner to your website destination ads. When customers click the ad on mobile, the website opens in an in-app browser for Facebook and Instagram. At the bottom of the page, customers see a footer with a button to redirect to the specified messaging destination and can click on it to have a conversation about your products or services.

Website ads that click to message and click-to-message ads are distinct products that use different API field combinations:

FieldWebsite ads that click to messageClick-to-message
destination_typeWEBSITE or UNDEFINEDMESSENGER, WHATSAPP, or INSTAGRAM_DIRECT
optimization_goalChoose based on your objective: - Sales: OFFSITE_CONVERSIONS - Leads: OFFSITE_CONVERSIONS - Engagement: OFFSITE_CONVERSIONS - Traffic: LANDING_PAGE_VIEWS - Awareness: REACHCONVERSATIONS
CTA typeLEARN_MORE (or other website CTAs)MESSAGE_PAGE or WHATSAPP_MESSAGE with app_destination
asset_feed_specmessage_extensions: [{"type":"messenger"}] (or whatsapp, instagram_message)Not used
Primary user actionUser lands on your website with a messaging button as a secondary entry pointUser is sent directly to a messaging conversation

Prerequisites

  • An ad account with access to the Marketing API.
  • A Facebook Page linked to your messaging destination (WhatsApp Business number, Messenger, or Instagram Professional account).
  • A valid access token with the ads_management permission.
  • Your ad set must use destination_type: WEBSITE or UNDEFINED. Website ads that click to message do not work with other destination types.

Step 1: Create an ad campaign

Create an ad campaign with a supported objective. The supported objectives vary by messaging channel:

ChannelSupported objectives
Website to WhatsAppSales, Traffic, Engagement, Leads, Awareness
Website to MessengerSales, Traffic, Leads, Awareness
Website to Instagram DirectSales, Traffic, Leads
curl -X POST \
  -F 'name=Website-to-Messaging Campaign' \
  -F 'objective=OUTCOME_TRAFFIC' \
  -F 'buying_type=AUCTION' \
  -F 'status=PAUSED' \
  -F 'special_ad_categories=["NONE"]' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/campaigns

On success, your app receives a JSON response with the ad campaign ID.

{  
  "id": "<CAMPAIGN_ID>"  
}

Step 2: Create an ad set

Set destination_type to WEBSITE or UNDEFINED.

Note: Do not use messaging-specific destination types such as MESSAGING_WHATSAPP, MESSAGING_MESSENGER, or MESSAGING_INSTAGRAM_DIRECT.

curl -X POST \
  -F 'name=Website-to-Messaging Ad Set' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'daily_budget=500' \
  -F 'bid_amount=200' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=LANDING_PAGE_VIEWS' \
  -F 'destination_type=WEBSITE' \
  -F 'promoted_object={"page_id":"<PAGE_ID>"}' \
  -F 'status=PAUSED' \
  -F 'targeting={"geo_locations":{"countries":["US"]},"age_min":18,"age_max":65,"publisher_platforms":["facebook"],"facebook_positions":["feed"]}' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adsets

On success, your app receives a JSON response with the ad set ID.

{  
  "id": "<AD_SET_ID>"  
}

Step 3: Create an ad using an inline creative

You must pass the creative inline in the POST /ads request.

Note: Creating a standalone creative via POST /adcreatives with message_extensions is not supported and returns error code 3.

The message_extensions property in asset_feed_spec determines the messaging channel:

Channelmessage_extensions value
Website to WhatsApp[{"type": "whatsapp"}]
Website to Messenger[{"type": "messenger"}]
Website to Instagram Direct[{"type": "instagram_message"}]

Use a non-messaging call_to_action type such as LEARN_MORE.

Note: Messaging calls to action such as WHATSAPP_MESSAGE, INSTAGRAM_MESSAGE, and MESSAGE_PAGE are not compatible with website ads that click to message.

Website to WhatsApp

curl -X POST \
  -F 'access_token=<ACCESS_TOKEN>' \
  -F 'name=Website to WhatsApp Ad' \
  -F 'adset_id=<AD_SET_ID>' \
  -F 'creative={"object_story_spec":{"page_id":"<PAGE_ID>","link_data":{"image_hash":"<IMAGE_HASH>","link":"<WEBSITE_URL>","message":"<AD_PRIMARY_TEXT>","call_to_action":{"type":"LEARN_MORE","value":{"link":"<WEBSITE_URL>"}​}}​},"asset_feed_spec":{"message_extensions":[{"type":"whatsapp"}]}​}' \
  -F 'status=PAUSED' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads

Website to Messenger

curl -X POST \
  -F 'access_token=<ACCESS_TOKEN>' \
  -F 'name=Website to Messenger Ad' \
  -F 'adset_id=<AD_SET_ID>' \
  -F 'creative={"object_story_spec":{"page_id":"<PAGE_ID>","link_data":{"image_hash":"<IMAGE_HASH>","link":"<WEBSITE_URL>","message":"<AD_PRIMARY_TEXT>","call_to_action":{"type":"LEARN_MORE","value":{"link":"<WEBSITE_URL>"}​}}​},"asset_feed_spec":{"message_extensions":[{"type":"messenger"}]}​}' \
  -F 'status=PAUSED' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads

Website to Instagram Direct

curl -X POST \
  -F 'access_token=<ACCESS_TOKEN>' \
  -F 'name=Website to Instagram Direct Ad' \
  -F 'adset_id=<AD_SET_ID>' \
  -F 'creative={"object_story_spec":{"page_id":"<PAGE_ID>","link_data":{"image_hash":"<IMAGE_HASH>","link":"<WEBSITE_URL>","message":"<AD_PRIMARY_TEXT>","call_to_action":{"type":"LEARN_MORE","value":{"link":"<WEBSITE_URL>"}​}}​},"asset_feed_spec":{"message_extensions":[{"type":"instagram_message"}]}​}' \
  -F 'status=PAUSED' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads

On success, your app receives a JSON response with the ad ID.

{  
  "id": "<AD_ID>"  
}

Step 4: Publish your ad

When you are ready to go live, update the ad status from PAUSED to ACTIVE:

curl -X POST \
  -F 'status=ACTIVE' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_ID>

Verify your ad

Verify that message_extensions and destination_type are set correctly by making a GET request to the ad:

curl -G "https://graph.facebook.com/v25.0/<AD_ID>" \
  -d "access_token=<ACCESS_TOKEN>" \
  -d "fields=creative{asset_feed_spec{message_extensions}​},adset{destination_type}"

The response for a website to WhatsApp ad looks like this:

{  
  "creative": {  
    "asset_feed_spec": {  
      "message_extensions": [{"type": "whatsapp"}]  
    }  
  },  
  "adset": {  
    "destination_type": "WEBSITE"  
  },  
  "id": "<AD_ID>"  
}

Identify website ads that click to message

You can identify website ads that click to message by checking the ad set destination_type and the ad creative's message_extensions configuration.

To determine whether an ad is a website ad that clicks to message, check for both of the following:

  • The ad set has destination_type: "WEBSITE" or "UNDEFINED"
  • The ad creative contains asset_feed_spec.message_extensions

Click-to-message ads (such as click-to-WhatsApp) use messaging-specific destination types such as MESSAGING_WHATSAPP, MESSAGING_MESSENGER, or MESSAGING_INSTAGRAM_DIRECT. Website ads that click to message always use destination_type: "WEBSITE" or "UNDEFINED" combined with message_extensions.

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