---
title: meta_list_pages
description: List the Facebook Pages that your Meta connection can advertise from.
---

Ask which Facebook Page an ad can speak from. The agent reads the Pages of your Meta connection, so that you can choose one before it builds a creative.

> Which Facebook Page can an ad on Northwind run from?

The agent calls `meta_list_pages` with the Northwind advertiser, and you see the name of each Page. [Change what runs on Meta](/mcp/tools/change-what-runs-on-meta) shows where this step comes in the job.

## Reference

**Available on:** [![Meta](/providers/meta.svg)](https://docs.adcrunch.dev/connect/providers)

List the Facebook Pages this Meta connection can advertise from. Every ad creative must speak from one of these Pages, so call this before creating a creative and confirm the choice with the user. Returns `{ id, name }` per Page. The list is scoped to the connection, not to the advertiser, so it is the same for every advertiser on one Meta account; Meta itself refuses a Page the advertiser may not use when the creative is created. An empty list means no Page was shared when Meta was connected — reconnecting and granting a Page is what fixes it.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiserId` | string | yes | Advertiser account ID (`acc_<id>`). Must belong to the active organization — find one with `list_advertisers`. |

### Output

A successful call returns this object in `structuredContent`.

| Field | Type | Always present | Description |
| --- | --- | --- | --- |
| `pages` | array of object | yes | The Facebook Pages that this Meta connection can advertise from. The list holds 100 Pages at most. An empty list means that the person who connected Meta shared no Page. |
| `pages[].id` | string | yes | The Meta id of the Page. Give it as `pageId` to `meta_create_creative`. |
| `pages[].name` | string | yes | The name of the Page on Facebook. |

### 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`
- `provider_not_connected`
- `provider_error`
- `forbidden`
- `invalid_request`
- `internal_error`

### Scope

The token must hold `observe:read`. [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.

- **Read-only.** The tool changes nothing.
- **Open world.** The tool reaches a system outside AdCrunch, such as an ad platform.

### Example

The arguments:

```json
{
  "advertiserId": "acc_1485443900032333"
}
```

The result, in `structuredContent`:

```json
{
  "pages": [
    {
      "id": "104857392018274",
      "name": "Northwind Outdoor"
    },
    {
      "id": "112233445566778",
      "name": "Northwind Outlet"
    }
  ]
}
```
