---
title: meta_create_ad
description: Create a Meta ad under an ad set, using a creative that already exists. Always paused.
---

Puts an existing creative into an ad set. This is the step that turns a campaign and an ad set into something that would actually deliver — once you activate it.

:::warning[Nothing spends until you say so]

Created **PAUSED**, always. There is no `status` input at any layer. Activate with [`meta_set_status`](/mcp/tools/meta-set-status) when you're ready.

:::

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiserId` | `acc_*` | yes | The Meta advertiser. |
| `adsetId` | `string` | yes | Parent ad set — including one created moments ago. |
| `creativeId` | `string` | yes | An ad creative that **already exists** on the account. |
| `name` | `string` | yes | Ad name, as it appears in Ads Manager. |

## The creative must already exist

There is no way to build a creative here, and that is deliberate: an inline creative spec would swallow the widest schema on the platform into the thinnest tool, and it would break creative **reuse** — one creative referenced by many ads is a normal Meta pattern, not an edge case.

Find one with [`list_entities`](/mcp/tools/list-entities) using `type: 'creative'`. Reusing a creative that has already proven itself in another ad set is often the point.

## Output

`{ workflowId }`. Poll [`get_mutation_status`](/mcp/tools/get-mutation-status) for the new ad's `{ id }`.

## Errors

- A creative that doesn't exist, or belongs to another account, comes back as **Meta's own rejection** — including its error subcode. AdCrunch doesn't pre-check either parent against its own records, because an ad set or creative created seconds ago legitimately won't be there yet.
- `Advertiser not found for this organization` — call [`list_advertisers`](/mcp/tools/list-advertisers).
- `This advertiser is connected without write access` — reconnect Meta and grant write permission.
- `401` or `403` — see [Errors](/mcp/errors), which every tool shares. This one needs `mutation:write`.
