Turn Customer Reviews Into a Marketing Machine — Automatically
The sentence Nina almost rewrote Nina owns a two-person appliance-repair company. Her website said the same things as every competitor: reliable service, experienced technicians, customer satisfaction. Then a customer left a review that said, “He put shoe covers on before I even asked.” That one ordinary sentence explained Nina’s business better than the entire homepage. It was specific, believable, and important to the kinds of homeowners she wanted to serve.
Nina copied the sentence into an advertising draft. When she asked an AI tool to make it more persuasive, the result became “Our technicians always treat every home with exceptional care.” It sounded polished, but it was no longer the customer’s quote. It also turned one person’s observation into a universal claim. The marketing became less trustworthy at the exact moment it became more professional-looking.
This project gives Nina a better machine. It preserves the source review, assigns it an ID, separates verbatim excerpts from business-authored context, records whether a quote was shortened, and stops at a human approval ledger. The system helps her notice and reuse the sentence. It never gets permission on her behalf, decides that a claim is legally safe, or publishes anything.
The big idea Treat every marketing asset as a traceable transformation of a real source review: preserve the original, record each change, separate quotation from commentary, and require a human to approve the context before publication.
What you will own
The result is not a folder of anonymous AI copy. It is a small evidence-backed content workshop:
brand-voice.mdcontains your business’s durable writing choices;reviews-source/holds untouched exports or manually collected source files;reviews.mdcontains normalized working records with stable IDs and redacted private details;themes.mdshows patterns without changing what any customer said;assets/contains platform-shaped drafts, each linked to one or more review IDs;approval-ledger.mdrecords source verification, quote status, permission needs, substantiation, privacy review, decision, editor, and date;CONTENT-ENGINE.mdmakes the workflow repeatable without granting publishing access.
You will be able to take any sentence in an asset and answer four questions: Which source record supports it? Is it a verbatim quote, a disclosed excerpt, a faithful paraphrase, or the business’s own statement? Do we have the permission and disclosure we need for this use? Which human approved this specific context?
Think of it like this - A museum conservation table A conservator does not repaint an old letter until it says something more dramatic. The original stays protected. A working copy can be cleaned, catalogued, excerpted, and placed beside an explanation, but every treatment is recorded and the label never pretends to be part of the original artifact.
Your source review is the protected letter. The normalized record is the catalog card. A quote is a displayed excerpt. A paraphrase is the curator’s label and must not wear quotation marks. The review ID is the accession number that lets anyone return to the source. The approval ledger records who checked the display before the public saw it. Keep this conservation-table picture in mind whenever “improve this quote” sounds tempting.
The project map
| Stage | Input | Transformation | Proof |
|---|---|---|---|
| Preserve | An authorized export, email, form response, or manual copy | Store an untouched source file | Source hash, filename, collection date, and platform/context note exist |
| Normalize | One real review | Assign stable ID, map fields, redact unnecessary private data | Working record points back to its source; verbatim text still matches |
| Understand | Many normalized records | Group recurring themes without changing source text | Every theme lists the IDs that support it |
| Draft | Theme, selected review IDs, and brand voice | Create platform-shaped context around quotes or faithful paraphrases | Every asset carries IDs and a clear quote/paraphrase/business-copy label |
| Review | Draft plus original record and permission context | Human checks accuracy, substantiation, privacy, attribution, disclosure, and fit | Approval ledger says approve, revise, reject, or permission needed |
| Publish | Only a specifically approved version | Human copies it into the chosen destination | Publishing happens outside this project; the pipeline has no account token or posting tool |
In plain English - Review, testimonial, and substantiation A consumer review is an evaluation submitted to a site or platform that displays reviews. When a business selects that review and features it in its own advertising, it is being used as a testimonial. That context matters. Substantiation means the business has a reasonable basis for objective claims its marketing communicates. A real customer’s sentence is evidence that the customer said it; it does not automatically prove a universal product claim.
In plain English - Verbatim, excerpt, paraphrase, and business copy Verbatim means the exact source words. An excerpt removes words without changing meaning and should be disclosed when the presentation could imply it is complete. A paraphrase restates meaning in new words and must not be put in quotation marks or attributed as if the customer wrote it. Business copy is your own marketing claim; it needs its own support. The pipeline records these types instead of blending them.
Three translations worth practicing
Replace “make the review punchier” with a traceable request You mean: “Find the strongest part without putting new words in the customer’s mouth.”
Tell Claude:
Preserve the complete review as the source record. Suggest one verbatim excerpt of at most 18 words and show every omitted span. Then write separate business-authored context outside quotation marks. Cite the review ID beside both. Do not improve, merge, or invent customer wording.You should get: a short usable excerpt plus clearly separate context, with enough evidence to decide whether the edit preserves the original meaning.
Turn “use all my good reviews” into a permission-aware plan You mean: “Help me find useful evidence without assuming public visibility equals permission for every advertising use.”
Tell Claude:
Create a candidate table before drafting. For each review record, show source, proposed use, attribution, quote status, whether an incentive or material connection is known, and permission status: documented, not needed under our policy, needed, or unknown. Do not draft from any row marked needed or unknown.You should get: a smaller eligible set and a visible list of questions for the business owner, not silent assumptions made by the model.
Ask for an evidence audit instead of “does this look legal?” You mean: “Show me exactly what I need to verify; do not act like my lawyer.”
Tell Claude:
For each asset, split every sentence into quoted customer wording, faithful paraphrase, and business-authored claim. Link each to its source review ID, flag objective claims needing independent substantiation, flag material connections or atypical results needing disclosure review, and mark unresolved items BLOCKED. Do not give a legal conclusion and do not publish.You should get: an actionable review ledger. Legal and policy questions stay visible for a qualified human instead of disappearing behind a green AI-generated answer.
What you’ll build
By the end of this lesson you’ll have something most businesses are sitting on and never use: a pile of real customer praise, turned into a month of ready-to-post marketing. You’ll drop your reviews and testimonials into one folder — pasted, or exported as a CSV from Google, Yelp, Trustpilot, Shopify, or your inbox — and Claude Code will read them, group them by theme (fast shipping, great support, the thing you didn’t know people loved), and hand you a stack of finished assets: short social posts sized for LinkedIn, Instagram, X, and Facebook; testimonial blurbs and a “wall of love” section for your website; punchy ad-copy headlines; a few email snippets; and captions for quote-graphics. Each one on-brand, each one grouped so you can see your strengths at a glance, and each one drawn from real customer words — never invented.
Here’s the thing this fixes. Your happiest customers may have described your value more specifically than your current marketing does, but their words are trapped in source records you rarely revisit. “The driver texted me a photo when he left the package on the porch — who does that anymore?” might support a social post, headline, or homepage quote when the context, permission, disclosure, and claim are appropriate. This pipeline makes that evidence easier to find and review without adding a separate content SaaS service.
You’ll build it with Claude Code: you won’t write an app, wire up a separate API, or buy another marketing SaaS tool. The working files stay in a dedicated folder, while the text Claude reads is processed under the data terms and privacy settings of the Claude account or organization you use. Local files do not make a model interaction local-only. Review those settings before supplying customer text, minimize personal data, and do not process material your organization is not allowed to send. The central ethic is unchanged: nothing gets published until you inspect the source, approve the exact context, and press the button yourself. Claude organizes and drafts; you verify and decide.
This lesson is the outbound cousin of two others. If you also need to reply to reviews, that’s uc198 (any business) and uc213 (short-term rentals). Those answer reviews. This one mines them for marketing. Different door, same respect for the customer’s real words.
Before you start
This is a software-only build with no additional service beyond your existing Claude Code access. You do not need another API key, marketing subscription, or hardware. The artifacts live locally, but prompts and selected file contents are sent through Claude Code according to your account type and privacy controls. Check three things:
- Claude Code, running. In a terminal, typing
claudeopens the console (/exitleaves it):claude
If that opens, you’re ready. Everything in this lesson happens inside thatWelcome to Claude Code /help for help, /exit to quit >>prompt. - Your reviews, collected through an authorized path. You don’t need them tidied first; Step 2 handles messy input. They might come from an export your current platform agreement permits, feedback submitted directly to your business, email you are allowed to use, or careful manual collection. Verify the source’s current rules rather than assuming a download button grants every later advertising use. A few authorized examples are enough for the practice run.
- Your authority and privacy settings. Confirm that you are authorized to use the source records for this purpose and review the current Claude Code data-usage documentation. Consumer and commercial account policies can differ, and local Claude Code transcripts may also be cached on the machine. If the review contains information your policy does not allow you to send, redact it before the session or do not use it here.
Accounts & costs
None beyond Claude. No separate metered API or publishing subscription is introduced by this project. Your existing Claude plan may have its own price and limits. Source and generated artifacts live in local files, but selected content is processed by Claude as described above. Nothing is posted to a social account, website, or ad platform until you copy a specifically approved asset and publish it yourself.
Keep it safe - Authenticity is the whole game Read this before Step 1. In the United States, the FTC’s Consumer Reviews and Testimonials Rule has been effective since October 21, 2024, and the FTC says knowing violations can lead to civil penalties. The FTC also explains that when a business features a consumer review in advertising or marketing, it is using that material as a testimonial. Rules in other locations and platform terms may also apply. This project is an evidence workflow, not legal advice; get qualified guidance for your situation. The pipeline is built around every one of these:
- Never fabricate, invent, or materially alter a review. Do not write a testimonial no customer gave you, do not change a customer’s words to say something they didn’t mean, and never change a rating. The FTC’s rules on endorsements and testimonials make fake reviews a real legal liability — this build’s #1 job is to only ever repurpose words a real customer actually wrote. A tighter edit for length is fine; putting new claims in their mouth is not.
- Resolve permission and attribution for the proposed use. Public visibility does not by itself settle every later advertising use of a name, photo, or full quote. Do not assume that initials or “verified customer” automatically resolve the issue. Use your documented policy, agreement, consent, and qualified guidance; otherwise mark the asset blocked.
- Disclose if you edited a quote. If you trim a testimonial for length, mark it — “[edited for length]” or an ellipsis — so you’re never presenting altered words as verbatim.
- Respect source rights and platform terms. Prefer an authorized first-party export, a customer communication you are permitted to use, or careful manual collection under your current agreement. Do not assume every platform offers the same export rights, and do not build a scraper in this project. Public visibility does not answer every copyright, privacy, attribution, permission, or platform-policy question.
- Protect reviewer PII. Reviews sometimes contain order numbers, emails, phone numbers, or a full name a customer didn’t mean to broadcast. Strip anything private before a word goes into an asset.
- A human approves every asset. Claude drafts; you read each one as the public will, check it against the real review, and publish it yourself. The machine never touches “post.”
Read the current FTC business Q&A for the Consumer Reviews and Testimonials Rule and the FTC Endorsement Guides Q&A before using this workflow commercially. A real review does not excuse an ad that distorts the customer’s experience, implies an unsupported result, or hides a material connection.
The walkthrough
Step 1 — Make a home for it and teach Claude your brand voice
Two customers can say the exact same thing, and the post that quotes them should still sound like your business — not a generic “We’re thrilled our customers love us!” So before any content, spend ten minutes teaching Claude your voice. Give the project a folder and let Claude interview you.
mkdir -p ~/reviews-marketing/reviews-source ~/reviews-marketing/assets
cd ~/reviews-marketing
git init
printf "reviews-source/\nreviews.md\nassets/\napproval-ledger.md\n" > .gitignore
claude
The ignored files may contain customer text or derived marketing drafts. brand-voice.md,
CONTENT-ENGINE.md, templates, and tests can be versioned after you inspect them, but do
not assume a private Git repository is an appropriate customer-data store. Follow your
organization’s retention and access policy. Ask Claude to show the planned files and
git status --short before it reads any review.
Paste this into Claude Code:
I run a business and I want you to help me turn my customer reviews into marketing
content — social posts, website blurbs, ad headlines, email snippets, quote captions.
But first I need to teach you my brand voice. Interview me with short questions, one at
a time, then write a file called brand-voice.md that captures:
- my business name, what I do in one line, and my city/timezone,
- three or four adjectives for my tone (e.g. warm, direct, a little playful),
- 3-5 words or phrases I OFTEN use and want to keep,
- words/phrases I'd NEVER use (corporate-speak, hype words like "game-changer", emoji
rules, how I feel about exclamation points),
- how I refer to my customers (customers? clients? neighbors? "folks"?),
- my rule on hashtags and emoji per platform,
- the ONE thing I most want people to feel about my business.
Ask me the questions now — don't write the file until we're done.
Answer honestly and briefly. When Claude writes brand-voice.md, open it and read it
aloud. This file shapes every later asset; improve one durable rule here and subsequent
drafts inherit the approved change.
Expected result — Claude interviews you, then confirms the file:
Got it. A few quick questions first:
1. What's the business name, and what do you do in one line?
> Northwind Coffee Roasters — we roast small-batch coffee and ship it fresh.
2. Give me three or four words for how you want to sound.
> Warm, honest, a little nerdy about coffee. Never salesy.
...(a few more questions)...
Written brand-voice.md (19 lines). Captures your tone (warm, honest, nerdy-in-a-good-way),
your customer word ("folks"), your never-list (no "game-changer", no "🔥", one exclamation
point max), your hashtag rule (2-3 lowercase, coffee-specific), and the feeling you want:
"these people actually care what's in the bag."
Read brand-voice.md top to bottom. The tone rules and never-list should be concrete
enough that you would sign your name to them. If the file sounds generic, correct the
specific miss: I'd never say "customers love us". I say "folks keep coming back," and I name the actual thing they valued. Rewrite the tone rules with observable examples.
This is ordinary iteration, so make the correction here rather than stopping the whole
build later for every generic asset.
Step 2 — Ingest your reviews (pasted or exported CSV)
Now feed the machine. The goal of this step is one clean, normalized file — reviews.md — no matter how messy the input. Claude handles three cases: reviews you paste, a CSV you exported, and a mix. It also does the safety housekeeping: stripping PII and flagging anything it can’t verify.
First place an authorized export or a plain-text copy in reviews-source/. Do not edit
that source file during the project. Record its filename, collection date, source context,
and SHA-256 hash in source-register.md. On macOS/Linux, Claude can calculate the hash
with shasum -a 256; on many Linux systems sha256sum is also available. On PowerShell,
use Get-FileHash -Algorithm SHA256. The hash is not proof that a review is true or that
you have permission; it proves which exact source file the later audit used.
If you have a CSV export, drop it in the folder first (from your file manager, or ask Claude for the copy command), then run:
I'm going to give you customer-review source files that I am authorized to process.
Read only the named file inside reviews-source/. Do not edit it. Confirm its SHA-256
matches source-register.md, then normalize the records into one working file,
reviews.md, with one review per block in this exact shape:
ID: R001
Source file: <filename>
Source record: <row number or other locator>
Source: Google | Yelp | Trustpilot | Shopify | Email | Pasted
Rating: <stars if known, else blank>
Date: <if known>
Display label: <a minimized internal label, not publication permission>
Text: "<the review, VERBATIM — do not rewrite, embellish, or change the rating>"
Rules while you do this:
- Use ONLY the words the customer actually wrote. Never invent a review or add a claim.
- Strip unnecessary personal data from the working copy: no emails, phone numbers, order
numbers, full last names, street addresses, or account handles. Use a minimized internal
display label, while keeping public-attribution permission as a separate unknown field.
- If a review is unusable (spam, off-topic, a complaint) put it in a separate section
"Not for marketing" with a one-line reason — don't silently drop it.
- If I paste a CSV path, read it and tell me which columns you mapped to what.
- Keep the untouched source separate. Never write redactions back into reviews-source/.
Here's the first authorized source filename:
[write: reviews-source/reviews-export.csv or another exact filename]
Claude reads whatever you give it and builds reviews.md. If you handed it a CSV, it’ll tell you how it mapped the columns (“review_body → Text, reviewer_name → Name, truncated to first name + initial”). Skim the result — this normalized file is the fuel for everything else, and getting the verbatim text right here is what keeps the whole pipeline honest.
Expected result — a clean, normalized review file with a safety section:
Written reviews.md — 23 reviews normalized (14 Google, 6 Shopify export, 3 pasted).
Sample:
ID: R001
Source: Google
Rating: ★★★★★
Date: 2026-06-18
Name: Marcus T.
Text: "The driver texted me a photo when he left the package on the porch — who
does that anymore? Coffee was still warm-roasted-fresh. I'm a customer for life."
CSV mapping: reviewer_name → Name (shortened), star_rating → Rating, review_text → Text,
created_at → Date. Skipped 2 columns (email, order_id) as PII.
Moved to "Not for marketing" (2): one 2-star shipping complaint (negative — better handled
as a reply, see a review-response workflow), one that named a competitor.
Nothing invented — every line above is verbatim from your input.
Checkpoint - Is the evidence chain intact? Recalculate the source hash and compare it with
source-register.md. Then spot-check three working records using their source filename and row/record locator. Confirm the review text and rating match, unnecessary private data is absent from the working copy, and the untouched source did not change.If all checks pass, normalization preserved the evidence chain. This does not by itself decide permission, disclosure, typicality, or whether later advertising claims are substantiated. If wording, rating, record locator, or hash differs, stop all asset generation, preserve both files, rebuild
reviews.mdfrom the registered source, and rerun the spot check. Do not repair a source mismatch by editing the source to match the generated working copy.
Step 3 — Cluster the reviews by theme
A pile of 23 reviews is noise. The same 23 sorted into “people love the freshness,” “people love the personal touch,” “people love that we ship fast” is a content strategy — it shows you which strengths to lead with and gives every future asset a clear angle. Let Claude do the sorting.
Read reviews.md. Group the reviews into 4-7 THEMES based on what customers actually
praise (e.g. freshness, personal service, fast shipping, value, the unboxing). For each
theme write:
- a short theme name and a one-line description,
- which review IDs belong to it,
- the single strongest verbatim quote for that theme (with its ID),
- a count.
Write this to themes.md, sorted by how many reviews support each theme (strongest first).
Do not force a review into a theme it doesn't fit; a "misc/one-off" bucket is fine.
Then tell me in one paragraph: what are my customers telling me my top 2 strengths are?
Expected result — a themed map plus a plain-English read on your strengths:
Written themes.md — 6 themes across 21 marketable reviews:
1. Freshness / roasted-to-order (8 reviews) — R001, R004, R009...
Strongest: "still warm-roasted-fresh" — Marcus T. (R001)
2. Personal touch / they actually care (6) — R002, R007...
Strongest: "the handwritten note in the box got me" — Priya S. (R007)
3. Fast, careful shipping (4) — R001, R012...
4. Great value for specialty coffee (2) — R015, R018...
5. Beautiful unboxing (1) — R020
6. Misc / one-off (0)
Your top 2 strengths, per your own customers: freshness (roasted-to-order keeps coming up)
and the personal touch (the notes, the porch photo). Lead your marketing with those two —
they're what people bring up unprompted, which is the strongest kind of proof.
Notice what just happened: your customers told you your positioning. You don’t have to guess what to emphasize — the themes, sorted by count, are the answer. Freshness and the personal touch lead because real people keep saying so.
Read themes.md and inspect the IDs behind one expected theme and one surprising theme.
If the grouping seems weak, ask Claude to show all supporting records and revise the
cluster rather than trusting a persuasive summary. A surprising theme may be useful, but
frequency alone does not prove it is representative of all customers or appropriate for
an advertising claim.
Step 4 — Generate social posts for every platform
Now the first payoff. Each platform has its own rhythm — LinkedIn is a story, Instagram is a caption, X is tight, Facebook is conversational — so you don’t want the same post pasted four times. Ask Claude for platform-shaped posts, each anchored to a real quote and a theme.
Read brand-voice.md, themes.md, and reviews.md. Draft social posts that repurpose real
reviews into marketing, in MY voice. For the "freshness" and "personal touch" themes,
give me for EACH platform:
- LinkedIn: a 3-5 line post — a short story or observation ending in the customer quote,
professional but warm, no hashtags-as-spam (1-2 max).
- Instagram: a caption (2-4 lines) + 3-5 lowercase hashtags per my rule + a line for
what image to pair it with.
- X: one tight post under 280 characters built around the quote.
- Facebook: a conversational post that invites a comment.
Rules:
- Every post must quote or faithfully paraphrase a REAL review. Cite the review ID and
label the relevant text VERBATIM QUOTE, DISCLOSED EXCERPT, FAITHFUL PARAPHRASE, or
BUSINESS COPY. Only the first two may use quotation marks.
- Do not assume first name + last initial or "verified customer" is permitted. Use the
attribution approved in the candidate table; otherwise mark NEEDS PERMISSION.
- Follow my brand voice and per-platform emoji/hashtag rules exactly.
Give them to me grouped by platform, copy-ready.
Expected result — a platform-shaped set, each tied to a verifiable review:
=== LinkedIn (theme: personal touch) ===
Small thing that stuck with me this week. A customer wrote:
"The driver texted me a photo when he left the package on the porch — who does that
anymore?"
We do, apparently. Not because it scales — because a bag of coffee showing up should
feel like a friend dropped it off. That's the whole business, honestly.
[source: R001 — verbatim quote, attribute "Marcus T." or "a verified customer"]
=== Instagram (theme: freshness) ===
"Still warm-roasted-fresh." — that's how a customer described the bag that landed on
their porch. We roast to order so it gets to you days, not months, off the roaster. ☕
#specialtycoffee #freshroast #smallbatch
Pair with: a photo of beans coming out of the roaster / a fresh-sealed bag.
[source: R001 — quote fragment verbatim]
=== X (theme: personal touch) ===
A customer: "the handwritten note in the box got me." We put one in every order. Costs
us 30 seconds. Means more than any ad we could run.
[source: R007 — verbatim; 129 chars]
=== Facebook (theme: freshness) ===
We got a review this week that made our whole roast day: "roasted-to-order and you can
taste it." What's the freshest cup you've had from us — and what were you brewing it in?
[source: R004 — quote verbatim]
See how each post is shaped for its platform but all trace back to a real review ID? That citation-in-a-comment is your audit trail — before anything posts, you can open reviews.md, find R001, and confirm the words are real. That’s the habit that keeps this legal.
🧭 Checkpoint — Can you trace every post back to a real review? Pick any two posts and find their cited review ID in
reviews.md.
- If the quote in the post matches the review → the pipeline is honest end-to-end. Post with confidence (after Step 8’s approval). If a post has a quote you can’t find, or a claim the review doesn’t support → that’s a fabrication risk. Tell Claude:
every post must cite a real review ID and use only words from that review — regenerate any post you can't source, and never add claims the customer didn't make.
Step 5 — Build website testimonial blurbs and a “wall of love”
Social posts are fleeting; your website is where testimonials do long-term work. Two assets here: short, punchy blurbs for scattering across product and landing pages, and a “wall of love” — a single section that stacks your best quotes into social proof a visitor can skim in five seconds.
Read reviews.md, themes.md, and brand-voice.md. Produce two things for my website:
1. testimonial-blurbs.md — 8-10 short testimonial blurbs (1-2 sentences each), each a
real review trimmed to its punchiest true line, with attribution (first name + last
initial) and the source. If you trim a quote, mark it "[edited for length]" so I'm
never presenting altered words as verbatim. Group them by theme.
2. wall-of-love.html — a clean, self-contained "wall of love" section: a heading, then
my best 6-8 quotes as cards in a responsive grid, each with the quote, the attribution,
and the star rating if known. Plain HTML + inline CSS, no external libraries, so I can
paste it straight into my site. Neutral styling I can restyle to my brand.
Rules: verbatim quotes (disclose any excerpt), only attribution approved for this use,
never invent a testimonial or rating, and mark unresolved permission BLOCKED. Cite the
review ID next to each blurb so I can verify.
Expected result — copy-ready blurbs and a drop-in web section:
Written testimonial-blurbs.md — 9 blurbs, grouped by theme. Sample:
FRESHNESS
- "Roasted-to-order and you can taste it." — Dana L. (R004, ★★★★★)
- "Still warm-roasted-fresh... I'm a customer for life." — Marcus T. (R001, [edited for
length], ★★★★★)
PERSONAL TOUCH
- "The handwritten note in the box got me." — Priya S. (R007, ★★★★★)
Written wall-of-love.html — a <section> with an accessible heading and 8 quote cards in a
CSS grid (2 columns desktop, 1 mobile), stars rendered as ★, attribution under each quote.
No external CSS/JS. Preview it by opening the file in a browser; restyle the colors to match
your site or ask me to.
Every quote traces to a review ID above; the two I trimmed are marked [edited for length].
Notice the [edited for length] tag on the trimmed quote. That small honesty — never presenting a shortened quote as the whole verbatim thing — is exactly what keeps a testimonial a testimonial. Open wall-of-love.html in your browser to see the section before it ever touches your live site.
Open wall-of-love.html locally and cross-check two cards against reviews.md. Fix layout
problems as ordinary preview work. If a card includes an attribution, image, or use whose
permission is unresolved, mark that asset BLOCKED — PERMISSION in the ledger; shortening
a name is not a substitute for determining whether the proposed use is allowed.
Step 6 — Draft ad-copy headlines and email snippets
Reviews are a goldmine for the two hardest things to write from scratch: ad headlines and email openers. Your customers already phrased the benefit better than a copywriter would — because they lived it. Pull both from the themes.
Read themes.md, reviews.md, and brand-voice.md. Give me two sets of assets:
1. ad-headlines.md — 10 short ad-copy headlines (under ~8 words each) for the freshness
and personal-touch themes, each inspired by a real review's phrasing. Mix a few that
quote the customer directly ("'Still warm-roasted-fresh.'") with a few that turn the
sentiment into a benefit line. Cite the review ID that inspired each. Never state a
claim a review doesn't support (no "best coffee in America" if nobody said it).
2. email-snippets.md — 4 short email snippets I can drop into a newsletter or a campaign:
a subject line + 2-3 sentence body, each built around a real testimonial, in my voice,
ending in a soft call to action. Attribute safely, cite the review ID.
Keep my brand voice and my no-hype rule. Flag any headline that pushes past what the
reviews actually prove.
Expected result — headlines and email openers grounded in real praise:
Written ad-headlines.md — 10 headlines. Sample:
- "Still warm-roasted-fresh." (R001, direct quote)
- Coffee that shows up like a friend dropped it off (R001, sentiment → benefit)
- Roasted to order. You can taste it. (R004, close paraphrase)
- The note in the box people keep mentioning (R007, sentiment)
⚠ Flagged: I did NOT write "best coffee anywhere" — no review claims a superlative like
that, so it would be an unsupported claim. Add it yourself only if you can back it up.
Written email-snippets.md — 4 snippets. Sample:
Subject: "Who does that anymore?"
Body: A customer asked that after our driver texted him a photo of his porch delivery.
Honestly? We do — every order, on purpose. Fresh bag, roasted this week, headed your way.
→ Reply and tell us your go-to brew. (source: R001)
The flagged headline is the pipeline protecting you: it refused to write “best coffee anywhere” because no review said it, and an unsupported superlative in an ad is exactly the kind of claim that gets a business in trouble. The machine draws the line at what your customers actually proved.
🧭 Checkpoint — Did it refuse to overclaim? Look for the flag in
ad-headlines.md.
- If Claude flagged (and skipped) any claim the reviews don’t support → good, your ad copy stays defensible. If a headline makes a claim you can’t trace to a review → cut it:
remove any headline that states something no review supports — every claim must come from a real customer's words.
Step 7 — Write quote-graphic captions
Quote graphics place a short customer statement on a branded background. This project prepares the text, evidence label, caption, and accessible description; layout happens in the design workflow your business has approved. Ask for caption + graphic-text pairs.
Read reviews.md and themes.md. For my 6 best quotes across all themes, give me a
quote-graphics.md with, for each:
- GRAPHIC TEXT: the exact short quote to put ON the image (verbatim, excerpted only if
meaning remains intact and the edit is disclosed), plus only the approved attribution.
- CAPTION: a 1-2 line social caption to post WITH the graphic, in my voice, that adds
context without repeating the quote.
- ALT TEXT: accessible alt text describing the graphic for screen readers.
Keep quotes verbatim; disclose any excerpt; use only candidate-table-approved attribution;
never invent. Mark unresolved use or attribution BLOCKED rather than guessing.
Expected result — ready-to-lay-out quote-graphic text with alt text:
Written quote-graphics.md — 6 graphics. Sample:
GRAPHIC 1 (freshness)
GRAPHIC TEXT: "Still warm-roasted-fresh."
— Marcus T., verified customer
CAPTION: This is the whole reason we roast to order instead of stocking shelves. Fresh
is a feeling, not a label. ☕
ALT TEXT: A coffee-brown graphic with the quote "Still warm-roasted-fresh" and the
attribution "Marcus T., verified customer."
[source: R001 — quote fragment verbatim]
GRAPHIC 2 (personal touch)
GRAPHIC TEXT: "The handwritten note in the box got me."
— Priya S.
CAPTION: We write one for every order. Thirty seconds that apparently means a lot. 🖊️
ALT TEXT: A cream graphic with the quote "The handwritten note in the box got me" and
"Priya S." beneath it.
[source: R007 — verbatim]
Alt text gives people using screen readers access to the relevant content and purpose of the graphic. Treat it as part of the asset version reviewed in the ledger, not an afterthought added during publication.
Take stock of the folder: themes.md, social posts, testimonial-blurbs.md,
wall-of-love.html, ad-headlines.md, email-snippets.md, and quote-graphics.md.
Missing files are ordinary recovery: rerun only the missing asset request. If several
assets repeat the same voice problem, sharpen brand-voice.md once and regenerate those
assets; do not regenerate evidence-backed work merely to create more variants.
Step 8 — Tune the brand voice and run the human approval gate
Everything so far is a draft. This step is where you make the whole batch truly yours in two moves: sharpen the voice once (so the next run is better), and approve each asset once (so nothing off-brand or unverifiable ever ships). This is the non-negotiable gate.
First, tune the voice from what you just saw:
Looking at the posts you drafted, a few things are slightly off from how I'd say it:
[tell Claude the specific misses — e.g. "I'd never use 'game-changer'", "drop the second
exclamation point", "I say 'folks' not 'customers'"]. Update brand-voice.md with these
corrections so future runs match, then regenerate just the LinkedIn and Instagram posts.
Then run the approval pass:
Give me an approval ledger for this whole batch as approval-ledger.md. For EVERY asset
(each social post, blurb, headline, email, caption), one row with:
- asset ID and exact output filename,
- source review ID(s), source filename, and source record locator,
- text type: verbatim quote / disclosed excerpt / faithful paraphrase / business copy,
- source wording checked: yes/no,
- meaning and context preserved: yes/no,
- objective business claim independently substantiated: yes/no/not applicable,
- material connection, incentive, or atypical-results disclosure reviewed: yes/no/N/A,
- attribution and proposed use permitted: yes/no/unknown,
- unnecessary personal data absent: yes/no,
- brand voice and destination fit: yes/no,
- decision: APPROVE / REVISE / REJECT / BLOCKED-PERMISSION / BLOCKED-LEGAL-REVIEW,
- human editor and review date.
Populate evidence links and obvious flags, but leave the human decision, editor, and date
blank. A model may not approve its own output. Remind me at the top: I publish each
specifically approved version myself; you never post anything and you do not provide a
legal conclusion.
Expected result — a per-asset ledger whose decisions are still blank:
Written approval-ledger.md — 31 asset rows.
Evidence fields populated: 31
Rows with unresolved permission: 3
Rows with unsupported or ambiguous business claims: 2
Human decisions completed: 0
Nothing published; no publishing integration exists.
The unresolved rows are the useful output. They stop uncertain attribution, a drifting paraphrase, or an unsupported claim from becoming polished public content. Open the source, resolve the actual issue, then record your decision and date. Only a specifically approved version may leave the folder.
Checkpoint - Is every public action still human? Say the loop out loud: Claude drafts from registered source records; a human checks the evidence and unresolved legal/policy questions; that human records a decision on the exact asset version; and the human separately publishes only an approved version.
Inspect the project for social, CMS, email-marketing, advertising, or website deployment credentials and SDKs. There should be none. If the pipeline can post, schedule, upload, or change a live site, remove that integration before continuing. Approval text inside an AI prompt is not a human gate if the same process can publish its own output.
Step 9 — Make it a repeatable monthly routine
New reviews come in every week. The pipeline only pays off if re-running it next month costs you two minutes, not a re-explanation. Save the whole workflow as a standing instruction.
I want to run this every month without re-explaining. Do two things:
1. Write CONTENT-ENGINE.md that says: "For each newly authorized source file, verify its
source-register hash and normalize it without changing the source. Assign stable IDs,
redact unnecessary private data from the working copy, and keep record locators.
Re-cluster themes with supporting IDs. Reading brand-voice.md, draft the full asset set.
Label text as verbatim quote, disclosed excerpt, faithful paraphrase, or business copy;
never put paraphrases in quotation marks. Produce approval-ledger.md with evidence,
substantiation, material-connection/disclosure, permission, privacy, and human decision
fields. Block unresolved rows. Never approve or publish."
2. Show me the shortest way to start a fresh Claude Code session next month that loads
this and runs it on new reviews.
Expected result — a one-command monthly engine:
Written CONTENT-ENGINE.md (your standing instructions).
Next month, from the ~/reviews-marketing folder, run:
claude
then paste, as your first message:
Follow CONTENT-ENGINE.md. Here are this month's new reviews: <paste or point to a CSV>
Claude appends them verbatim, re-themes, drafts the full asset set citing real review IDs,
builds the approval checklist, and reminds you to publish each one yourself. Everything
stays local and free.
🧭 Checkpoint — Could a teammate run next month’s batch? Close Claude Code (
/exit), reopen it in~/reviews-marketing, tell itFollow CONTENT-ENGINE.mdand paste a couple of new reviews.
- If it verifies the source, normalizes without altering it, re-themes, drafts cited assets, and leaves decisions blank → an authorized teammate can repeat the workflow under the same data-access and review policy. If it drafts generically or invents quotes → disable real-data use, confirm the project directory and instruction file, then repeat with the training fixture until traceability works.
Test the whole system
Do not use a real customer’s identity for the first end-to-end test. Create a small fixture
source file containing three clearly fictional records labeled TRAINING FIXTURE — NOT FOR PUBLICATION: one positive review with an email address that must be redacted, one mixed
review that should not be mined as uncomplicated praise, and one positive review that
mentions the reviewer received a free sample. Give the source a registered hash and run
the monthly instruction in a separate test-run/ folder.
Happy path: evidence survives every transformation
For the first positive fixture, verify all of these:
- The source hash remains unchanged.
- The working record has a stable ID and correct source locator.
- The email address is absent from
reviews.mdand every asset. - A selected quote matches the source exactly, or an excerpt is clearly disclosed.
- Business-authored context is outside quotation marks.
- The asset row links back to the correct record.
- Permission remains
unknownbecause the fixture supplies no permission evidence. - The decision remains blank or
BLOCKED-PERMISSION; it is never auto-approved. - No publishing package, account credential, browser automation, or external upload is introduced.
Ask Claude for a read-only audit:
Audit test-run/ from source to ledger without changing anything. For each transformation,
show the source filename and record locator, working review ID, exact quoted span, omitted
span if excerpted, separate business-authored text, privacy redactions, disclosure and
permission status, and final decision. Then search the project tree for the fixture email
address and for publishing credentials or SDKs. Report evidence, not reassurance.
Expected result: the email search returns no working or asset matches; the quote trace is exact; the source hash matches; and the asset is blocked because permission is unresolved. This is a successful test. A blocked decision proves the gate is working.
Deliberate failure: make a polished asset unsupported
Now add this test-only asset by hand:
"Every customer says our delivery is the fastest in town."
No fixture review says that. Run the evidence audit again. The expected result is not a
rewritten source record and not a plausible citation. The ledger must mark the asset
REJECT or BLOCKED-LEGAL-REVIEW, identify the unsupported universal and comparative
claims, and show that no review ID substantiates them. The source and normalized records
must remain unchanged.
If Claude invents an ID, attaches an unrelated review, removes “every,” or silently turns the statement into something publishable, the test failed. Tell it:
The audit repaired or rationalized an unsupported asset instead of exposing the failure.
Restore the test asset exactly. Add a rule that audit mode is read-only and may never alter
source, working records, or asset wording. When no source supports a claim, record NONE,
block the asset, and explain the gap. Re-run the fixture and show file hashes before and
after to prove audit mode changed nothing.
Checkpoint - Does failure remain visible? The project is ready for real authorized data only when unsupported copy stays blocked, private information does not leak into derived files, unresolved permission stays unresolved, the model cannot approve its own output, and no test action can publish. Delete the entire training fixture before importing real records so fictional examples can never be mistaken for customer evidence.
Why repurpose reviews instead of just writing fresh marketing copy? (concept)
Because a real customer's specific words can provide credible evidence of that person's experience in a way generic self-description cannot. Repurposing may also reveal strengths customers mention without prompting. But a real review is not automatic proof of a universal or typical result, blanket permission for every advertising use, or support for new claims added around it. That is why the machine preserves and drafts while a human checks context, permission, disclosure, substantiation, and the final presentation.When things go wrong
| Symptom | Likely cause | Fix |
|---|---|---|
| A post quotes something no customer said | Claude paraphrased past the source, or invented | ask Claude: every asset must cite a real review ID and use only that review's words — regenerate anything you can't source verbatim |
| Assets sound generic / not like me | brand-voice.md is thin or being ignored | ask Claude: re-read brand-voice.md and rewrite in my exact tone — use my keep-phrases, drop my never-list words |
| A CSV imported as garbled text | Wrong column mapping or encoding | ask Claude: show me which CSV columns you mapped to Name/Rating/Text and re-map — the review text is in the "<col>" column |
| A review leaked an email / order number | PII not stripped on ingest | ask Claude: re-scan reviews.md and remove every email, phone, order number, and full last name — first name + initial only |
| An ad headline overclaims (“best ever”) | Sentiment inflated past the review | ask Claude: never state a claim no review supports — cut any superlative a customer didn't actually write |
| A trimmed quote looks like the full verbatim | Length edit not marked | ask Claude: mark every shortened quote with [edited for length] so I never present an edit as verbatim |
| Used a name / photo without resolved permission | Attribution rule guessed instead of consulting the candidate table | ask Claude: mark the asset BLOCKED-PERMISSION, remove it from the publishable set, and show which permission or approved-attribution evidence is missing |
| Same post feels wrong on every platform | Not shaping per platform | ask Claude: reshape each post for its platform — LinkedIn story, IG caption + hashtags, X under 280, FB conversational |
| Next month it forgot my setup | Started in the wrong folder / didn’t load files | Run from ~/reviews-marketing (pwd) and start with Follow CONTENT-ENGINE.md |
Make it yours
- Video testimonials → captions and clips. Got happy customers on camera?
ask Claude: here's the transcript of a video testimonial — pull the 3 strongest verbatim lines as quote-graphic text and social captions, and suggest which 15-second segments to clip, citing timestamps. - Multilingual reach.
ask Claude: take my top 5 testimonial blurbs and translate them into Spanish and French, keeping the meaning faithful and marking them as translations of a verified customer's words. - Per-platform tone dial.
ask Claude: give me a LinkedIn version (professional, story-led) and a TikTok version (casual, punchy) of the same freshness testimonial, keeping the quote verbatim in both. - Auto-build a testimonials web page. Go past a single section.
ask Claude: turn testimonial-blurbs.md and wall-of-love.html into a full, self-contained testimonials.html page with theme sections and a star summary — plain HTML/CSS I can host for free. - Long-form case studies.
ask Claude: this customer left three glowing reviews over six months — draft a short case-study outline from their verbatim words (problem, what changed, result), and mark exactly where I need to ask their permission before publishing. - A “what should we fix” flip side.
ask Claude: read the "Not for marketing" section and summarize the top 3 complaints — not for marketing, but so I know what to improve before I amplify the praise.
What you now understand
You can now explain why trustworthy testimonial marketing is an evidence problem before it is a writing problem. The original review, its context, the proposed transformation, the business’s added claim, permission, disclosure, privacy, and human decision are different facts. A fluent model can produce attractive prose without resolving any of them, so the workflow keeps them separate and visible.
You also understand that local artifacts and private processing are not synonyms. Claude Code reads local files, but selected contents are processed according to the account and organization’s current data terms. Data minimization begins before the model session, not after an email address has already entered a prompt.
Ownership checklist
- I can locate the untouched source record behind any working review ID.
- I can verify a source file has not changed using its registered hash.
- I can distinguish a verbatim quote, disclosed excerpt, faithful paraphrase, and business-authored claim.
- I know that quotation marks may not be used for a paraphrase.
- I can identify objective claims that need support beyond the fact a customer said them.
- I review material connections, incentives, atypical outcomes, permission, privacy, and attribution rather than treating a public review as blanket approval.
- I know which Claude account terms and privacy controls apply to the data I submit.
- I have watched an unsupported polished asset remain blocked during the deliberate test.
- I can show that the project contains no publishing credential or integration.
- A named human approves an exact asset version and records the date.
- I can reject a useful-sounding asset without modifying its source to justify it.
- I know when a legal or policy question needs qualified human review.
If you cannot check one item, leave the corresponding asset blocked. The point of this machine is not to maximize output. It is to make useful customer evidence easier to find without making its origin, limits, or human accountability harder to see.
Related use cases
- uc198 — the review-response drafter. That one writes your public reply to a review in your voice; this one repurposes reviews into outbound marketing. Same respect for the customer’s real words, opposite direction — use both and no review goes to waste.
- uc213 — for short-term-rental hosts: requesting reviews and replying to them across Airbnb/VRBO/Google. If you’re an STR host, run that to earn and answer the reviews, then bring them here to turn them into listing marketing.
- uc196 — the after-hours FAQ bot answers customers in your voice from your own rules; pair it with this and the same brand voice powers both your support and your marketing.
- uc12 — the general content-drafts workflow. Once this pipeline gives you a month of review-sourced posts, that lesson is where you build the broader content calendar around them.