Campaigns & Pacing
The synced campaign portfolio, each campaign's detail page, and the pacing engine's moves
Last updated 11 Oct 2026Monitor · article 3 of 3
The Campaigns page is your portfolio view of the campaigns Cesteral has synced from your connected ad platforms. Open Campaigns in the sidebar, under the Operate group (or go to /workspace/campaigns). Pacing, the autonomous pacing engine, sits nested under it.
Campaign data comes from a sync of your connected platforms and is connector-gated: the page is empty until a platform is connected and synced. The page never edits a campaign — to create or change one, ask the assistant in Chat. Live execution against external ad platforms is connector-gated and not enabled by default.
Where the Data Comes From
Cesteral reads campaigns through each platform connection (see Supported Platforms) and keeps a copy, refreshed about every two hours. The page lists the active project's campaigns. The Sources line above the table lists the connections feeding the page, how recent the latest sync is, the campaign count, and a health state. Sync now requests an immediate sync; if campaigns were synced in the last 10 minutes it tells you they are already up to date.
The page holds the 500 most recently synced campaigns and says so when older ones are cut. With nothing synced yet it shows No campaigns synced yet and a Connect a platform button. Everyone with campaign read access, viewers included, can open the page.
The Portfolio Page
A strip at the top gives four figures for the whole portfolio, not the filtered list: Active campaigns (of those synced), Total spend, Blended ROAS (weighted by spend), and Needs attention. When platforms report different currencies, or one reports none, the total is shown as a plain number and labelled rather than given a single currency symbol.
Needs Attention
This zone appears only when there is something to act on. It holds two kinds of card:
- A metric anomaly — spend, impressions, clicks, conversions, CTR, CPA, or ROAS sitting at least two standard deviations from its 7-day baseline (three or more is flagged critical). Cesteral checks the ten highest-spend campaigns and needs at least three synced snapshots. Investigate opens the campaign.
- A connection issue — a connection that is failing or needs re-authentication. Fix connection opens Integrations.
All Campaigns
The table shows each campaign's name, platform, a one-line note, Spend pace, ROAS, and a 7-day ROAS sparkline (drawn once two daily points exist). A detected anomaly takes over the note; otherwise it reads from status and budget. Lifetime budgets show a spend-against-budget bar that turns amber at 90%; daily budgets show lifetime spend and average daily spend against the daily budget.
Filter by status with the chips (All, Active, Draft, Paused, Completed, Archived, Unknown) or search by name. Create campaign in the page header opens Chat.
A scope bar above the page narrows the list by Platform; select Refine to choose. The strip, Needs attention, and the lifecycle board stay portfolio-wide, and the page says so. Advertiser, brand, market, and media channel do not narrow this list because Cesteral records none of them for synced campaigns. A working scope lists its campaign first and marks it In working scope; it hides nothing.
Campaign Lifecycle
The board sorts every synced campaign into a governance stage, troubled campaigns first, four per column with a "+N more" line:
| Column | Holds | Footer link |
|---|---|---|
| Preflight | Draft campaigns | Queue, filtered to change sets |
| In-flight | Active, paused, and unknown-status campaigns, with an "x/y healthy" count | Pacing |
| Post-flight | Completed and archived campaigns | Action results |
A campaign's dot turns amber when it is paused or has used 90% of its budget, and red at 100%.
A Campaign's Detail Page
Select a campaign (/workspace/campaigns/[id]) to see its status, platform, objective, flight dates, and last sync, then:
- Launch readiness — shown for draft and paused campaigns. It gives a verdict (Cleared to launch, Launch with caution, or Blocked from launch), a score out of 100, and the issues found, each marked Hard gate, Warning, or Advisory with a suggested fix. Request go-live is disabled while a hard gate fails; otherwise it re-checks the gates and files a launch change request that goes through approval. It needs permission to run governed actions (editor and above). Follow it in the Queue.
- Governance checks — cards for Anomalies, Active pauses that apply to the campaign, and Naming against your default naming template.
- Delivery — spend, budget, pacing, impressions, clicks, conversions, CTR, CPA, and ROAS from the latest sync. Pacing here is spend against budget for lifetime budgets and average daily spend for daily ones — a reference that assumes a continuous run.
- Trend — daily metric history from sync snapshots.
- Platform report — Pull report reads the last 7 days from the platform itself, not the cached copy. Platforms that only offer asynchronous reports show an explanation instead.
- Governance & related — cards to the campaign's pacing, creative placements in the Media library, spend limits, changes, and experiments.
Pacing
Open Pacing under Campaigns (/workspace/campaigns/pacing). It shows which campaigns the engine manages, what it changed, and how well that worked, from four figures: Active configs, Adjustments today, Avg pacing improvement (7-day average), and Autonomous rate (moves applied without escalation, 7-day). Everyone with governance read access can open it.
How the Engine Works
Each pacing config names a campaign, a strategy, and a target pace. On the config's scan interval the engine compares delivery with the target and makes small corrections within the strategy's bounds. A move that one of your budget envelopes forbids is skipped. Moves reach a platform only through its connector, so the connector gate above applies.
| Strategy | Largest single change | Acts when pace is off by at least | Changes per scan | Pause and resume |
|---|---|---|---|---|
| Conservative | 5% | 10% | 3 | No |
| Moderate | 10% | 5% | 5 | No |
| Aggressive | 20% | 3% | 10 | Yes |
A config's own maximum adjustment lowers the cap if it is smaller. When a campaign is too far off to correct within bounds (off by more than 20%, critical, or needing more than twice the maximum adjustment), the engine makes no change and raises a high-priority alert that links back to Pacing.
Moves
Moves lists the engine's budget, bid, and pause or resume changes from the last 14 days (the newest 100). Use the tabs All moves, Needs attention (failed moves, or moves waiting on a person), Applied, and Reverted, and the chips All types, Budget, Bid, and Pause & resume. Each row shows the entity, type, change, reason, and a state: Auto-applied, Queued, Failed, or Reverted (a move that is running reads as applying).
A move's page (/workspace/campaigns/pacing/[id]) shows Why this move (reason, entity, trigger, change), Bounds (the caps above and whether the move stayed inside them), and Effect: pacing before and after, pacing improvement, CPA before and after where recorded, and an effectiveness score. Effect is measured about 24 hours after a move executes; until then it reads "Not yet measured".
Configuring the Engine
Pacing is configured from chat, not a form: Configure in chat opens Chat, and you can ask, for example, for conservative pacing on a named campaign. The assistant's create, update, and delete optimization-config tools do the work. They are governed writes like any other, so rules and approvals apply.
| Setting | Default |
|---|---|
| Strategy | Conservative |
| Target pacing | 95% |
| Maximum adjustment | 10% |
| Scan interval | 4 hours (1 to 168) |
The Optimization configs table lists each campaign with its platform, strategy, target pacing, state (Active or Paused), and when it was last optimized.
Related articles
Still stuck? Browse the FAQ or contact us.