Skip to main content

// for performance marketers

Spend smarter across every channel — auditably.

Magistry's Campaign Specialist runs Google, Meta, TikTok, and Bing inside the rules you set — budget pacing, bid switches, Customer Match audiences, anomaly response. Every move a row in ad_decision_log. Every move reversible.

4 channels, one spine Customer Match audit-trailed Per-action rate limits

// why performance marketers pick magistry

A teammate that watches the channels you can't keep five tabs open on.

Pacing, bids, audiences, creative briefs, anomaly response — Magistry runs the cycle inside your floor and ceiling, so you focus on the bets, not the babysitting.
01

Budgets pace inside your guardrails, not against them

Daily caps, lifetime caps, channel splits, blended ROAS floor — Magistry adjusts bids and budgets nightly without breaching a single rule you set.

02

Anomaly responder catches drops before the dashboard does

ROAS down 23% on a winning ad-group at 11pm? Magistry pauses the bleed, writes an explanation, and queues a creative brief for the morning — without waking you.

03

Customer Match cohorts rebuild themselves nightly

Refunders, complainers, LTV repeaters, lapsing buyers — segments sync to Meta, Google, TikTok, and Klaviyo as audit-trailed writes, not CSV uploads from a coffee shop.

04

Creative fatigue triggers briefs the day it shows up

Magistry watches CTR + frequency curves per ad. The moment decay starts, it briefs replacement RSAs and statics — never the day after the budget has already bled.

// this week

What Magistry did across your channels this week.

A real week from a Magistry tenant running the Campaign Specialist in live mode — every bid, budget, audience, and brief a row in ad_decision_log.
  • Caught Meta CTR decay on the hero static at frequency 4.2 — paused the variant, briefed 3 replacement statics, queued for your sign-off by 09:00 Tuesday.
  • Shifted €1,840 from Google Pmax to Meta Advantage+ overnight after blended ROAS broke 3.4 — every reallocation a row in ad_decision_log with the reverse op.
  • Rebuilt Customer Match cohorts: refunders -1,121, lapsing 90d +3,408, LTV>€400 +192 — synced to Meta, Google, TikTok, Klaviyo in 4 audit-trailed writes.

// from your dashboard

One spend shift. One reason. One reverse op.

Every campaign move Magistry makes is a row in ad_decision_log — bid changes, budget shifts, audience writes, RSA drafts. Here's the row from last night's anomaly response.
ad_decision_log #12,884  ──  2026-05-25 02:41 UTC
agent          campaign_specialist
action         BUDGET_SHIFT
from           google_pmax::all_products    EUR 320/d
to             meta_advantage::US-LAL-3      EUR 320/d
trigger        blended_roas 7d 3.44 > floor 3.20
               pmax_ctr 7d  -19% vs 28d
               advantage_roas 7d  4.71
guardrails     channel_split max 60/40  — OK
               daily_cap unchanged          — OK
               rate_limit 1/24h per group   — OK
mutation       google_ads.campaign.budgetUpdate
               meta_ads.adset.budgetUpdate
reverse_op     restore prior split  (1-click)
status         APPLIED
operator       auto  (gate=allow, kill_switch ON)

// what you actually see

One Slack ping. One reason. One revert.

You wake up to a one-line summary: what shifted, why, and whether anything needs your call. The CFO question is answered before they ask it — because the row says so.

otto: 02:41 — shifted €320/d Pmax → Meta Adv+ · blended ROAS 3.44 > floor · revert

// what performance marketers are saying

From an operator whose CFO finally sleeps.

“The ad_decision_log is the killer feature. Every move is a row we can audit and reverse. My CFO sleeps better, my agency stopped asking 'why did you change that' on Mondays, and I stopped writing post-mortems about overnight pacing.”

Jacob Dorian
Head of Paid Media
SOLACE

// spend, audited

Stop reconciling four ad dashboards. Run one spine.

Spin up a tenant, connect Google, Meta, TikTok, and Bing, and watch every pacing decision, audience write, and creative brief land as a reversible row in ad_decision_log.

Kill switch ON by default · Dry-run from day one