UK drip pricing: put the delivery fee in the Black Friday video price

The CMA wants the total price, mandatory fees included, from early advertising on. Build one video price card that shows it. Read 2026-10-05.

4 min readSume
All posts

A UK sale video should show the total price a shopper must pay, including mandatory delivery charges, not a lower headline price with the fee revealed later. The CMA's price-transparency guidance (updated 7 January 2026) calls the opposite, drip pricing, illegal, and says price information is needed from early-stage advertising to the final sale.

What the CMA summary says (read 2026-10-05)

The points below are from the CMA's summary page, not the full guidance. The fines are in the same summary. This is a practical reading, not legal advice, and the full guidance has exceptions and examples.

CMA209 summary points on price information, read 2026-10-05
TopicWhat the summary says
Total priceProvide the total price up front, including mandatory fees
DeliveryMandatory delivery charges must be included in the invitation to purchase
Drip pricingIllegal
Where it appliesFrom early-stage advertising to the final sale
FinesUp to 10% of turnover or GBP 300,000, whichever is greater
Guidance updated7 January 2026

One card, two lines

The workflow is to keep the numbers in data and generate the card text, so the headline and the breakdown cannot disagree. Burn the delivered total first and the breakdown second.

Video captions takes cues with text, start and end, and burns them with no speech-to-text. A caption job is $0.20 for a clip up to 60 seconds. The sample uses the letters GBP rather than a currency symbol, to keep the sample independent of glyph support.

import json, os, urllib.request

def burn(video_url, cues, key):
    req = urllib.request.Request(
        "https://api.sume.com/v1/video-captions",
        json.dumps({"video_url": video_url, "cues": cues}).encode(),
        {"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
         "Content-Type": "application/json", "Idempotency-Key": key})
    return json.load(urllib.request.urlopen(req))

price, delivery = 38.00, 4.99
cues = [
    {"text": f"GBP {price + delivery:.2f} delivered", "start": 0.5, "end": 4.0},
    {"text": f"GBP {price:.2f} + GBP {delivery:.2f} delivery", "start": 4.0, "end": 7.0},
]
print(burn("https://example.com/scarf.mp4", cues, "uk-total-scarf-v1"))

Variants for free and paid delivery

If delivery is free above a basket threshold, that is a conditional, not a mandatory fee, and the CMA's page should be read for how to show it. A safe pattern is one clip per delivery case, each with its own total, rather than one clip with a footnote. Because a caption job costs $0.20, three delivery cases for one master clip cost $0.60, with the master rendered once.

Check the frame, not the script

After the burn, pull stills at the cue times with video frames (at[], up to 24 frames per call) and read the total in each one. The script says what you meant to show. The frame says what a shopper sees, including whether the delivered total appears before any other price in the clip. Do this for every delivery variant, because a stale cue from a previous variant is the usual way an old, lower figure ends up on screen.

Limits

Do not treat the example text as approved wording. The summary does not say how long a card must stay on screen or how large it must be. A card that flashes by too fast to read is a risk. Ask your own adviser, check the full CMA guidance, and review the final frame at the card time before you publish.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume