---
title: brand_attach_advertiser
description: Attach an ad account to a brand, so that an agent that works on the ad account finds the brand.
---

Ask to connect an ad account to a brand. After that, an agent that works on the ad account finds the brand.

> "Attach our Meta ad account to Acme."

The agent finds the ad account with [`list_advertisers`](/mcp/tools/list-advertisers), and then calls `brand_attach_advertiser`. You then see the ad account in the list of the brand.

The job guide [Describe a brand](/mcp/tools/describe-a-brand) shows each step of the job.

## Reference

Attach an ad account to a brand, so an agent working on that account can find this brand context with brand_resolve. Attaching twice is harmless.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiser_id` | string | yes | The ad account id (`acc_…`). Discover ids with list_advertisers. |
| `brand_name` | string | yes | The brand slug. |

### Output

A successful call returns this object in `structuredContent`.

| Field | Type | Always present | Description |
| --- | --- | --- | --- |
| `advertiserId` | string | yes | The ad account (`acc_…`). |
| `brandSlug` | string | yes | The slug of the brand. |
| `provider` | string | yes | The provider of the ad account, such as `meta`. AdCrunch reads it from the ad account. |

### Failure codes

A failed call has `isError` set, and `structuredContent.error` holds one of these codes. [Errors](/mcp/errors) describes the shape of a failed call.

- `not_found`
- `advertiser_not_owned`
- `forbidden`
- `invalid_request`
- `internal_error`

### Scope

The token must hold `brand:write`. [Auth & scopes](/mcp/auth) lists each scope.

### Annotations

A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.

- **Writes.** The tool can change data.
- **Destructive.** The tool can make a change that you cannot undo. A client can ask you to confirm before it calls the tool.
- **Idempotent.** A second call with the same arguments changes nothing more.
- **Closed world.** The tool reads and writes the data of AdCrunch only.

### Example

The arguments:

```json
{
  "advertiser_id": "acc_1203456789012345",
  "brand_name": "acme"
}
```

The result, in `structuredContent`:

```json
{
  "advertiserId": "acc_1203456789012345",
  "brandSlug": "acme",
  "provider": "meta"
}
```
