Guide

How to deploy creatives across ad platforms without the manual upload grind

A practical, no-fluff guide for performance teams and agencies.

Creative wins or loses tests; deployment delays and corrupts them. The manual version — the same files uploaded into three ad managers, mapped by hand, copy pasted alongside — costs an afternoon per refresh and, worse, introduces the mismatches that make test readouts lie. This guide is the deployment workflow that protects both the afternoon and the test.

Naming is the routing system

Everything downstream parses from file names, so the convention is the spec: {MARKET}_{Concept}_{Ratio}_{Version}US_UGC_Hook3_9x16_v2.mp4, FR_Static_Offer_1x1_v1.png. Market routes to campaigns; concept routes to designated ad sets; ratio routes to placements; version keeps tests honest. If your current names wouldn't survive a regex, fix that before automating anything.

The pack, fully specified

A deployable pack is four things: the assets, the copy doc (primary text, headline, CTA per concept per language), the destination map (which concepts → which campaigns/ad sets/ad groups/ad squads, per market), and the state rule (paused by default; or inherit ad-set state for creative-only additions, if your team has decided that deliberately).

Validation before anything uploads

Wrong-spec uploads fail late and burn review cycles. Validate first, per destination platform: aspect ratio against the placement (9:16 to Reels/Stories/TikTok; 1:1 where square is required), duration and file size against the platform's limits, missing variants flagged (a concept with a 9:16 but no required 1:1), and language matched to market — the German asset must be structurally unable to ship to the French ad set.

The deployment, step by step

  1. Parse the pack — market/concept/ratio/version per file
  2. Resolve destinations from the map; expand to the full ad list
  3. Validate every asset against every destination's specs
  4. Pair copy: the designated variant per concept and language
  5. Preview: every ad about to exist — asset → ad set → copy → state — as one reviewable list
  6. Approve → create (paused) → per-ad results reported, including any platform rejections, verbatim
  7. Audit entry: what shipped, where, on whose approval

What this protects in your tests

Creative tests assume the only variable is the creative. Deployment errors violate that silently: copy B paired with video A, a concept missing from one platform, a market cross-contaminated. When routing and pairing are enforced by the same rules every refresh, week-over-week comparisons compare creatives — which is the entire point of refreshing them.

The per-deployment QA list

  • ✓ Every asset matched to its designated destinations (diff the preview against the destination map)
  • ✓ Specs validated per platform; missing variants resolved or consciously skipped
  • ✓ Copy variants matched to creative variants, per language
  • ✓ States verified paused; naming convention intact in the created ads
  • ✓ Rejections handled per ad — no silent partial deploys

When not to automate

Genuinely novel formats on a new placement deserve one hand-built deployment to learn the platform's edges — then codify. Automate the pattern, not the first contact.

How Opera runs it

This is creative deployment end to end: your convention parsed, destinations mapped once, validation and copy pairing built in, one preview, paused creation, full logs — and the use-case walkthrough shows it on a real refresh.

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

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

Our naming is inconsistent — automate anyway?
No: standardize the convention first (an hour of renaming), then automate. Routing built on guesswork just industrializes the mismatches.
Can deployed ads go live immediately instead of paused?
For creative-only additions to running ad sets, inheriting state is a defensible team decision — make it explicitly. New structures should always land paused.
How do platform spec changes get handled?
Validation rules are maintained against current platform requirements — which is precisely the maintenance you don't want to own in a homegrown script.

Watch Opera run a real workflow, end to end.

Three minutes: a plain-language request, a Sheet schema read, an AppsFlyer pull, a previewed append, a Slack summary — then a paused campaign launch.