Website ads that click to message
Updated: May 7, 2026
Copy for LLM
Ads in WhatsApp Status are available via the Marketing API. Learn more about ads in WhatsApp Status.
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/v26.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/v26.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:| 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/v26.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/v26.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/v26.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/v26.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/v26.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.