Black Friday teaser video for a Shopify store: a batch plan

Shopify's BFCM checklist says to send warm-up emails with hints and teasers. Make one teaser per product from a sheet with a Sume Format bulk run.

4 min readSume
All posts

A Black Friday teaser is a short video that hints at the offer without stating it, and one product row in a sheet can become one teaser. Sume's Format bulk runs queue up to 100 such runs at once, each item shaped like a single run, so a whole catalog's warm-up clips go out as one request.

The timing comes from Shopify's BFCM checklist, read 2026-09-30: it tells merchants to "Send 'warm-up' emails with hints and teasers" and to start teasing the offer early. The build steps come from Sume's Bulk runs docs.

What should a teaser say and not say?

Shopify's wording is hints and teasers, so the clip names the product and the date, and leaves the price and discount out. That is also a good fit for a batch: no price field means no per-row price to get wrong. Put the rule in the instruction of every item, for example "no price, no discount percentage, end on the sale date".

For the later phase, when the sale is live and the clip needs days-left cues, use the burned-in countdown approach instead.

How does a sheet become a batch?

The Format cookbook has a sheet-driven recipe where each item carries a row key and a product URL, as in "input": { "sheet_no": 45, "product_url": "…" }. Skip rows with no finished copy on your side; the docs say there is no empty item.

{
  "concurrency": 2,
  "items": [
    {
      "instruction": "9:16 teaser, no price, end on the sale date",
      "input": { "sheet_no": 45, "product_url": "https://shop.example.com/p/45" },
      "generation_spend_cap_usd": 20
    },
    {
      "instruction": "9:16 teaser, no price, end on the sale date",
      "input": { "sheet_no": 46, "product_url": "https://shop.example.com/p/46" },
      "generation_spend_cap_usd": 20
    }
  ]
}

How do I send it safely?

POST the body to /v1/formats/{handle}/{slug}/bulk-runs with a key that has formats:write, and set an Idempotency-Key such as teaser-2026-bfcm-v1 so a retry does not enqueue twice. The response is a queue id; poll GET /v1/format-run-queues/{queue_id} and keep your own map of sheet row to items[i].index.

Bulk-run facts from the Sume docs, read 2026-09-30.
ItemRule in the docs
Queue sizeUp to 100 items per request
concurrencyInteger 1 to 16, otherwise 400 invalid_request
Each itemThe body of a single Format run
Retry safetyIdempotency-Key header; a different payload under the same key is 409 idempotency_conflict
CancelPer child run; there is no cancel-queue endpoint

What do I check before the emails go out?

Open each finished child at GET /v1/format-runs/{run_id}, watch every teaser once, and confirm none shows a price. Re-run only the failed rows with a new key. Details on caps are in the spend cap post.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume