Amazon "up to 50% off" needs 10% of ASINs at 50%: a caption check
Amazon says an up-to claim needs 10% of products at the maximum discount. A short Python check counts the ASINs and burns the matching caption cue.

Amazon Ads says that when you advertise a range of discounts, at least 10% of the products must match the maximum discount stated: for "up to 50% off," at least 10% of ASINs should be at 50% (Amazon Ads guide, read 2026-10-05). For 40 ASINs that is 4 at full discount. Compute that number before you burn "Up to 50% off" into a video, and caption it with cues so the text is the claim you checked.
The minimum, by catalog size
The table applies the rule as stated, rounding up because you cannot discount a fraction of a product. It is an arithmetic check of your own plan, not Amazon's compliance test.
| ASINs in the promotion | At the max discount (min) | Below the max discount (max) |
|---|---|---|
| 15 | 2 | 13 |
| 40 | 4 | 36 |
| 250 | 25 | 225 |
| 333 | 34 | 299 |
| 1000 | 100 | 900 |
A check that also writes the cue
import math, os, requests
max_pct, asins_total, asins_at_max = 50, 40, 5
need = math.ceil(asins_total * 0.10)
assert asins_at_max >= need, f"need {need} ASINs at {max_pct}% off"
cues = [{"text": f"Up to {max_pct}% off", "start": 0.5, "end": 4.0}]
resp = requests.post(
"https://api.sume.com/v1/video-captions",
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Idempotency-Key": "amazon-upto-claim-001",
},
json={"video_url": os.environ["VIDEO_URL"], "cues": cues, "style": "slam"},
timeout=30,
)
print(need, resp.status_code, resp.text[:200])
What the script does and does not prove
The assertion only checks the count you give it. It does not read your Amazon listing, and it cannot tell whether the discounted ASINs are the ones in the video. Use it as a pre-flight on your own spreadsheet: total ASINs, how many are at the maximum discount, and the headline percentage you plan to show.
The cue is plain text with a start and end in seconds. The slam style is the Latin default, and a cue that holds only Latin text works with it. A claim like "Up to 50% off" is short enough to read in the 3.5 seconds the cue allows. If you also show a list of qualifying products, give each its own cue rather than packing them into one line.
Keep the page and the video in agreement
The same Amazon guide says savings claims must be identical across ads and landing pages, and that if an ad shows 10% off, the landing page must reference the percentage discount rather than just the final price. When prices move, the guide says dynamic pricing may require pausing and updating creatives to use qualified claims like "Save up to XX%".
A caption job is $0.20, so changing the claim is a $0.20 re-burn on the same source clip rather than a new render. Keep the source clip text-free and treat every claim as a caption pass, so a change in the promotion is one cue edit.
Sources
Related posts
More in Use cases
- Animal Shelter Adoption Appeal as an AI Avatar Video: Cost
A shelter adoption appeal using an avatar and a scene photo: scripted scenes, per-scene seconds, request shape and Sume cost on each quality tier.
- Animate a brand mascot still: which Sume models take a first frame
Almost every Sume video row takes a first frame, except H3 Max Recast and Genjutsu. Grok Imagine Video 1.5 is $0.0125 a second; Omni, Wan and Kling add more.
- Anki cards with AI images: collection.media and the img tag
Anki finds images by filename in collection.media, via an img tag, with Allow HTML on. Make one PNG per word with Sume and write a tab-separated import file.
- Annual compliance refresher as an avatar video: review and records
An avatar can deliver a 45-second compliance refresher. Legal approves the script; you keep the video id and transcript as a record of what was said.
Written by Sume