meta_list_pixels
List the Meta Pixels installed on a Meta advertiser.
Ask which Pixel an ad set that optimizes for conversions can use. The agent reads all the Pixels of the advertiser, so that it does not guess one.
Which Pixel should a conversion campaign on Northwind use?
The agent calls meta_list_pixels. A long list comes one part at a time. The agent reads each part. You see each Pixel with the time of its last event. The agent proposes the Pixel with the most recent event. Change what runs on Meta shows where this step comes in the job.
Reference
List the Meta Pixels installed on a Meta ad account. A conversion-optimizing ad set must name one, so call this before creating such an ad set. Returns { id, name, lastFiredTime } per Pixel — prefer one that has fired recently, since a pixel that has never fired is usually not installed. An answer can hold no Pixel and still carry nextCursor. When no answer holds a Pixel, up to the answer with no nextCursor, the account has no Pixel. The answer holds at most limit rows (default 100, maximum 500). When it carries nextCursor, more rows exist: call this tool again with the same arguments and cursor set to that value. When it carries no nextCursor, you have every row.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
advertiserId |
string | yes | Advertiser account ID (acc_<id>). Must belong to the active organization — find one with list_advertisers. |
cursor |
string, at least 1 character | no | The nextCursor of the previous page. Omit it to get the first page. Send it with no change, and with the same filters as the request that answered it: a cursor from a different query gets a 400 invalid_cursor. Do not build or change a cursor. |
limit |
integer, 1 to 500 | no | The greatest number of rows on the page, from 1 to 500. The default is 100. A greater value gets a 400, with error of invalid_request. Default: 100. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
nextCursor |
string | no | Send this value as cursor to get the next page. It is absent on the last page. |
pixels |
array of object | yes | The Meta Pixels of the advertiser, in the order of Meta. The list can be empty when nextCursor is present. Then more Pixels can exist. When no answer holds a Pixel, up to the answer with no nextCursor, the advertiser has no Pixel. |
pixels[].id |
string | yes | The Meta id of the Pixel. Give it as pixelId to meta_create_adset. |
pixels[].lastFiredTime |
string or null | yes | The time of the last event that the Pixel received, as Meta writes it (ISO 8601). It is null for a Pixel that never received an event. |
pixels[].name |
string | yes | The name of the Pixel in Meta. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
not_foundprovider_not_connectedprovider_errorinvalid_cursorforbiddeninvalid_requestinternal_error
Scope
The token must hold observe:read. Auth & scopes 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:
{
"advertiserId": "acc_1485443900032333",
"limit": 2
}
The result, in structuredContent:
{
"nextCursor": "eyJwIjp7ImFmdGVyIjoiUVZGSVVuQjRZMkYwWDJoUWJuTmZPV1JmWkEifSwicSI6IjE4bW0ydjdwNzllIn0",
"pixels": [
{
"id": "812345678901234",
"lastFiredTime": "2026-09-24T08:15:02+0000",
"name": "Northwind Web Pixel"
},
{
"id": "698765432109876",
"lastFiredTime": null,
"name": "Old test pixel"
}
]
}