FTC Made in USA claim in a holiday gift video: gate the caption text
An unqualified Made in USA claim needs all or virtually all US-made, FTC says, online too. Lint the cue text before you burn it. Read 2026-10-05.

If a gift video says "Made in USA" with no qualifier, the FTC's rule says the product must be "all or virtually all" made in the United States. The rule covers labels and online marketing, and it is codified at 16 CFR Part 323. A caption job will happily burn whatever text you send, so the check has to happen before the cue text reaches the API.
What the FTC page says (read 2026-10-05)
The rule page is short. It describes the standard and the scope. It is not a how-to for qualified claims such as "assembled in the USA", so for those, read the FTC's own guidance and ask counsel.
| Topic | What the page says |
|---|---|
| Unqualified claim | Requires all or virtually all US-made |
| Where it applies | Labels and online marketing |
| Codified at | 16 CFR Part 323 |
Gate the cue text
Origin claims often arrive in a gift guide by accident: a copywriter adds "Made in USA" to one product card because a similar product was. The fix is a lint step with an explicit approval flag per SKU, kept outside the creative tool.
The script below fails the build when a cue contains an origin claim for a SKU without sign-off. It only checks for a few phrases, so extend the pattern for your own markets and languages. When it passes, send the cues to video captions (cues with text, start, end), $0.20 per clip up to 60 seconds.
import re
CLAIM = re.compile(r"made in (the )?(usa|u\.s\.a?\.?|united states)|american[- ]made", re.I)
APPROVED = {"SKU-1001": True, "SKU-1002": False} # your legal sign-off
def check(sku, cues):
for c in cues:
if CLAIM.search(c["text"]) and not APPROVED.get(sku):
raise ValueError(f"{sku}: unapproved origin claim: {c['text']!r}")
check("SKU-1001", [{"text": "Made in USA", "start": 0, "end": 3}])
try:
check("SKU-1002", [{"text": "Made in USA", "start": 0, "end": 3}])
except ValueError as e:
print(e)Check what was actually burned
A lint step looks at the text you sent. It does not look at spoken audio or at text inside source footage. A voiceover that says "proudly American" bypasses the pattern. Review the transcript and a few frames of the finished clip for the same words, since a claim is a claim wherever it appears.
Where the gate sits in the pipeline
Put the lint at the point where cue text is generated, before any API call. Failing there costs nothing, while failing after the burn costs a caption job per clip and a review cycle. Keep one cue file per SKU in version control so a claim has an author and a date. When a SKU loses approval (a supplier changes), the next build fails by itself, and the clips already published are the ones to pull and re-burn.
If your gift guide covers many products, run the lint over all cue files in one pass and print every failure at once. Reviewers fix the whole batch together, and you avoid discovering a bad card on the fifteenth clip.
Limits
A regex is a safety net, not a legal opinion. It cannot decide whether a product meets the standard. That decision comes from your supply chain records, and the approval flag should come from whoever owns them.
Sources
Related posts
More in Use cases
- Furniture showroom reveal clip: 20 seconds on Seedance 2.5, priced
A 20-second one-take reveal of a sofa or table on Seedance 2.5: room-first framing, a slow push-in, the prompt, and what 480p, 720p and 1080p cost on Sume.
- Gaming montage music at 140 BPM: an electronic brief with a drop
Brief a 140 BPM electronic track for a gaming montage on Sume. A $0.125 Lyria 3.5 take, a drop at a timestamp, and a Timeline render at $0.10 a minute.
- GDPR and an employee's photo as an avatar: Recital 51 explained
Is an employee photo used for an AI avatar biometric data under GDPR? Recital 51 says photos are biometric only with specific technical means. Not legal advice.
- Gemini 3.8 Flash TTS supports 130+ languages: multilingual ad reads
Google lists 130+ languages for Gemini 3.8 Flash TTS and 100+ for Flash-Lite, with auto detection. How to use that for ad voiceover, and the Sume gap.
Written by Sume