Testimonial Lint: FTC Fake Review Rule

Flags fake, placeholder and AI-drafted testimonials, hard-coded star ratings, rating-filtered review lists, 5-star-for-a-discount offers and hover-only disclosures in landing-page code (16 CFR Part 465). Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Get the complete version $29

This page is the working piece. The full pack has everything below.

Fake, placeholder and AI-drafted testimonials in landing-page code, checked against 16 CFR Part 465 (up to $53,088 per violation)

A 15-year litigator bills $851/hour on DOJ's Fitzpatrick Matrix (billing year 2026).

Buy the full version — $29
Want the full version?
Enter your email and we send the download link.
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

Testimonial Lint: FTC Fake Review Rule

$53,088 per violation: that is the most the FTC can seek for each fake testimonial, and a US SaaS founder shipping an AI-drafted landing page can carry several of them in one component. I ran Testimonial Lint's 11 rules over a sample Testimonials.jsx, the kind an AI coding assistant writes when you ask for "a testimonials section": 13 findings, 8 errors and 5 warnings.

The rule behind the number is 16 CFR Part 465, the FTC's Rule on the Use of Consumer Reviews and Testimonials, published at 89 FR 68077 and in force since October 21, 2024. The ceiling is $53,088 per violation under FTC Act 5(m)(1)(A) and 16 CFR 1.98(d). There was no inflation bump for 2026 (OMB M-26-11), so the 2025 figure still applies. The rule counts a solo freelancer who sells services as a business, so agencies and indie hackers are inside it too.

What did the sample get wrong? Line 2 is a comment: "TODO: placeholder testimonials until we get real reviews". Placeholders have a way of shipping. Line 4 names the reviewer "Jane Doe" and pulls her face from randomuser.me. Section 465.2(a)(1) is about testimonials that misrepresent that the reviewer exists; a stock face with a made-up name is exactly that. Line 5 uses a pravatar.cc face and a quote that starts with "Lorem ipsum dolor sit amet".

Line 8 is the quiet one: reviews.filter((r) => r.rating >= 4). It looks like UI polish. Section 465.7(b) covers a business that implies the displayed reviews are most or all of the reviews while it hides the others based on their rating. Filtering on spam, abuse or off-topic text is fine because it applies to every review; filtering on stars is not.

Line 16 hard-codes a "Verified Buyer" badge that is not tied to any order. Line 17 puts "Marcus is an employee of Acme Labs" inside a title attribute, so it only appears on hover. Section 465.1(c)(4) says an online disclosure is not clear and conspicuous if the reader has to hover over an icon to see it, and 465.5(b)(1) wants staff testimonials disclosed. Line 20 says "Leave a 5-star review and get a gift card", which is the conditioned incentive 465.4 forbids. Line 22 types "ratingValue": "4.9" and "reviewCount": "2143" into JSON-LD.

Why not ask the chatbot to check its own work? It wrote Jane Doe in the first place. ESLint and Prettier see valid JSX. Neither knows which section of Part 465 a line touches. Testimonial Lint does one narrow job: it reads the source and names the line, the section and the fix.

The clean version of the same component loads reviews from a store, shows every rating, shows an "Order on file" badge only when an order ID exists and prints "Written by an Acme employee" as visible text. The same 11 rules give 0 findings on it.

Warnings are not verdicts. A pattern check cannot prove that a testimonial is fake; a warning means keep the proof: the signed original, the order record, the consent to use the name and photo.

The yardstick: a 15-year litigator bills $851/hour on DOJ's Fitzpatrick Matrix for billing year 2026. That hour goes further when it starts from a list of lines instead of a repository.

Every check is free on the open file in VS Code, or on code pasted into the web version. The licensed part is the workspace sweep and a Markdown evidence report for a lawyer or client. Run it on your testimonials component before the page ships.

15 seconds — what it actually does

Questions people ask

What does Testimonial Lint actually do?

Testimonial Lint reads landing-page source (HTML, JSX, TSX, Vue, Svelte, Astro, JSON, Markdown) and flags lines that break the FTC's consumer review rule, 16 CFR Part 465: placeholder reviewer names, stock-photo avatars, lorem-ipsum quotes, hard-coded star ratings, reviews filtered by rating, rewards for 5-star reviews and hover-only disclosures. Each finding shows the line, the section and the fix. It has 11 rules.

Who is Testimonial Lint for?

US SaaS founders, indie hackers and web agencies who ship marketing pages with a testimonials section, especially pages drafted by an AI coding assistant. If your Testimonials.jsx was generated with sample names, avatars from randomuser.me or a typed-in 4.9 rating, this is the person it was built for, before the page goes live to US customers.

Why not just ask a chatbot or use a normal linter?

A chatbot writes placeholder testimonials but does not flag them afterwards, and ESLint or Prettier only see valid code. Neither knows that 16 CFR 465.2 bans testimonials from reviewers who do not exist, that 465.7(b) covers hiding low ratings, or that 465.1(c)(4) says a hover tooltip is not a clear disclosure. The FTC can seek up to $53,088 per violation.

What is free and what does the $29 add?

Free, with no key: all 11 checks on the open file in VS Code, or on code pasted into the web page, with every finding, its 16 CFR 465 section and the fix. The $29 one-time licence adds the workspace sweep, which scans every file at once, and a Markdown evidence report with file, line, section and fix for a lawyer or client.

What would a person charge to review this?

A 15-year litigator bills $851/hour on DOJ's Fitzpatrick Matrix (billing year 2026), and a lawyer still has to find the lines in your code first. Testimonial Lint points at them: the sample Testimonials.jsx gave 13 findings, 8 errors and 5 warnings, each tied to a section of 16 CFR Part 465, so the review hour starts from a list.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Testimonial Lint: FTC Fake Review Rule checks the file you open against 11 rules from a rule set dated 2026-09-26, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.