> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Facebook Ads as an MCP

> Let your AI agents use Facebook Ads in real time through the Nekt MCP Gateway.

Meta (Facebook and Instagram) Ads allows you to run and manage paid marketing campaigns. By connecting Facebook Ads as an MCP, your agent can analyze ad performance, retrieve collected leads, and create or update campaigns, ad sets, and ads directly.

| | Available |
| :- | :- |
| **Nekt Express** | Yes |
| **GCP** | Yes |
| **AWS** | Yes |

## Adding Facebook Ads as an MCP

Before you start, make sure the [MCP Server](/mcp-server/setup) is set up. See [MCPs](/mcps/overview) for how MCPs work.

1. Go to **Activate → [MCPs](https://app.nekt.ai/mcps)**, click **New MCP** and choose **Facebook Ads**.
2. **Name your MCP** and describe what it is used for. The agent reads the description to choose between MCPs of the same provider.
3. **Setup access**. Click the sign-in button and authorize with a Meta account that can see the data you want the agent to use. Actions run with that account's permissions.
   * **Sign in with Meta**: Sign in with a Meta account that has access to the ad accounts (and pages, for Lead Ads) you want to read from and manage. (Required)
4. **Select tools**. Pick the tools your agents can use. See [Available tools](#available-tools) below.
5. Click **Save**. On Growth and Custom plans, choose who can use it; see [Access levels](/mcps/overview#access-levels).

## Example prompts

* "What was the total spend and number of impressions for our active campaigns over the last 30 days?"
* "Fetch the latest leads submitted to our spring promotion lead form."
* "Create a new paused traffic campaign with a daily budget of \$100."
* "Pause any active ads in the 'Retargeting' ad set."

## Available tools

Choose which of these tools your agents can use in **Select tools**.

<Note>
  **What changed in v1.9.** Updated: `create_video_ad`.
</Note>

### Read tools

| Tool | Description | Parameters |
| :- | :- | :- |
| `get_ad_performance` | Get performance metrics from a Meta ad account broken down at ad or adset level for a date range (YYYY-MM-DD; defaults to the last 30 days). level: ad or adset. | `account_id` (string, required), `level` (string), `end_date` (string), `start_date` (string) |
| `get_campaign_performance` | Get per-campaign performance metrics (impressions, clicks, spend, reach, actions) from a Meta ad account for a date range (YYYY-MM-DD; defaults to the last 30 days). | `account_id` (string, required), `end_date` (string), `start_date` (string) |
| `get_leads` | Get leads submitted to a Meta Lead Ads form (field data, created time, ad/campaign ids); since filters by creation date (YYYY-MM-DD). | `form_id` (string, required), `limit` (integer), `since` (string) |
| `list_ad_accounts` | List the Meta ad accounts accessible to the authenticated user, with name, id, currency and status. | — |
| `list_ad_sets` | List ad sets in a Meta ad account (optionally filtered by campaign id), with budget, optimization goal, targeting summary and schedule. | `account_id` (string, required), `campaign_id` (string) |
| `list_ads` | List ads in a Meta ad account (optionally filtered by ad set or campaign), with status and creative summary. | `account_id` (string, required), `ad_set_id` (string), `campaign_id` (string) |
| `list_campaigns` | List campaigns in a Meta ad account with status, objective, budget and schedule. | `account_id` (string, required), `include_archived` (boolean) |
| `list_lead_forms` | List Lead Ads forms of a Facebook page, with id, name, status and leads count. | `page_id` (string, required) |

### Write tools

| Tool | Description | Parameters |
| :- | :- | :- |
| `create_ad_set` | Create an ad set in a Meta campaign (created PAUSED by default); daily\_budget in the account currency (omit if the campaign uses CBO); bid\_amount in the account currency, required when the campaign bids with LOWEST\_COST\_WITH\_BID\_CAP or TARGET\_COST; bid\_strategy e.g. LOWEST\_COST\_… | `name` (string, required), `account_id` (string, required), `campaign_id` (string, required), `status` (string), `age_max` (integer), `age_min` (integer), `page_id` (string), `countries` (array), `bid_amount` (number), `bid_strategy` (string), `daily_budget` (number), `billing_event` (string), `destination_type` (string), `optimization_goal` (string), `advantage_audience` (boolean) |
| `create_campaign` | Create a campaign in a Meta ad account (created PAUSED by default). objective: OUTCOME\_TRAFFIC, OUTCOME\_LEADS, OUTCOME\_SALES, OUTCOME\_ENGAGEMENT, OUTCOME\_AWARENESS or OUTCOME\_APP\_PROMOTION; daily\_budget in the account currency (only for Campaign Budget Optimization — omit to set… | `name` (string, required), `account_id` (string, required), `status` (string), `objective` (string), `daily_budget` (number), `special_ad_categories` (array) |
| `create_image_ad` | Create a single-image ad in a Meta ad set, PAUSED by default. `image_hash` comes from upload\_image. Pass `link` to send people to a URL, or `lead_gen_form_id` to open a native lead form in place — not both. | `name` (string, required), `message` (string, required), `page_id` (string, required), `ad_set_id` (string, required), `account_id` (string, required), `image_hash` (string, required), `link` (string), `status` (string), `headline` (string), `description` (string), `call_to_action` (string), `lead_gen_form_id` (string) |
| `create_link_ad` | Create a link ad (creative + ad) in a Meta ad set, created PAUSED by default: page post style ad pointing to a URL, with primary text (message), headline and call to action (e.g. LEARN\_MORE, SHOP\_NOW, SIGN\_UP, CONTACT\_US). Pass lead\_gen\_form\_id to make the button open a native l… | `link` (string, required), `name` (string, required), `message` (string, required), `page_id` (string, required), `ad_set_id` (string, required), `account_id` (string, required), `status` (string), `headline` (string), `description` (string), `call_to_action` (string), `lead_gen_form_id` (string) |
| `create_video_ad` | Create a video ad in a Meta ad set, PAUSED by default. `video_id` comes from upload\_video. Pass `link` for an ad that sends people to a URL, or `lead_gen_form_id` for one that opens a native lead form in place — not both. `thumbnail_url` is the still frame shown before the video… | `name` (string, required), `message` (string, required), `page_id` (string, required), `video_id` (string, required), `ad_set_id` (string, required), `account_id` (string, required), `thumbnail_url` (string, required), `link` (string), `status` (string), `headline` (string), `call_to_action` (string), `lead_gen_form_id` (string) |
| `delete_ads_object` | Permanently delete a Meta ads object by id: campaign, ad set or ad. Deleting a campaign also deletes its ad sets and ads. This cannot be undone — to just stop delivery, use update\_campaign/update\_ad\_set/update\_ad\_status with status PAUSED. | `object_id` (string, required) |
| `update_ad_set` | Update a Meta ad set: status (ACTIVE/PAUSED), name, daily budget and/or bid amount in the account currency. | `ad_set_id` (string, required), `name` (string), `status` (string), `bid_amount` (number), `daily_budget` (number) |
| `update_ad_status` | Change a Meta ad's status: ACTIVE to activate or PAUSED to pause it. | `ad_id` (string, required), `status` (string, required) |
| `update_campaign` | Update a Meta campaign: status (ACTIVE to activate, PAUSED to pause), name and/or daily budget in the account currency (CBO campaigns only). | `campaign_id` (string, required), `name` (string), `status` (string), `daily_budget` (number) |
| `upload_image` | Upload an image to a Meta ad account's media library from a public URL, returning the image\_hash that create\_image\_ad needs. Unlike video, Meta does not fetch image URLs — the bytes are downloaded here and forwarded. | `image_url` (string, required), `account_id` (string, required), `filename` (string) |
| `upload_video` | Upload a video to a Meta ad account's media library from a public URL, returning the video\_id that create\_video\_ad needs. Meta fetches the URL itself, so the file has to be reachable without authentication. Transcoding continues after this returns — a video used immediately may… | `name` (string, required), `video_url` (string, required), `account_id` (string, required) |

## Troubleshooting

**Expired or revoked access**
If your Meta session expires or you revoke Nekt's access from your Meta account settings, the MCP will show that it needs to reconnect. Go to the MCP's page in Nekt and sign in again to restore access.

**Missing leads or pages**
To read lead information, the Meta account you used to authorize the connection must be an admin of the corresponding Facebook page. If the agent cannot access leads, verify your page roles in Meta.

## Need help?

Contact our support team if you have trouble connecting Facebook Ads.
