Instagram Carousel Ads
Updated: Dec 17, 2025
To create carousel ads, provide ad creative with multiple
child_attachments in link_data for Instagram Stream. We require at least three for MOBILE_APP_INSTALLS or MOBILE_APP_ENGAGEMENT and two for other objectives. You need to provide instagram_user_id, and only use objectives supported in Instagram Ads.There are some differences between Facebook and Instagram carousel ads. These differences only happen with Instagram placement. If you have an ad set with both Facebook and Instagram placements enabled, what works on Facebook may be different from that on Instagram. For example,
multi_share_optimized has no effect on Instagram, but works on Facebook.multi_share_optimizedhas no effect on Instagram. If more than 5 attachments are provided, the first 5 will be used, based on the order of them in the ad creative creation.multi_share_end_cardhas no effect on Instagram. End cards are not available on Instagram.- Each attachment must have
linkspecified, which is the destination of the image click. - Each attachment has a Call To Action button. You can either specify it, or Instagram will default it to “Learn more” and link to the
linksetting of the attachment. - The
captionfield can be used to specify the display url. If not specified, thelinkurl will be used. - Each carousel card has one image or video and a Call To Action button, and there is one message from
messagesetting in thelink_data. Thenameof each attachment is also shown, between the image or video and the message. Thedescriptionfield of thelink_dataand of each child attachment are ignored.
Image Cards
- Each attachment must have either
pictureorimage_hashset. We do not default the image fromlink_data. - A
100x100image crop can be provided for each attachment, or auto crop will be performed. The final image must be at least 600x600 pixels, which is significantly bigger than the minimum requirement of Facebook carousel ads.
Video Cards
- The video needs to be square, with at least 600px at each dimension, at most 60 seconds.
- A thumbnail image is required. We recommend to use thumbnail images with the same dimension as videos, but do not require it.
- The video is specified by
video_idin achild_attachment. The thumbnail image is specified byimage_hashorpicturein achild_attachment. - The thumbnail image will be shown during loading, or when the ad is shown with a small visible portion. The video will be auto-started and looping.
Stories
For Instagram Stories, you can create a carousel with up to ten images or videos. By default, the number of cards is tailored and varies to optimize for performance. A user may see one, two or three cards before seeing the option to “Expand Story”. Stories Carousel limitations differ depending on how you have decided to place your ads.
For standalone Instagram Stories placement, you can choose to have a fixed number of cards, with a maximum of 3 cards displayed before the option to expand the story. This feature is setup inside
carousel_delivery_mode. Within this field, there are two options:optimal_num_cards: Default option. The number of cards shown to the user is automatically tailored.fixed_num_cards: To be selected in case the advertiser wants to have a fixed number of cards shown.
Using a fixed number of cards may increase the amount an advertiser pays for results.
Other placement differences:
| Standalone | Mixed or Automatic Placements | |
|---|---|---|
Aspect Ratio | 9:16 and non-9:16. Mixed aspect ratio is not supported. | No 9:16 format. |
Supported Media | Images, videos up to 120 seconds (per card), mixed photos and videos.
If you have chosen to have a fixed number of cards, we support videos of up to 15 seconds (per card). | Images, videos up to 120 seconds (per card), mixed photos and videos. |
Supported Objectives | Brand Awareness Reach Traffic (Link Clicks) Messages Lead Generation Conversions App Installs Video Views Store Traffic Catalog Sales
Note: The option to show a fixed number of cards is not supported for Catalog Sales. | Brand Awareness Reach Traffic (Link Clicks) Messages Lead Generation Conversions App Installs Store Traffic Catalog Sales |
For example, to create an Instagram Stories carousel:
curl \ -F 'name=Sample Creative' \ -F 'object_story_spec={ "instagram_user_id": <IG_USER_ID>, \ "link_data": { "child_attachments": [ { "description": "$8.99", "image_hash": "<IMAGE_HASH>", "link": "https:\/\/www.link.com\/product1", "name": "Product 1", "video_id": "<VIDEO_ID>" }, { "description": "$9.99", "image_hash": "<IMAGE_HASH>", "link": "https:\/\/www.link.com\/product2", "name": "Product 2", "video_id": "<VIDEO_ID>" }, { "description": "$10.99", "image_hash": "<IMAGE_HASH>", "link": "https:\/\/www.link.com\/product3", "name": "Product 3" } ], "link": "<URL>" }, \ "page_id": "<PAGE_ID>" \ }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<LATEST_API_VERSION>/act_<AD_ACCOUNT_ID>/adcreatives
To create a carousel with
fixed_num_cards:curl -X POST \ -F 'object_story_spec={ "instagram_user_id": "<IG_USER_ID>", "page_id": "<PAGE_ID>", "link_data": { "child_attachments": [ { "link": "<LINK>" "image_hash": "<IMAGE_HASH>", "image_crops": [], }, { "link": "<LINK>", "image_hash": "<IMAGE_HASH>", "image_crops": {} }, { "link": "<LINK>", "image_hash": "<IMAGE_HASH>", "image_crops": {} } ], "message": "<MESSAGE>", "multi_share_end_card": false, "multi_share_optimized": false, "picture": "<PICTURE>" } } ' \ -F 'portrait_customizations={ carousel_delivery_mode: "fixed_num_cards" }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<LATEST_API_VERSION>/act_<AD_ACCOUNT_ID>/adcreatives
Instant Experience elements are not supported for the Carousel ad format.