Runbook

Migrating a CTV ad server

Ad server migrations fail for organisational reasons far more often than technical ones — usually because nobody recorded what "better" would look like before starting. This is the sequence that avoids that.

The principle

There is never a moment where advertising stops serving. Every stage runs alongside the incumbent, and the previous path stays configured until well after cutover — so rollback is a routing change, not a re-integration.

Stage 1 — Record a baseline

Do this before anything else. A migration you cannot measure is a migration you cannot defend, and "it feels faster" does not survive a quarterly review.

What to capture

MetricWhy it matters
Fill rateThe share of avails that earned revenue. Segment it — blended fill hides the problem.
CPMPrice achieved. On its own it misleads: a higher CPM at lower fill can mean less money.
Revenue per thousand availsThe number that actually matters, because it captures price and fill together. This is the migration's headline metric.
Decision latencyMedian and 95th percentile. The tail is what viewers experience as a stall.
Timeout rateHow often the auction closes before bids return. Often the hidden cause of low fill.
Error and slate rateHow often a viewer sees nothing where an ad should be.
Discrepancy vs buyersYour counted impressions against theirs. Establish this now, or you will not know whether the migration changed it.

Segment every one of these by device platform, content type (live versus on-demand) and geography. Migrations that look neutral in aggregate frequently hide a large regression on one device.

Capture at least two full weeks

Streaming inventory is strongly seasonal by day of week, and a live sports fixture or a content launch can distort a short window. One week is not a baseline; it is an anecdote.

Stage 2 — Shadow test

A copy of live ad requests is sent to the new ad server. Its responses are recorded and discarded — nothing reaches a viewer. Zero risk, real traffic.

What you learn

  • Would it have filled? On the same requests the incumbent handled, with the same demand available.
  • How fast, on your traffic? Latency measured against your geography and device mix, not a vendor's benchmark.
  • Do the decisions look sane? Compare which demand source won, and at what price, request by request.
  • Does the integration hold under real shapes? Odd pod durations, malformed requests, live spikes — the things a test harness never generates.

This is also the cheapest way to evaluate a vendor before committing. If a prospective ad server will not shadow-test, ask why.

Stage 3 — Parallel run

A small share of real traffic — typically starting around five per cent — serves through the new ad server. The rest stays on the incumbent, giving you a live control group.

  • Split on a stable key, such as a hash of the session or device identifier, so a given viewer has a consistent experience rather than flipping between servers mid-session.
  • Hold the split long enough to cover a full weekly cycle before drawing conclusions.
  • Watch the viewer-experience metrics, not just revenue. A yield improvement that raises abandonment at the first break is not an improvement.
  • Keep one person accountable for calling it. Parallel runs drift for months when nobody owns the decision.

When to abort

Decide these thresholds before you start, not while looking at a dashboard:

  • Revenue per thousand avails down against control, outside normal variance, for more than a few days
  • 95th-percentile latency materially worse than baseline
  • Any rise in playback errors or slates
  • A new discrepancy with a buyer that cannot be explained
  • A regression isolated to one device platform, however good the aggregate looks

Stage 4 — Cut over

Ramp in stages — commonly 5, 25, 50, then 100 per cent — pausing at each step long enough for the numbers to settle.

  1. Move direct-sold demand first

    Campaigns with delivery commitments need watching most closely. Confirm pacing against contracted goals at every step.

  2. Then programmatic

    Re-establish each demand partner and confirm bid rates match what shadow testing predicted. Check your authorisation files list the new seller — buyers filter undeclared supply automatically.

  3. Then house and sponsorship inventory

    Usually last because it is lowest risk, but confirm sponsorship positions and separation rules transferred intact.

  4. Leave the old path configured

    For at least one full billing cycle. Reconciliation questions surface when invoices arrive, and being able to compare is worth more than a tidy configuration.

What usually goes wrong

PitfallAvoid it by
No usable baselineCapturing two weeks segmented by device before any change. The most common failure, and the least excusable.
Authorisation files not updatedAdding the new seller to ads.txt and app-ads.txt before ramping, not after fill disappoints.
Targeting rules silently droppedExporting every rule, cap and block from the incumbent and diffing it against the new configuration. Do not rebuild from memory.
Frequency caps resetAccepting that capping state rarely transfers between servers, and warning stakeholders that early exposure counts will look odd.
Comparing across different windowsOnly ever comparing against the concurrent control group, never against last month.
Live signalling assumed workingVerifying SCTE-35 markers arrive intact on the new path before blaming decisioning for unfilled live breaks.
Buyers not toldNotifying demand partners ahead of the ramp. A silent seller change looks like a supply-path anomaly and can get you filtered.

A realistic timeline

Integration work itself is short — days, for a standards-based path. The schedule is dominated by measurement windows you should not compress.

StageTypical duration
Baseline capture2 weeks (can run concurrently with integration work)
Integration and scopingDays for a standards-based path
Shadow test1–2 weeks
Parallel run2–4 weeks
Staged cutover1–2 weeks
Old path retained1 billing cycle after cutover
On "live in days"

A standards-based integration genuinely can be serving within days, and that claim is about the integration. A responsible migration — with a baseline, a shadow test and a controlled ramp — takes weeks, and the difference is measurement discipline rather than engineering effort. Any vendor promising a fully migrated platform in days is proposing you skip the evidence.

Next

Get started

Start with a shadow test.

We will mirror a slice of your live inventory and show you latency, fill and yield against your current setup — before you change anything.