Campaign operations

Campaign operations with a safety interlock

Create campaigns paused across every platform, edit budgets, targeting and copy with previews, and put approvals in front of anything that spends. AI does the click-work; humans keep control of money.

A multi-platform launch is the same structure rebuilt three or four times in three or four ad managers — campaigns, ad sets, naming, budgets, targeting — where one slipped digit becomes real spend. Opera builds it once from your conventions, everywhere, paused.

Each platform's structure, respected

Opera doesn't flatten platforms into a lowest common denominator — it builds each one natively:

What gets created, per platform
Meta Adsad account (act_…) → campaign → ad set → ad; objective, placements, budget level set per your convention
Google AdsMCC → 10-digit customer ID → campaign → ad group → ad; network and bidding set explicitly
TikTok Adsadvertiser_id → campaign → ad group → ad; optimization event mapped to your taxonomy
Snapchat Adsad account → campaign → ad squad → ad; swipe vs view objectives set deliberately

Naming is applied identically across all of them — US_Prospecting_Meta_Jun26 and its siblings — because consistent naming is what makes prefix-scoped reporting work later.

Created paused. Always.

Every campaign Opera creates starts paused. Budgets are set, targeting is set, creatives are attached — and nothing can spend until a human flips it on. There is no configuration in which Opera launches live campaigns autonomously.

"Create paused prospecting campaigns across Meta, TikTok and Google using this creative pack — $150/day each, JO naming, broad targeting."

Edits with previews, not surprises

Changing live campaigns is riskier than creating paused ones, so every edit shows a diff first:

  • Budget changes — current → proposed, absolute and percentage, per campaign
  • Targeting edits — geos, audiences, placements added or removed, listed explicitly
  • Ad copy updates — old text vs new text, per ad
  • Status changes — exactly which campaigns pause or resume

You review the preview, approve, and only then does it execute. Bulk edits ('raise all JO prospecting budgets 20%') preview as the full list of affected campaigns.

Approvals: you decide what needs sign-off

Sensitive actions route through an approval step — and you define sensitive:

  • Going live on anything Opera created
  • Budget increases above a threshold you set
  • Targeting changes on flagged accounts or markets
  • Any action on a client marked approval-required

Each approval is one click in Slack or the log — with the full diff attached, so the approver sees exactly what they're authorizing.

Naming as infrastructure

Campaign names look cosmetic until you try to automate around them — then they're the schema of your ad account. A held convention ({GEO}_{Objective}_{Platform}_{MonthYear}) is what makes prefix-scoped reporting possible, what lets a bulk edit target "all JO prospecting" without a hand-built list, and what makes the audit log readable six months later. Opera enforces the convention at creation time: every object it builds is named from the stored pattern, which means the account stays grep-able as it grows. Teams that have lived through a season of freestyle naming — where finding last quarter's Germany tests means archaeology — tend to treat this as the quiet headline feature. The convention also survives staff changes: the pattern is configuration, not tribal knowledge, so the next buyer's launches match the last one's without a handover document trying to enforce it. When an exception is genuinely needed — a partner campaign with its own naming, a platform beta with different constraints — it ships as a documented exception in the log rather than a silent precedent, which is the difference between a convention and a suggestion.

Bulk edits, reviewed in one place

The Friday classic — "raise all JO prospecting budgets 20% and pause anything with CAC over $19" — is two ad-manager sessions by hand. As a previewed bulk edit it's one table:

Campaign Action Current Proposed
US_Prosp_Meta_Jun26 budget $150/d $180/d
US_Prosp_TikTok_Jun26 budget $150/d $180/d
US_Prosp_Snap_May26 pause active (CAC $19.40) paused

New client daily total computed at the bottom, against the cap. One approval executes the lot; the audit log records each change individually. The same mechanism handles end-of-month pacing pulls, promo-window boosts and the Sunday-night "pause everything in market X" — previewed, capped, reversible by the same path.

Who approves what

Approval routing is per action class and per client: launches and go-lives to the account lead, threshold-crossing budget changes to whoever owns the P&L, routine copy edits auto-approved and logged. Approvers see the diff inline — in Slack or the log — and approve with one click. The system's stance is simple: money-touching actions get a named human in the loop, and the loop is fast enough that nobody is tempted to route around it.

A launch, end to end

What the worked version looks like — one brief, three platforms:

"Create paused prospecting campaigns for the US market across Meta, TikTok and Google — $150/day each, JO naming, broad targeting, the June creative pack."

Opera resolves the convention and previews the full object list before anything exists:

Platform Object Name Budget State
Meta Campaign US_Prospecting_Meta_Jun26 Paused
Meta Ad set ×2 US_Prosp_Broad_18-44 / 45+ $75/day each Paused
TikTok Campaign US_Prospecting_TikTok_Jun26 $150/day Paused
Google Campaign US_Prospecting_Google_Jun26 $150/day Paused

Plus the ads themselves, creative-attached and copy-paired. You read the list the way you'd read a launch checklist — because it is one — fix anything in the preview, approve, and the structures are created exactly as listed. Still paused. Go-live is Monday morning, one click per market, by a human.

Budget guardrails in practice

Caps and thresholds turn "be careful" into configuration:

  • Per-client daily caps — Opera cannot create or edit budgets that push a client's total daily spend past the cap you set, full stop
  • Approval thresholds — budget increases above, say, 20% or $100/day route to sign-off with the diff attached; below it, they execute and log
  • Bulk-edit previews — "raise all JO prospecting budgets 20%" previews as the complete list: current → proposed per campaign, with the new client total computed
  • Currency awareness — caps and thresholds evaluate in the account's currency; multi-currency rosters don't get fooled by a number that looks small in the wrong unit

The result is delegation with a hard floor: the worst case of a misunderstood instruction is a paused structure or a refused edit — never runaway spend.

What Opera will not do

The guarantees that make delegation possible:

  • It will not launch a live campaign — created paused, always
  • It will not delete campaigns, ad sets or ads
  • It will not exceed budget caps you configure
  • It will not act outside a client's stored constraints
  • It will not skip the audit log — every action is recorded with what changed, when, and on whose instruction

Rolling it out

A sane first month
Start read-only — let Opera report on campaigns before it touches them
First launch in a sandbox market — one small geo, fully paused, reviewed against your checklist
Turn on edits with approvals — budget and copy changes, every one previewed and signed off
Loosen thresholds deliberately — keep approvals where spend risk is real, drop them where it isn't

Safe enough for production

Opera is built to touch production reports and live ad accounts without breaking anything:

  • No destructive writes. Updates are append-only by default — your existing data and formulas are never overwritten.
  • Preview before execution. You see exactly what Opera will change before a single cell is written.
  • Campaigns paused by default. New campaigns are created paused, with approvals required before any spend.
  • Full audit logs and client-level isolation. Every action is logged, and each client's data and rules stay separate.

See this running on your own reports.A 45-minute workflow audit maps your current process and shows exactly what Opera automates — step by step.

Frequently asked questions

Will Opera ever spend money without approval?
No. Campaigns are created paused and going live always requires explicit human approval. Budget increases above your thresholds also route through approval.
Which platforms does it support?
Meta Ads, Google Ads, TikTok Ads and Snapchat Ads — each built with its native structure (ad sets, ad groups, ad squads) rather than a flattened abstraction.
Can it edit existing campaigns we created manually?
Yes — budgets, targeting, ad copy and status, with a diff preview before anything changes and a full audit entry after.
How does it handle our naming conventions?
You define them once; Opera applies them identically across platforms. Consistent naming is also what keeps your prefix-scoped reporting clean.
Can Opera manage budgets across currencies?
Yes — caps and thresholds evaluate in each account's currency, and reporting converts under one stated FX policy, so a 20% raise means 20% everywhere.
What happens if an API call fails mid-launch?
Opera never leaves a half-launch silently: it reports exactly what was created and what wasn't, and the retry completes only the missing pieces.

See exactly what Opera would automate in your workflow.

A 45-minute teardown of how you report today: we map every step, mark what Opera automates, and send you the written spec — useful whether or not you buy.