---
title: get_campaign
description: Get all the stored fields of one campaign at Meta, TikTok or Google Ads.
---

Ask for all the settings of one campaign. The agent reads the fields that AdCrunch stored from the provider for that campaign.

> Show me all the settings of the Spring sale campaign.

The agent reads the stored fields of that campaign. You see each field in the words of the provider, such as the start time of the campaign, and a Meta budget in whole units of the currency of the ad account. [Read your accounts](/mcp/tools/read-your-accounts) shows the full job.

## Reference

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

Get all the stored fields of one campaign at Meta, TikTok or Google Ads, by its ad account and its id. A campaign here is the object at the provider, not a Campaign Plan: for those, use campaign_plan_list. AdCrunch converts the Meta fields `daily_budget`, `lifetime_budget` and `bid_amount` to whole units of the account currency (50 is 50.00). This is the unit of `budget` in the list tools. When AdCrunch does not know the account currency, these Meta fields are null. A field whose name ends in `Micros` stays in micros (12340000 is 12.34). Every other field has the value that the provider sent. It sends the payload that AdCrunch stored from the provider at the last ingestion, with the field names of the provider. Use it when a row of list_campaigns does not hold the field that you need. To read the row of the provider now, use meta_list_campaigns, tiktok_list_campaigns or gads_list_campaigns with `ids` set to the id. An ad account that your organization does not own, an id that AdCrunch does not store for that ad account, and a provider that has no campaigns each give `not_found`.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiserId` | string | yes | The ad account that holds the campaign, prefixed `acc_`. It must belong to your organization. Each row of list_campaigns gives it as `advertiserId`. |
| `id` | string | yes | The id that the provider gives the campaign, with no prefix. Each row of list_campaigns gives it as `id`. |

### Output

A successful call returns this object in `structuredContent`.

| Field | Type | Always present | Description |
| --- | --- | --- | --- |
| `campaign` | map of any | yes | The payload that AdCrunch stored from the provider for the campaign. The keys are the keys of the provider, and they differ for each provider: a Meta campaign has `objective`, `daily_budget` and `start_time`, and a TikTok campaign has `campaign_id`, `campaign_name` and `objective_type`. |

### 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`
- `payload_unavailable`
- `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.
- **Closed world.** The tool reads and writes the data of AdCrunch only.

### Example

The arguments:

```json
{
  "advertiserId": "acc_1203456789012345",
  "id": "120210000000000"
}
```

The result, in `structuredContent`:

```json
{
  "campaign": {
    "account_id": "1203456789012345",
    "created_time": "2026-09-16T23:06:40+0000",
    "daily_budget": 250,
    "id": "120210000000000",
    "name": "Spring sale — prospecting",
    "objective": "OUTCOME_SALES",
    "start_time": "2026-09-17T00:00:00+0000",
    "status": "ACTIVE",
    "updated_time": "2026-09-20T10:26:40+0000"
  }
}
```
