Create ad from Instagram post (use existing post) (adsap_create_ad_from_ig_post)
Platform: Meta · Read or write: Write · Plan: Early Access · Consumes a task: Yes · Preview supported: Yes
What it does
Turns an existing Instagram post, video or reel into an ad inside an ad set you already have. This is the “Use existing post” option from Meta Ads Manager. The ad inherits the ad set’s budget, targeting and schedule, and it always starts paused. The first call is a preview; ask again to create it.
When to use it
- Use it to run an existing Instagram post, video or reel as an ad, instead of building a new creative.
- It needs three IDs first: the ad set from
adsap_list_ad_sets, the postidfromadsap_list_ig_media, and the Instagram account fromadsap_list_meta_assets. dry_rundefaults totrue, so the first call is a preview. The assistant setsdry_runtofalseto create the ad.- The ad is created with
statusPAUSED. To switch it on, useadsap_set_entity_status. - It creates no campaign, ad set or budget. To build an ad from an uploaded image or video, use
adsap_create_ad.
Worked example
You ask
“Turn my latest reel into an ad in the Prospecting US ad set, with a Shop Now button. Preview it first.”
The assistant calls adsap_create_ad_from_ig_post
{
"ad_account_id": "act_1234567890",
"ad_set_id": "120210000000001",
"ig_account_id": "17841400000000001",
"ig_media_id": "17900000000000001",
"ad_name": "Spring sale, reel",
"call_to_action_type": "SHOP_NOW",
"dry_run": true
}Adsap returns
The field names are the ones Adsap returns. The values are examples.
{
"ok": true,
"dry_run": true,
"would_create": {
"ad_set_id": "120210000000001",
"ad_name": "Spring sale, reel",
"status": "PAUSED",
"tracking_specs": [],
"creative": {
"source_instagram_media_id": "17900000000000001",
"object_id": "100000000000001",
"instagram_user_id": "17841400000000001",
"call_to_action_type": "SHOP_NOW"
}
}
}How to read it
would_create is the plan, and nothing exists in Meta yet. status is PAUSED, so the ad cannot spend when it is created. object_id is the Facebook Page linked to the Instagram account. Adsap resolves it for you unless you pass page_id. tracking_specs is empty when the ad account has no tracking settings saved in Adsap.
The full response also has a human_readable_summary sentence, left out here. If the plan looks right, the assistant repeats the call with dry_run set to false. That response returns the new ad_id and creative_id.
Parameters
Descriptions are shortened from the tool schema. Your assistant sees the full text.
| Name | Type | Required | Description |
|---|---|---|---|
ad_account_id | string | Yes | act_<digits>. The ad account that owns the ad set and the Instagram account. |
ad_set_id | string | Yes | The EXISTING ad set to add the ad to. The ad inherits this ad set’s budget, targeting, and schedule: no new budget is set. Get it from adsap_list_ad_sets. |
ig_account_id | string | Yes | The Instagram account that owns the post. Used to resolve the ad’s Facebook Page + Instagram identity. Get it from adsap_list_meta_assets (asset_type: “instagram_accounts”). |
ig_media_id | string | Yes | The Instagram post / video / reel to promote. Get it from adsap_list_ig_media (the id field). |
ad_name | string | No | Optional name for the ad. Defaults to “IG post <ig_media_id>”. |
call_to_action_type | string | No | Optional call-to-action button enum (e.g. SHOP_NOW, LEARN_MORE, SIGN_UP). Omit to promote the post as-is with no added button. |
page_id | string | No | Optional Facebook Page id override. Normally resolved automatically from the Instagram account; only set this if auto-resolution can’t find the linked page. |
dry_run | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |
Example prompts
- “Boost my latest reel as an ad in the Engagement ad set.”
- “Turn the Instagram post from Tuesday about the new collection into an ad with a Shop Now button.”
- “Preview an ad made from my most recent post in the Retargeting ad set, then create it if it looks right.”
Notes
This tool does not create a campaign or an ad set. Pick an existing ad set, an Instagram post and the Instagram account first.
Related tools
adsap_get_ad_library_snapshot: SHOW what Ad Library ads ACTUALLY LOOK LIKE (creative, copy, page name), in a SELF-CONTAINED card.adsap_get_ad_preview: Render a pixel-accurate visual preview of an existing Meta ad (real Meta render; video ads also get an animated clip in the interactive…adsap_get_creative_performance: Ranked creative performance analysis with fatigue detection.adsap_get_import_status: Check progress of a Meta historical-asset import started with adsap_import_account_creatives: status, phase (images then videos)…adsap_get_preview_clip: Fetch the animated placement-preview clip (recorded video of the real Meta preview) for an ad+placement previously rendered with…adsap_get_upload_status: Check status of an async video upload.adsap_import_account_creatives: Import ALL historical creative assets (images + videos) that already exist in a Meta ad account into the Adsap Creative Library.adsap_list_creative_assets: List uploaded Meta creative images and videos in the ad account asset library.adsap_list_drive_files: Browse Google Drive for creative image/video files to upload to Meta.adsap_list_dropbox_files: Browse Dropbox for creative image/video files to upload to Meta.adsap_list_ig_media: List an Instagram account’s recent media/posts (live from Meta): the posts, reels, and stories that can be promoted.adsap_replace_ad_creative: DESTRUCTIVE.adsap_search_ad_library: Search Meta’s public Ad Library for ads (competitor research / ad transparency).adsap_upload_creative: Upload image/video from Google Drive or Dropbox to a Meta ad account.
Guide
Read Creatives for the workflow around this tool, and the Tool reference for every tool.
The Meta Ads MCP server page shows how to connect Meta Ads to Claude, ChatGPT or Perplexity.