Appearance
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:
| Field | Website ads that click to message | Click-to-message |
|---|---|---|
destination_type | WEBSITE or UNDEFINED | MESSENGER, WHATSAPP, or INSTAGRAM_DIRECT |
optimization_goal | Choose based on your objective: - Sales: OFFSITE_CONVERSIONS - Leads: OFFSITE_CONVERSIONS - Engagement: OFFSITE_CONVERSIONS - Traffic: LANDING_PAGE_VIEWS - Awareness: REACH | CONVERSATIONS |
| CTA type | LEARN_MORE (or other website CTAs) | MESSAGE_PAGE or WHATSAPP_MESSAGE with app_destination |
asset_feed_spec | message_extensions: [{"type":"messenger"}] (or whatsapp, instagram_message) | Not used |
| Primary user action | User lands on your website with a messaging button as a secondary entry point | User 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_managementpermission. - Your ad set must use
destination_type: WEBSITEorUNDEFINED. 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:
| Channel | Supported objectives |
|---|---|
| Website to WhatsApp | Sales, Traffic, Engagement, Leads, Awareness |
| Website to Messenger | Sales, Traffic, Leads, Awareness |
| Website to Instagram Direct | Sales, 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>/campaignsOn 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>/adsetsOn 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:
| Channel | message_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>/adsWebsite 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>/adsWebsite 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>/adsOn 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.