Creative deployment

Deploy creative across platforms from one upload

One creative pack in; every asset routed to its designated placements across Meta, TikTok, Google and Snapchat — validated, paired with the right copy, previewed before it ships.

Every creative refresh ends the same way: the same files uploaded into three or four ad managers, mapped by hand to the right ad sets, with copy pasted alongside — an afternoon of mechanical work standing between a finished creative and its first impression. Opera turns it into one deployment.

Anatomy of a creative pack

A pack is the assets plus the intent, and the intent usually lives in your file names:

Example pack
FilesUS_UGC_Hook3_9x16_v2.mp4 · US_UGC_Hook3_1x1_v2.mp4 · US_Static_Offer_1x1.png
Naming carriesmarket (JO), concept (UGC_Hook3), aspect ratio (9x16 / 1x1), version
Copy docprimary text, headline and CTA per concept, per language
Destinationsthe campaigns / ad sets / ad groups / ad squads each concept targets

Opera parses the convention you already use — it doesn't impose one.

Routing rules, applied every time

Tell Opera the mapping once and it holds:

  • By marketUS_ assets go only to the US market campaigns; FR_ only to France
  • By format — 9:16 video to Reels/Stories and TikTok placements; 1:1 where square is required
  • By concept — each hook lands in its designated ad sets, not sprayed across the account
  • By platform rules — Snapchat gets ad-squad routing; Google gets the asset shapes its formats need

"Deploy these videos to the designated ad sets and update the ad copy."

Validation before anything uploads

Wrong-format uploads fail late and waste review cycles, so validation runs first: aspect ratio against the destination placement, duration and file size against each platform's limits, missing variants flagged (a concept with a 9:16 but no 1:1 where one is required), and language matched to market — a German asset doesn't ship to a French ad set because two files were named carelessly.

Copy pairing in the same pass

Creative without copy is half a deployment. Opera attaches the primary text, headline and CTA you designated per concept and per language — so the ad that goes live is the complete ad, and copy variants stay matched to their creative variants for clean testing.

Preview, then ship

The deployment preview lists every ad about to be created: asset → destination ad set → copy variant → status (paused, unless you've configured otherwise for creative-only additions). You approve the list, Opera executes it, and the audit log keeps the receipt. If a platform rejects an asset, you get the exact rejection per ad — not a silent partial deploy.

What the deployment log answers later

Quarterly creative audits run on questions that are miserable to reconstruct by hand: which concepts shipped to which markets in March, which version of the hook was live during the CAC dip, whether the German variants ever reached the second ad set. The deployment log answers them as queries rather than archaeology — every ad's creation records the asset, version, destination, copy variant, language and approval, timestamped. Version lineage means a creative's performance history can be read across its v1→v3 life instead of as three unrelated ads. The practical effect shows up in creative strategy: when the record of what-ran-where is reliable, learnings compound across refreshes instead of resetting each time the person who remembered leaves. The log is also the honest answer to a client's "what exactly went live last month?" — a list, not a recollection. Paired with the reporting pipeline, the log becomes the join key between spend data and creative identity: the quarterly review can ask which concepts earned their budget and which merely spent it, per market and per language, without anyone rebuilding the mapping from screenshots and memory.

Localized copy at deployment time

Multi-market accounts pair every concept with language variants — French, German, English, often a dialect split on top. Opera treats language as a first-class routing dimension: the copy doc carries variants per concept per language, the destination map binds languages to markets, and validation blocks any cross-wiring — the German primary text cannot attach to the France ad set. For markets running multiple language audiences (a English-language and an German ad set in the same country), each ad set receives its own variant in one deployment, which is exactly the case manual uploads get wrong at 6pm.

Versioning: v2 in, v1 wound down

A refresh isn't only additions — it's succession. Opera's version-aware deployment can pair the new ads' creation with a planned wind-down of their predecessors: v2 created paused in the same ad sets, and once you flip them live, v1 ads paused on your instruction (previewed like everything else), never deleted. The account history stays intact for learning lookbacks, the test compares v2 against v1's real numbers, and nobody discovers in August that three Aprils of hooks are still quietly spending.

A refresh, end to end

The biweekly reality: 6 concepts × 2–3 ratios × 2 languages ≈ 30 assets, each needing the right destinations and the right copy on three platforms. Manually that's ~90 upload-map-paste cycles; with a pack it's one pass:

  1. Drop the pack — Opera parses market, concept, ratio, version from your names
  2. The destination map expands it to the full ad list: ~30 assets → ~70 ads across Meta ad sets, TikTok ad groups and Snap ad squads
  3. Validation runs — one Snap video flagged oversized, one concept missing its required 1:1 — before anything uploads
  4. You review one preview, approve, and the ads are created paused, copy attached, rejections (if a platform throws one anyway) reported per ad

Forty minutes, including the fix for the oversized video. The test goes live the same day the creative was finished — which is the entire point of refreshing creative.

Platform spec gotchas the validator carries

The boring knowledge that otherwise lives in one person's head:

  • Meta — placement-dependent ratios (9:16 for Reels/Stories, 1:1/4:5 for feed); primary text, headline and description as separate fields with their own limits
  • TikTok — 9:16 video-first; duration and file-size ceilings; text overlays that die in the safe-zone if the asset wasn't built for it
  • Snapchat — ad-squad routing; top-snap length limits; swipe-up assets vs story placements
  • Google — asset-based formats that want specific ratio sets, not single files

Specs drift as platforms update them — which is exactly why validation should be maintained software, not a wiki page. An asset that passes validation uploads cleanly; one that can't is flagged with the reason while the editor still has the project open.

The QA checklist Opera runs so you don't have to

Per-deployment checks
Right destination — every asset matched to its designated campaign/ad set/ad group/ad squad
Format valid — aspect ratio, duration and size pass the destination's requirements
Copy matched — the designated text variant attached, in the right language for the market
State correct — new ads paused (or your configured state), nothing live by accident
Naming consistent — ad names follow your convention so reporting stays prefix-clean

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

Which platforms can it deploy to?
Meta Ads, TikTok Ads, Google Ads and Snapchat Ads — including platform-specific structures like Snapchat ad squads.
Does it set ad copy too?
Yes — primary text, headlines and CTAs are paired per concept and language in the same deployment, so creative and copy variants stay matched.
What if an asset is the wrong format for a placement?
Validation catches it before upload: aspect ratio, duration and size are checked against the destination, and missing variants are flagged.
Can I review everything before it goes live?
Yes — the preview lists every ad to be created with its destination and copy. Nothing ships until you approve, and everything is logged.
How are language variants kept straight?
Language is a routing dimension: variants are bound per concept and per language, markets declare their languages in the destination map, and the validator blocks cross-wiring.
Do deployed ads start running immediately?
By default new ads are created paused, like everything Opera creates. You can configure creative-only additions to inherit the ad set's state if your team prefers.

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.