Skip to Content
Tool referenceManage instant form (create / duplicate / archive / reactivate)

Manage instant form (create / duplicate / archive / reactivate) (adsap_manage_instant_form)

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

What it does

Creates, duplicates, archives or reactivates a Meta Instant Form, the lead form people fill in without leaving Facebook or Instagram. Meta never lets a form be edited or deleted once it exists, so the first call is always a preview that creates nothing. A form belongs to one Facebook Page and only works in ads that run for that Page.

When to use it

  • Use it when you want a lead ad and the Page has no suitable form yet.
  • The first call is always a preview. The assistant creates the form only after you confirm.
  • Save a privacy policy link and a thank-you screen for the Page once, in the Defaults for new forms card on the Instant Forms page in Adsap. When the assistant leaves those two sections out, the preview fills them in from your defaults and lists them, and the assistant shows them to you before it creates anything. With no defaults saved, the preview says what is missing and the assistant asks you. It never makes up a link or a thank-you text.
  • To change a form, use action duplicate with a new form.name and only the sections to replace, then archive the old one. Meta has no edit. A duplicate never takes the saved defaults.
  • To see a Page’s forms first, use adsap_list_meta_assets with asset_type instant_forms. To read one form in full, use adsap_get_instant_form.
  • The new form_id goes into creative_spec.leadgen_form_id of adsap_create_ad, on an ad set whose conversion location is Instant Forms or Website and Instant Forms.

Worked example

You ask

“Create an Instant Form called Newsletter signup on my brand Page. Ask for full name and email, and which product they are interested in: Signs or Lamps. Preview it first.”

The assistant calls adsap_manage_instant_form

{ "action": "create", "ad_account_id": "act_1234567890", "page_id": "100000000000001", "form": { "name": "Newsletter signup", "questions": [ { "type": "FULL_NAME" }, { "type": "EMAIL" }, { "type": "CUSTOM", "label": "Which product are you interested in?", "options": ["Signs", "Lamps"] } ] }, "dry_run": true }

Adsap returns

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

{ "ok": true, "dry_run": true, "operation": "create", "page": { "id": "100000000000001", "name": "Your Brand", "lead_terms_accepted": true }, "would": { "method": "POST", "endpoint": "/100000000000001/leadgen_forms", "params": { "name": "Newsletter signup", "is_optimized_for_quality": false, "block_display_for_non_targeted_viewer": false, "questions": [ { "type": "FULL_NAME", "key": "full_name" }, { "type": "EMAIL", "key": "email" }, { "type": "CUSTOM", "label": "Which product are you interested in?", "options": [ { "value": "Signs", "key": "o1" }, { "value": "Lamps", "key": "o2" } ], "key": "which_product_are_you_interested_in" } ], "privacy_policy": { "url": "https://example.com/privacy", "link_text": "Privacy policy" }, "thank_you_page": { "title": "Thanks, you are on the list.", "button_type": "NONE" } } }, "warnings": [], "defaults_used": ["privacy_policy", "thank_you"], "defaults_applied": { "privacy_policy": { "url": "https://example.com/privacy", "link_text": "Privacy policy" }, "thank_you": { "title": "Thanks, you are on the list.", "button_type": "NONE" } } }

How to read it

would is the exact request Adsap will send to Meta, and nothing exists yet. defaults_used names the sections Adsap took from the defaults saved for the Page, and defaults_applied shows what they contain; the assistant shows you both before it creates anything. lead_terms_accepted confirms the Page has accepted Meta’s Lead Ads Terms; when it has not, the call stops with LEAD_TERMS_NOT_ACCEPTED and a link for a Page admin. Each question gets a key, the field name your leads arrive under.

The full response also has a human_readable_summary sentence, left out here. Once you confirm, the assistant sends the same call as a real create, and the answer returns form.form_id.

Parameters

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

NameTypeRequiredDescription
actionone of create, duplicate, archive, reactivateYescreate a new form; duplicate an existing one with changes (the only way to ‘edit’, since Meta never lets a form be modified)…
ad_account_idstringYesMeta ad account (act_…) the Page is connected to. Used for access checks.
page_idstringNoRequired for every action. Numeric id of the Facebook Page that owns the form. A form belongs to ONE Page and only works in ads that run for that Page.
form_idstringNoRequired for duplicate, archive and reactivate.
formobjectNocreate: name and questions are required; privacy_policy and thank_you come from the defaults saved for the Page when you leave them out. duplicate: a NEW name plus only the sections to replace; a section you send replaces the whole section, everything else is copied as is.
form.namestringNoInternal form name, never shown to people. Must be unique on the Page, archived forms included.
form.localestringNoLanguage of Meta’s own buttons and labels inside the form, e.g. EN_US, EN_GB, FR_FR, ES_ES, DE_DE, IT_IT, PT_BR. Omit for the Page default.
form.form_typeone of more_volume, higher_intentNomore_volume (default) or higher_intent, which adds a review step where people confirm their answers before sending: fewer leads, usually better ones.
form.block_organicbooleanNotrue = only people targeted by the ad can send the form. Default false (a shared link to the ad also works).
form.questions_headlinestringNoOptional headline above the questions.
form.introobjectNoOptional first screen that explains the offer before the questions.
form.questionsarray of objectNoIn the order people see them. At least one.
form.privacy_policyobjectNoMeta requires one on every form. Leave it out to use the default the user saved for this Page in Adsap. If none is saved the preview says so: then ask the user for the link, and never invent one.
form.custom_disclaimerobjectNoOptional legal text with consent boxes, shown with the privacy policy.
form.thank_youobjectNoThe screen people see after sending the form. Leave it out to use the default the user saved for this Page in Adsap. If none is saved the preview says so: then ask the user what it should say.
form.tracking_parametersobjectNoHidden name/value pairs sent with every lead (e.g. source=meta_leads). A name may not equal a question’s field key (email, full_name, or the slug of a custom question).
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.

Example prompts

  • “Create an Instant Form on my Page asking for name, email and phone, and preview it first.”
  • “Duplicate my Newsletter signup form as Newsletter signup v2, with a higher intent review step.”
  • “Archive the old Summer contest form.”

Notes

A problem with the form comes back as INVALID_INPUT with every issue listed at once. Meta allows at most 3 short answer questions per form; multiple choice questions are not capped. A tracking parameter cannot share its name with a question key. A real create, duplicate, archive or reactivate uses one task; previews use none.

Not available: conditional logic, which Meta keeps for its own interface. Not built in Adsap yet: appointment, store locator and national ID questions, and file downloads on the thank-you screen.

  • adsap_get_instant_form: Read ONE Meta Instant Form in full: questions, intro, privacy policy and custom disclaimer, thank-you screen, tracking parameters, status…
  • adsap_list_ads: List ALL ads inside an ad set or a campaign, live from Meta: including ads created today that have no delivery yet (which insights-based…
  • adsap_search_detailed_targeting: Search Meta detailed targeting the way Ads Manager’s search box does: interests, behaviors AND demographics (job titles, employers…

Guide

Read AI Copilot usage 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