Dev.to WebDev 🛠 Dev 👁 0 📖 3 min read

I built a paste-box that flags missing FTC disclosure lines — and won't call it legal review

I ship a small tool called EndorsePrecheck (EndorsePrecheck). You paste a sponsored, review, or affiliate post, and it returns a scored heuristic pre-check: is there a disclosure at all, is it clear rather than a vague "

I ship a small tool called EndorsePrecheck (EndorsePrecheck). You paste a sponsored, review, or affiliate post, and it returns a scored heuristic pre-check: is there a disclosure at all, is it clear rather than a vague "thanks brand", is it likely near the top of the post, and does the material connection read plainly. That is the whole surface area. I want to be precise about what it does and, just as much, what it does not.

Why a rule set and not a model

The first version used a generic text classifier. It failed in the ways that hurt most for this task. It would accept a buried "#sp" as a valid disclosure, and it would confidently report a disclosure that was not in the text. Those are the exact failure modes you cannot ship. Disclosure presence is a countable, definable thing — a string match against a short list of markers ("#ad", "sponsored", "paid partnership", "I was given"). Enumeration of markers is what a rule set handles well and what a language model handles poorly.

I tokenize the pasted text the same way each platform would split a caption — by whitespace and common emoji boundaries — so a marker buried after a wall of hashtags is scored by its real position, not by its character offset. That detail mattered: early builds counted "#ad" as "present" even when it sat three screens down behind a dozen decorative tags. The core check is deterministic. Where a model is used at all, it only turns the findings into plain English. It never decides pass or fail.

What the score actually measures

The report has four axes. Disclosure presence: did any marker appear? Clarity: is the wording explicit, or does it lean on slang a reader might not connect to payment? Fold placement: for short social copy, is the disclosure early enough that a reader sees it without expanding or clicking more? Material connection: does the copy state the relationship — free product, payment, affiliate link — rather than implying neutrality?

None of those is a legal conclusion. "Above the fold" is a heuristic for social copy, not a quoted rule. The score is a reason to look again, not a verdict. The EndorsePrecheck page frames the output exactly this way: a checklist to hand a reviewer, not a green light.

The parts I cannot close

There are gaps the tool cannot see. It does not know whether the disclosure renders on every platform variant — an Instagram story sticker versus a caption versus a link in bio. It cannot tell if a video discloses verbally while the caption stays silent. It has no idea whether the underlying claims are true; it only looks at the disclosure wrapper. And it is built around the US FTC Endorsement Guides, so other jurisdictions' rules are out of scope.

That is why the output is decision-support. If you need a binding read on whether a campaign complies, that is a question for counsel. The report is the artifact you bring so the conversation starts from specifics instead of a blank page.

FAQ

What does EndorsePrecheck scan for?
It checks disclosure presence, clarity of the label, placement near the top of the post, and whether the material connection is stated plainly.

Is the result a legal opinion?
No. It is a heuristic pre-check — decision-support, not legal advice. For a binding determination, talk to a lawyer who knows your jurisdiction.

Can it catch a buried disclosure in a long caption?
It flags when a marker appears far from the start of the text, which is a useful signal for social copy, but it cannot confirm how the platform actually renders the post.

Does it cover rules outside the US?
The heuristics follow the FTC Endorsement Guides. It does not model other countries' disclosure regimes.

📰 Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.