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.

4 min readSume
All posts

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.

FTC Made in USA rule page, read 2026-10-05
TopicWhat the page says
Unqualified claimRequires all or virtually all US-made
Where it appliesLabels and online marketing
Codified at16 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

All Use cases posts

Written by Sume