Case study · anonymizedMulti-market DTC e-commerce groupOutcome · one master, many markets

One product video in, a localized cut for every market out

A direct-to-consumer e-commerce group runs the same hero products across several regional storefronts. Each market needed the same product-video ad with localized, on-screen subtitles — without re-editing the master clip per region. They moved the localization step to the ZapCap API. Names are anonymized; identifying figures are ranged.

1 → many
One master clip, per-market cuts
No re-edit per region
days → hours
Localization turnaround
Per drop, across markets
0
Render workers maintained
No ffmpeg / GPU queue in-house
per-min
Usage-based billing
Cost attributed per storefront

01The bottleneck

The group sells the same catalogue through several regional storefronts, each with its own paid-social calendar. Every product launch shipped one master video ad — and then a designer manually re-cut subtitled variants for each market, by hand, in a video editor.

The master was the easy part. The localization was the bottleneck: every market's variant queued behind the same one or two editors, and a single product refresh could stall the whole paid-social calendar for days.

How localization worked before
  • ·Designer re-opened the master clip per market
  • ·Subtitles re-typed and re-styled by hand each time
  • ·Variants queued behind one or two editors
  • ·Burned-in text occasionally overran the 9:16 safe zone
What was needed to scale
  • ·One master clip, automated per-market subtitle variants
  • ·Consistent caption styling across every storefront
  • ·Burned-in MP4 plus transparent overlay for the design team
  • ·Per-storefront cost attribution for ad budgets
  • ·No editor as a single point of failure on launch day

02The ZapCap workflow

The localization step moved out of the editor and into their product-feed pipeline. When a master video lands, the pipeline fans out one ZapCap task per target market.

For each market the backend POSTs the master source URL to /videos, then creates a task per market with the selected language and a fixed brand templateId. ZapCap returns a taskId; the webhook handler verifies the x-signature, dedupes on eventId, and stores each market's renderUrl against the product record.

Burned-in .mp4 (h264) feeds the ad platforms directly. For markets where the design team wants to composite over a different background, the same task can request the transparent (prores4444 / vp9 alpha) output instead.

Fan-out render path
master videoPOST /videos/urlPOST /videos/:id/task · per marketwebhookattach renderUrl per storefront

03Technical implementation

The work landed as a fan-out step inside the existing product-feed pipeline rather than a new service. When a master uploads, the pipeline reads the storefront list and fires one task per market.

Failure handling. ZapCap is treated as a normal upstream: signed webhooks, eventId-based dedupe so retry storms never double-attach a render, and a per-market status column so a single failed market re-queues without touching the others.

What was actually built
  • Fan-out step in the product-feed pipeline — one ZapCap task per active storefront market.
  • One brand templateId (UUID from GET /templates) shared across markets for consistent caption styling.
  • Webhook handler · x-signature verified, eventId-deduped, renderUrl stored per market.
  • Dual output — burned-in .mp4 for ad platforms, transparent overlay on request for the design team.
  • Per-storefront cost tag on each task so per-minute usage maps back to a market budget.
  • Per-market retry — a single failed market re-queues independently of the rest of the fan-out.

04What changed

The editor stopped being the bottleneck. Localization became a pipeline step, not a person. A product refresh now fans out to every market the moment the master lands, instead of waiting in an edit queue.

Cost reporting got cleaner too. Per-minute usage is tagged per storefront, so each market budget sees its own localization spend instead of one shared design-team line item.

Before
  • ·Manual re-cut per market in a video editor
  • ·Variants queued behind one or two designers
  • ·A product refresh could stall paid social for days
  • ·Burned-in text sometimes clipped the safe zone
  • ·Localization spend buried in one design line item
After
  • Automated fan-out — one task per market
  • No editor as a single point of failure
  • Turnaround moved from days to hours per drop
  • Captions respect the 9:16 safe zone in every template
  • Per-minute usage attributed per storefront budget

05In their words

Every product launch used to mean a designer re-cutting the same video for every market. Now the master uploads once and each storefront gets its localized cut automatically. Localization stopped being a queue.

Head of growth
Multi-market DTC e-commerce group · anonymized
Anonymization note: name, logo, and product references withheld pending written customer permission. We'll attach the real attribution here once consent is confirmed. — ZapCap content team
API workflow

From master clip to localized cut in four calls

The same four-call shape runs once per target market. Upload (or pass a URL), create a task with the market language and brand template, receive the webhook, fetch the localized MP4. ZapCap handles transcription, styling, and rendering.

  1. 1

    Upload your video

    POST the file to /videos. We stream it to storage and hand you back a videoId.

    POSTPOST /videos
  2. 2

    Create the captioning task

    One POST starts transcription, styling and rendering with your chosen template. Add a notification webhook to skip polling.

    POSTPOST /videos/:id/task
  3. 3

    Receive the webhook

    We POST status updates to your endpoint as the render moves through transcribing → rendering → completed.

    HOOKPOST → your URL
  4. 4

    Download the finished render

    Burned-in subtitles, served from a global CDN. No watermark. MP4 ready for any social platform.

    GETGET renderUrl
Step 1 / 4·~2s
1import { readFileSync } from "node:fs";
2
3const form = new FormData();
4form.append(
5 "file",
6 new Blob([readFileSync("clip.mp4")]),
7 "clip.mp4",
8);
9
10const { id: videoId } = await fetch(
11 "https://api.zapcap.ai/videos",
12 {
13 method: "POST",
14 headers: { "x-api-key": process.env.ZAPCAP_KEY! },
15 body: form,
16 },
17).then(r => r.json());

POST /videos·Upload your video

Illustrative outcomes after moving localization to the API

1 → many
One master clip, a cut per market
days → hours
Localization turnaround per drop
0
Render workers maintained in-house
per-min
Usage attributed per storefront

Localization workflow questions

Each market is its own task against the same source video, with the target language set per task. ZapCap moves through pending → transcribing → transcriptionCompleted → rendering → completed for each, and the webhook reports per-market status.

Localize one master video into every market

Backend-only API, webhook-native, $0.10/min base usage-based billing. Fan out one product video into a localized, subtitled cut per storefront — without a render pipeline.