Product Block 04 · Sellable today

Review Response Bot

Reply to every Google + Yelp review in the owner's voice. They one-click approve.

Deploy: 2 days $1,000 setup $250/mo
Live demo Try the demo → https://reviews.cafecito-ai.com/

Best fit: Restaurants, salons, dental, MedSpa, gyms — any business where review velocity directly affects bookings and the owner currently never replies.

⚡ Self-bootstrap · paste into Claude Code or Codex

Review Response Bot — build it without writing code

Drop the prompt below into Claude Code or Codex. The agent picks a high-review-count business that ignores reviews, pulls 50 reviews via Google Places API, trains voice on their About page, builds the daily digest with one-click approval, and produces a hosted demo report of 10 of THEIR unanswered reviews + AI-drafted responses as the cold pitch.

You provide

You provide: (1) a prospect business name + Google Place ID (or a Google Maps URL the agent can resolve), (2) the prospect owner email, (3) the URL of their About page or social bio.

You get back

You get: a hosted demo report at demo.cafecito-ai.com/<slug> with their reviews + AI-drafted responses, a working daily digest sent to YOUR email for the 24h test run, and a draft cold-pitch with the demo URL.

Runtime & cost

Roughly 60 minutes wall-clock. ~$1 in Claude tokens during testing.

📋 Copy the entire block below into Claude Code (`/plan`) or Codex
You are building a Review Response Bot (Block 04 in the Cafecito AI new-hire playbook). Full reference at https://cafecito-ai.com/new-hire/blocks/04-review-response-bot. Read it. Use plan mode. Stop at every [GATE].

INPUTS YOU NEED FROM THE HUMAN (ask before doing anything else):
1. Prospect business name + Google Place ID (or Maps URL — you can resolve to Place ID)
2. Prospect owner email
3. URL of owner's About page, LinkedIn, or social bio (for voice training)

ENVIRONMENT (verify):
- Working dir: /home/eratner/cafecito-ai
- Cloudflare account: f7a9b24f679e1d3952921ee5e72e677e
- Wrangler authenticated via OAuth

SECRETS TO CONFIRM:
- ANTHROPIC_API_KEY
- GOOGLE_PLACES_KEY (for review API access)
- RESEND_API_KEY

THE PLAN:

STEP 1 — RESEARCH + REVIEW PULL (10 min)
- Hit Google Places API: GET /place/details/json?place_id=<id>&fields=reviews,name,rating,user_ratings_total. Save last 50 reviews + owner-response-rate.
- Pull the About page / LinkedIn / social bio URLs the human provided. Extract 1,500-3,000 words of voice corpus.
- Pre-qualify: response rate must be < 30%. If owner already replies to most reviews, abort and tell the human (this prospect is not a fit).
[GATE 1 — show review count + response rate + bio corpus length, ask "proceed?"]

STEP 2 — VOICE PROFILE (10 min)
- Use Prompt #1 from the block page ("Voice extraction from owner About page") with the corpus from Step 1.
- Output: voice profile, 5 sample responses to dummy reviews, style guide.
- Save to /home/eratner/cafecito-ai/reviews-<prospect-slug>/voice.md.
[GATE 2 — show voice profile + the 5 sample responses, ask "does this sound like the owner?"]

STEP 3 — SCAFFOLD WORKER (10 min)
- Create /home/eratner/cafecito-ai/reviews-<prospect-slug>/.
- Worker handles: GET /demo-report/<slug> (hosted demo page), POST /api/draft-response (per-review generation), GET /api/digest (cron-triggered daily digest), GET /api/approve/:token (one-click approval magic link).
- Bindings: D1 REVIEWS_DB (responses log), KV APPROVAL_TOKENS (24h TTL).
[GATE 3 — show worker.js, ask "deploy?"]

STEP 4 — BUILD THE DEMO REPORT (15 min)
- Use Prompt #4 from the block page ("Pre-pitch demo report") with: their last 10 unanswered reviews + voice profile.
- Generate AI-drafted responses for each (using Prompt #2 "Per-review response generator").
- Build the hosted demo HTML at GET /demo-report/<slug>.
[GATE 4 — show the demo report URL, ask "proceed to deploy + dry-run digest?"]

STEP 5 — DEPLOY + DAILY DIGEST DRY RUN (10 min)
- Set secrets. Apply D1 migrations. Deploy via OAuth wrangler.
- Trigger the digest manually (POST to a /admin/run-digest endpoint with admin token).
- Verify the digest email landed in YOUR inbox (NOT the prospect's — testing only).
- Check the magic-link approve buttons work end-to-end (click → returns "would publish to Google Places API" stub for testing).
[GATE 5 — confirm digest received + buttons work, ask "ready to draft the pitch?"]

STEP 6 — DRAFT THE COLD PITCH (5 min)
- Email subject: "10 of your customers wrote you in 2026 and you didn't answer."
- Email body: 4 sentences, lead with their response rate stat, link the demo report, name the price ($1k setup / $250/mo), one yes/no close.
- WhatsApp + IG DM versions (one line each, demo URL embedded).
[GATE 6 — show the draft, ask the human to approve / send manually]

STEP 7 — SHIP THE SUMMARY
- Single-line: "[BUSINESS] review bot demo at [URL] · pitch sent to [EMAIL]."
- Append to /home/eratner/cafecito-ai/reviews-shipped.md.

DONE. End plan.

GUARDRAILS: never auto-publish responses to the prospect's actual Google profile during testing — always stub the publish step until they sign. Cost ceiling: $3 in Claude tokens. Pre-qualify hard: skip prospects with <50 reviews or >30% existing response rate.
01Stack
  • CF Worker
  • D1
  • Google Places + Yelp APIs
  • Claude
  • Resend (daily digest)
03Day-1 plan

A real prospect. A real demo. A real outbound message — all before 5pm.

  1. 09:00–09:30 Pick a high-review-count business that ignores reviews.

    Wynwood restaurant, Brickell salon, Coral Gables dental office. Filter by 50+ Google reviews, owner-response rate < 30%. The lower their existing response rate, the bigger your before/after.

  2. 09:30–10:30 Pull their last 50 reviews via Google Places API.

    Save: rating, text, author, date, owner-response (if any). This is your dataset for both voice training AND the demo.

  3. 10:30–11:30 Train the voice on their About page + menu copy.

    Owner's About bio + sample social posts + any newsletter copy = voice corpus. Feed Claude these as system context. Test on 3 sample reviews — do they sound like the owner?

  4. 11:30–12:30 Build the response generator.

    CF Worker endpoint that takes a review JSON + the voice corpus + tone (warm/direct/witty per owner) → returns a draft response. Match formality of the original review. Address by name only if the review used a name.

  5. 12:30–13:30 Build the daily digest email.

    Resend cron at 8am: pull last 24h of reviews, generate drafts, build an email with each review + draft + one-click APPROVE / EDIT / SKIP. Approve fires the response back to Google Places API.

  6. 13:30–14:30 Wire one-click approve.

    Each button is a signed URL → CF Worker endpoint → posts the response to Google. No login needed (token in URL). Token expires in 7 days. Log every action.

  7. 14:30–15:30 Backfill demo: generate responses for their last 10 unanswered reviews.

    Don't POST them — generate the drafts. Build a one-page report: "Here are 10 of your reviews from the last 90 days you didn't respond to. Here's what I'd say in your voice for each."

  8. 15:30–16:30 Pretty up the demo report as a one-pager.

    Hosted page at subdomain.cafecito-ai.com/demo/<owner-slug>. Their logo, their reviews, the AI-drafted responses side by side. This IS the cold pitch.

  9. 16:30–17:00 Send the cold pitch.

    Email + Instagram DM. Subject: "10 of your customers wrote you in 2026 and you didn't answer." Link the demo report. Reply target: tomorrow morning.

04Best practices & gotchas
  • Never auto-post. Always one-click approve from the owner's email.

    Why: A response from a bot reads like a bot the moment it tries to address something specific. One bad auto-response wipes out the goodwill from twenty good ones. The 5 seconds of approval is the entire moat.

  • Match the formality of the original review.

    Why: A casual "loved it!!!" gets a casual one-line response. A 200-word complaint gets a measured 4-sentence reply. Mismatched tone reads as scripted. Detect formality from word count + emoji presence + punctuation density.

  • Address by name only if the review used a name.

    Why: Half of Google reviewers use a real name; half use "Sarah W." or just initials. Calling a "Sarah W." reviewer "Sarah" without confirmation feels presumptive. If the name is partial or absent, use "Hi there" or "Thanks for stopping by."

  • Mention specific items / details the reviewer mentioned. Never generic praise.

    Why: "So glad you enjoyed your visit!" is the universal tell of a fake response. "Glad the bistec a caballo hit the spot — Marisol takes those pickles personally" is the response that gets quoted on Yelp as "owner who actually reads."

  • Never offer a refund, comp, or remediation in writing without owner approval.

    Why: A bot offering "we'd love to make this right with a free meal" creates a binding offer the owner has to honor. Default the AI to "we'd love to make this right — please reach out to [owner contact]" and let the owner do the actual offer offline.

  • Log every response with the original draft, edits, owner action, and timestamp.

    Why: For legal: "did the owner approve this response?" needs an answer. For improvement: which drafts got edited and how teaches the system the owner's preferences over time.

  • Respond within 48 hours. The 48-hour window is the SEO + trust threshold.

    Why: Google's local-pack algorithm weighs response recency. Customer-facing trust drops sharply after 48h. Set the cron + the owner expectation at 48h max.

05Prompts (copy-paste)

Drop these into Claude Code. Replace the [BRACKETED] fields with the prospect's details.

Prompt 1 Voice extraction from owner About page

Builds the voice corpus + tone profile from the owner's existing public writing.

I'm building a review-response bot for [BUSINESS NAME] in Miami. I need to capture the owner's voice so the responses sound like them.

Below is the corpus of public writing from / about the owner — their About page, social media bio + last 20 posts, any newsletter intros, any quoted media interviews.

[paste corpus here — aim for 1,500-3,000 words total]

Analyze this corpus and produce:
1. **Voice profile** (under 200 words): tone register, signature phrases, words they use vs avoid, sentence length, emoji use, formality with strangers vs regulars.
2. **5 sample responses** to these dummy reviews:
   a. 5★ "Loved everything!!!"
   b. 5★ detailed review of a specific item
   c. 4★ with a small complaint about wait time
   d. 2★ with a billing dispute
   e. 1★ angry vague complaint, no specifics
3. **Style guide** (under 150 words): rules to give the response generator going forward.

Output as three labeled sections.
Prompt 2 Per-review response generator

The Claude prompt that takes a review + the voice profile and returns a draft response.

Generate a response to the following Google/Yelp review for [BUSINESS NAME].

Review:
- Rating: [1-5]
- Author: [name or partial]
- Date: [timestamp]
- Text: [full review text]

Voice profile and style guide:
[paste voice profile + style guide from previous prompt]

Constraints:
- Length: match review's length.
- Tone: match review's formality.
- Address: by name ONLY if the review used a real-looking name. Otherwise "Hi there" or platform-neutral opener.
- Specificity: reference at least one specific detail the reviewer mentioned.
- Never offer refunds, comps, or remediation in writing. Default to "please reach out to [OWNER_CONTACT]" for complaints.
- Never use: "circle back," "going forward," "team," "valued customer," "five-star experience," any emoji unless the original used emoji.

Output JSON:
{
  "draft_response": "...",
  "tone_used": "warm|direct|measured|apologetic",
  "addressed_by_name": true|false,
  "needs_remediation_offline": true|false,
  "confidence": "high|medium|low",
  "skip_recommended": true|false,
  "skip_reason": "..."
}

Skip if: incomprehensible, possibly spam, contains personal attack on a named employee, or mentions ongoing legal action.
Prompt 3 Daily digest email layout

The HTML for the 8am owner email with overnight reviews + drafts + one-click action buttons.

Generate an HTML email layout for the daily review-response digest sent to [OWNER NAME] at [BUSINESS NAME] at 8am.

Constraints:
- Plain HTML, inline CSS (Gmail/Outlook safe), no JS, no external images.
- Mobile-first.
- Cream #FDF9F2, ink #1A1814, accent #B8472A.

Structure:
- Header: "Good morning, [first name]. [N] new reviews to look at."
- Summary: "[N] need a response · [N] you may want to skip · ~[N] minutes total."
- For EACH review (most recent first):
  - Reviewer name + star rating + date + platform.
  - Original review text (italic, indented).
  - Drafted response (regular weight, slightly bigger).
  - Three buttons: APPROVE (cream-on-accent, large), EDIT (text link), SKIP (text link). Each is a signed magic-link URL.
  - Confidence badge if low.
- Footer: "[N] reviews from the last 24 hours. To change frequency or pause: [link]. Sent by [BUSINESS NAME]'s review concierge."

Output: complete HTML email template with [PLACEHOLDERS].
Prompt 4 Pre-pitch demo report

A one-page hosted demo built from their last 10 unanswered reviews — the cold pitch with receipts.

Build me a one-page hosted demo report for [BUSINESS NAME]. Lives at demo.cafecito-ai.com/[business-slug].

Inputs:
- Their logo (or generate a clean text wordmark in their brand color)
- Their last 10 unanswered Google/Yelp reviews
- AI-generated responses in their voice
- The 48-hour-window stat
- Their current public response rate

Page structure:
- Above fold: "Hi [OWNER]. Here's what 10 of your customers wrote you in 2026 — and what we'd say back, in your voice."
- Stats banner.
- For each review: original (left), AI-drafted response (right), [APPROVE PUBLISH] teaser CTA.
- Footer: "Want this running every morning at 8am? $1,000 to set up, $250/mo. Reply to [EMAIL]." Cal.com embed.

Style: editorial, calm, scannable. Cream/ink palette. Fraunces headers, Inter body. Mobile-responsive.

Output: single-file HTML, no framework, inline CSS.
06Selling script

Discovery question (ask this first)

"How many of your last 50 Google reviews did you personally respond to? When was your last reply?"

The frame

Restaurant and salon owners are the most reviewed people in Miami and the worst at responding. Every unanswered review is a missed signal to Google's local algorithm AND the next customer who reads the page. The 48-hour response window has a measurable effect on repeat-visit rate.

The demo play

Send the demo report URL during the discovery call. They scroll. They see their own customers, drafted responses in their own tone. The pitch happens silently as they read. Wait until they finish before you talk.

Objections

  • "It'll sound robotic."

    "Read the demo. Five of those drafts mention specific dishes or staff by name. The other five are matched to the formality of the original review. If a single one sounds robotic, I'll rebuild your voice profile for free."

  • "I want to write them myself."

    "You're welcome to. Most owners say that and respond to two reviews in the next month. The bot doesn't replace you writing — it eliminates the friction. Approve the perfect ones, edit the others, skip the rest."

  • "Google says I shouldn't use AI for responses."

    "Google explicitly allows AI-assisted responses as long as a human approves. The one-click-approve is the human in the loop. We're not bypassing — we're scaling your hand."

  • "$250/mo for review responses?"

    "You get the daily digest, response generator, voice profile maintenance, performance reporting, and a quarterly voice retune. The closest agency package is $800/mo and they manually write the responses."

The close

"$1k now to wire up your reviews + train your voice + send tomorrow's 8am digest. $250/mo from the morning of your first sent response. If your response rate isn't 80%+ in 30 days, kill it — no contract."

07Pricing notes

Anchor on SEO + repeat-visit value. Local-pack ranking weighs response rate; sustained 80%+ moves businesses up half a position on average within 90 days. Per-response Claude cost: ~$0.02. Google Places API: free up to quota. At 30-50 reviews/mo, marginal cost under $5/mo. Setup includes: voice training, digest setup, magic-link approval, demo report. Does NOT include: Yelp Fusion API ($300, requires partner approval), multi-location ($500 each), TripAdvisor/OpenTable adapters ($500 each). Upsell: combine with Block 07 (SMS reactivation) → $500/mo combined "Customer Loop."