# Read Meta campaign performance the right way

> Tier: recipe. Operating recipe: real tool sequence, core rules, known traps.

The Meta campaign table with objectives attached, because a conversions campaign and a reach campaign do not share a scoreboard.

**Intent.** Campaign performance ranked by spend, with objectives and buying types visible.

## When to use

- Any 'how is Meta doing' question.
- First read on an unfamiliar account.

## When not to use

- Averaging across objectives: separate the scoreboard by objective first.

## Sources

Required: Meta Ads

## Preconditions

- The account is ticked in the dashboard, confirmed via list_accounts.

## Inputs

- `window`: Analysis window. Default: last 30 days.

## Procedure

1. Pull campaigns with objective, buying type, status. — tools: `meta_get_campaigns`
2. Pull performance per campaign over the window, ranked by spend. — tools: `meta_get_insights`

## Decision rules

- **When** Campaigns with different objectives are compared on CPA → **conclude** Invalid comparison: judge each against its own objective's metric.
- **When** CBO campaigns are judged at ad set level → **conclude** The budget decision lives at campaign level there: read the campaign as the unit.

## Evidence requirements

- Every figure carries its account, metric and window.
- Anything below a readable sample size is reported as unjudged, not as zero.

## Human approval boundary

- The readout changes nothing. Any change it motivates goes through Safe Writes: preview, human confirmation, then apply.

## Failure modes

- Attribution setting differences between campaigns silently change what 'a conversion' means in the same table.

## Output

- **Readout**: The figures, with windows and accounts named.
- **Flags**: What deserves a deeper skill or a human decision.
