Skip to Content

Create ad (adsap_create_ad)

Platform: Meta · Read or write: Write · Plan: All plans · Consumes a task: Yes · Preview supported: Yes

What it does

Creates a single image or single video ad inside an existing Meta ad set. You supply the creative: the asset, primary text, headline, description, call to action and destination URL. The ad starts paused. Ask for a preview first: the copilot validates the ad and shows a launch review card where you confirm, create and activate.

When to use it

  • Use it to add one image or video ad to an ad set that already exists. ad_format is SINGLE_IMAGE or SINGLE_VIDEO.
  • The creative is named by filename in feed_creative_name, and it must already be in the creative library. Find it with adsap_list_creative_assets or add it with adsap_upload_creative.
  • creative_spec needs a page_id, 1 to 5 primary_texts, 1 to 5 headlines and a call_to_action. Pages come from adsap_list_meta_assets.
  • instagram_user_id is optional. Leave it out when the brand has no Instagram account, and the Facebook Page represents it on Instagram.
  • It supports a preview call with dry_run set to true. To turn an existing Instagram post into an ad, use adsap_create_ad_from_ig_post.

Worked example

You ask

“Create an image ad in the Prospecting US ad set with spring-sale-square.jpg, headline ‘New season styles’, a Shop Now button, linking to our spring page. Preview it first.”

The assistant calls adsap_create_ad

{ "ad_set_id": "120210000000001", "ad_account_id": "act_1234567890", "name": "Spring sale, image 1", "ad_format": "SINGLE_IMAGE", "creative_spec": { "page_id": "100000000000001", "feed_creative_name": "spring-sale-square.jpg", "primary_texts": ["Our spring collection is here."], "headlines": ["New season styles"], "link_url": "https://www.example.com/spring", "call_to_action": "SHOP_NOW" }, "dry_run": true }

Adsap returns

The field names are the ones Adsap returns. The values are examples.

{ "dry_run": true, "validation_passed": true, "ad_format": "SINGLE_IMAGE", "resolved_payload": { "ad_account_id": "act_1234567890", "adset_id": "120210000000001", "ad_name": "Spring sale, image 1", "status": "PAUSED", "creative_square_name": "spring-sale-square.jpg", "creative_vertical_name": "", "primary_texts": ["Our spring collection is here."], "headlines": ["New season styles"], "url": "https://www.example.com/spring", "cta_type": "SHOP_NOW", "page_id": "100000000000001", "instagram_user_id": "", "multi_advertiser_opt_in": true, "campaign_objective": "OUTCOME_SALES", "destination_type": "WEBSITE", "tracking_specs": [] }, "campaign_objective": "OUTCOME_SALES", "destination_type": "WEBSITE" }

How to read it

resolved_payload is what Adsap would send to build the ad. status is PAUSED because the call did not ask for ACTIVE. campaign_objective and destination_type are read from Adsap’s cache of the ad set. They show (not found in cache) when the ad set is not cached yet. An empty instagram_user_id means the Facebook Page stands in on Instagram. The example shows part of resolved_payload and leaves out request_echo, which repeats your input.

The response also has a warnings list. It always carries a reminder that creative files and permissions are checked during creation, not in the preview, and that Meta reviews every ad. The preview opens a launch review card where you confirm the create.

Parameters

Descriptions are shortened from the tool schema. Your assistant sees the full text.

NameTypeRequiredDescription
ad_set_idstringYes
ad_account_idstringYes
namestringYes
ad_formatone of SINGLE_IMAGE, SINGLE_VIDEOYes
creative_specobjectYes
creative_spec.page_idstringNoFacebook Page id. REQUIRED when building a new creative (feed_creative_name / image_hash / video_id); not needed when reusing creative_id / object_story_id: the identity comes from the reused creative.
creative_spec.instagram_user_idstringNoInstagram account id for Instagram placements. OPTIONAL: omit it when the brand has no Instagram account. Adsap then represents the brand on Instagram through its Facebook Page (Meta page-backed Instagram account), exactly like the Use Facebook Page option in Ads Manager.
creative_spec.feed_creative_namestringNoFeed creative filename (1080x1080) from the Adsap creative library (adsap_list_creative_assets). Pass exactly ONE of feed_creative_name, image_hash or video_id.
creative_spec.image_hashstringNoReuse an EXISTING Meta image by its image hash (e.g. from adsap_get_ad’s creative_summary.images, to build a new ad with the same image). SINGLE_IMAGE only. The image must be in the Adsap creative library: if it is not found, run adsap_import_account_creatives once (imports the account’s full existing image/video library) and retry.
creative_spec.video_idstringNoReuse an EXISTING Meta video by its video id (e.g. from adsap_get_ad’s creative_summary.videos). SINGLE_VIDEO only. The video must be in the Adsap creative library: if it is not found, run adsap_import_account_creatives once and retry.
creative_spec.creative_idstringNoReuse a WHOLE existing adcreative as-is (id from adsap_get_ad’s creative_id or adsap_list_ads). The new ad shows the exact same content AND keeps the underlying post with its likes/comments (social proof). Copy fields (primary_texts, headlines, call_to_action, link_url, page_id) are not used: the creative already contains them.
creative_spec.object_story_idstringNoReuse an existing Facebook Page post as the ad, form <page_id>_<post_id> (from adsap_get_ad’s object_story_id / effective_object_story_id). Keeps the post and its social proof. Copy fields are not used.
creative_spec.vertical_creative_namestringNo1080x1920 filename.
creative_spec.horizontal_creative_namestringNo1200x628 filename.
creative_spec.primary_textsarray of stringNo1-5 primary texts. REQUIRED when building a new creative; not used when reusing creative_id / object_story_id.
creative_spec.headlinesarray of stringNo1-5 headlines. REQUIRED when building a new creative; not used when reusing creative_id / object_story_id.
creative_spec.descriptionstringNo
creative_spec.link_urlstringNoDestination URL (https). Required unless awareness/engagement or lead gen.
creative_spec.display_linkstringNo
creative_spec.call_to_actionone of SHOP_NOW, LEARN_MORE, SIGN_UP, BOOK_NOW, CONTACT_US, DOWNLOAD, GET_OFFER, GET_QUOTE and 11 moreNoCTA button. For profile visit ad sets (destination_type INSTAGRAM_PROFILE / FACEBOOK_PAGE / INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE) the CTA is dictated by the destination: VIEW_INSTAGRAM_PROFILE (Instagram), VISIT_PROFILE (Facebook)…
creative_spec.url_parametersstringNoUTM tags.
creative_spec.deep_linkstringNoMobile deep link (e.g. myapp://product/123). App-promotion ads only: sent as the CTA’s app_link with app-store fallback (applink_treatment). Requires App Links / the Meta SDK configured in the promoted app.
creative_spec.partnership_page_idstringNo
creative_spec.partnership_instagram_user_idstringNo
creative_spec.threads_page_idstringNo
creative_spec.ad_template_idstringNo
creative_spec.product_tagsarray of stringNo
creative_spec.catalog_idstringNo
creative_spec.catalog_namestringNo
creative_spec.product_set_idstringNo
creative_spec.product_set_namestringNo
creative_spec.leadgen_form_idstringNoId of the Instant Form of a lead ad, from adsap_manage_instant_form or adsap_list_meta_assets (asset_type instant_forms). The form must belong to the same Facebook Page as the ad.
creative_spec.multi_advertiser_opt_inbooleanNoDefault true.
creative_spec.account_enhancementsanyNo
creative_spec.ad_schedule_startstringNo
creative_spec.ad_schedule_endstringNo
statusone of PAUSED, ACTIVENo
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.
idempotency_keystringNo

Example prompts

  • “Create a video ad in the Retargeting ad set using the summer-hero clip, headline ‘Free shipping this week’, linking to our sale page.”
  • “Make an image ad from the blue-sneaker asset with three primary text variations and a Shop Now button.”
  • “Preview an ad for the App Installs ad set that sends people to the App Store listing.”

Notes

For App promotion ad sets, the link is the app store URL and the call to action is Install Mobile App.

  • adsap_duplicate_ad_set: Duplicate an existing Meta ad set into 1-10 copies, keeping ALL its ads (including ads with no delivery yet).
  • adsap_get_ad: Read ONE ad in full, live from Meta: its creative content (primary texts, headlines, descriptions, CTA, destination link, URL parameters…
  • adsap_get_ad_review_status: Check review and policy status of all active (optionally paused) ads in an account.
  • adsap_get_ad_set: Read ONE ad set in full, live from Meta: complete targeting spec (geo incl. regions/cities, age, genders, custom audiences…
  • adsap_get_ad_status: Check the current delivery, review, and effective status of a single Meta ad.
  • adsap_list_ad_accounts: List Meta ad accounts the user manages.

Guide

Read Building the ads 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.

Last updated on