AI Coding Ideas
← Back to Ideas

ReviewMine - AI-Powered Review Sentiment and Concern Extraction

Scrape Google Reviews, Trustpilot, and Capterra for your SaaS product, extract sentiment, objections, and feature requests with NLP, and deliver a weekly digest to Slack. No manual review reading.

Difficulty

beginner

Category

NLP & Text AI

Market Demand

High

Revenue Score

7/10

Platform

Web App

Vibe Code Friendly

⚡ Yes

Hackathon Score

🏆 8/10

What is it?

SaaS founders and product teams spend hours reading customer reviews across multiple platforms (Google Reviews, Trustpilot, Capterra, ProductHunt) to spot trends, objections, and feature requests. They are drowning in qualitative data but have no system to aggregate and prioritize it. ReviewMine automates this by scraping reviews from all major platforms, using Claude or a fine-tuned NLP model to extract sentiment (positive/neutral/negative), top objections (pricing, complexity, missing feature), suggested features, and competitor mentions. It then surfaces a weekly digest in Slack with top themes ranked by frequency and impact. Why 100% buildable now: Web scraping with Cheerio or Playwright is straightforward. Claude's structured output mode (via function calling) extracts sentiment and entities reliably without custom model training. Supabase stores reviews and digests. No custom NLP training needed—Claude does the heavy lifting.

Why now?

Claude's function calling (released 2025) makes structured extraction from reviews reliable without fine-tuning. Playwright is now stable and widely used for web scraping. Slack app distribution is mature. SaaS founders are increasingly focused on PLG and user feedback loops.

  • Automated scraping of Google Reviews, Trustpilot, Capterra, and ProductHunt for your product (via search or URL)
  • Sentiment extraction: positive/neutral/negative classification with confidence score
  • Objection and feature request extraction via Claude function calling (what did customers complain about, what did they ask for)
  • Weekly Slack digest ranking top themes by frequency and sentiment

Target Audience

Early-stage SaaS founders and product managers (TAM: ~25k SaaS companies). Focus on $500k–$5M ARR range where teams are manually tracking but not yet on BI tools.

Example Use Case

Jordan, founder of a $2M ARR project management SaaS, used to manually read 20-30 reviews per month across Google and Capterra. ReviewMine now automatically extracts that 'pricing complexity' is mentioned in 12% of negative reviews and 'mobile app' is the top feature request. He uses these insights to launch a mobile MVP and simplify pricing tiers, driving a 25% increase in conversions.

User Stories

  • As a SaaS founder, I want to automatically extract common objections from customer reviews so that I can prioritize product improvements.
  • As a product manager, I want to see if competitors are mentioned in reviews so that I can adjust positioning and messaging.
  • As a growth lead, I want to know if pricing is a top complaint so that I can test pricing experiments.

Acceptance Criteria

Scraping: done when Google Reviews scraper returns 10+ reviews per product with no manual intervention. Extraction: done when Claude endpoint returns sentiment and objections for 10 sample reviews with > 85% accuracy (spot-checked). Weekly Digest: done when Slack bot delivers digest every Monday with top 5 themes ranked by frequency. Dashboard: done when sentiment chart loads in under 2 seconds and reflects extracted data.

Is it worth building?

$79/month × 50 customers = $3,950 MRR at month 3. $199/month × 20 scaling teams = $3,980 MRR. Combined: $7,930 MRR at month 4.

Unit Economics

CAC: $200 realistic (30 hours of founder DM/outreach time at early stage, plus any paid distribution; Twitter/X DMs convert at ~5-8% requiring 15-20 DMs per customer). LTV: $948 (12 months at $79/month, 70% annual retention). Payback: 3 months. Gross margin: 78% (Claude API + infra costs ~$3.50/customer/month at scale).

Business Model

SaaS subscription: $79/month for up to 3 products, $199/month for unlimited

Monetization Path

Free tier: 100 reviews scanned per month, manual Slack digest. Paid: unlimited reviews, auto-weekly digest, sentiment trends dashboard.

Revenue Timeline

First dollar: week 3 (beta trial). $1k MRR: month 2. $5k MRR: month 5. $10k MRR: month 10.

Estimated Monthly Cost

Claude API: $60 (assume 1k reviews/month × 0.005 per extraction). Playwright cloud (optional, for reliability): $50. Vercel: $20. Supabase: $25. Stripe fees: ~$20. Sentry: $0 (free tier). Total: ~$175/month at launch.

Profit Potential

Full-time viable at $4k–$12k MRR.

Scalability

High — can add Slack thread automation, integration with Jira to auto-create tickets from feature requests, team collaboration features.

Success Metrics

Week 1: 100 API key signups. Week 2: 20 paid trials. Month 2: 40 paid customers, 60% retention.

Launch & Validation Plan

Survey 30 SaaS founders on Twitter/X and ProductHunt about review sentiment tracking. Build landing page with example digest screenshot. Recruit 5 beta testers (early-stage SaaS companies) for 3-week free trial. Measure: reviews scraped per product, accuracy of sentiment (spot-check 20 reviews manually), Slack digest engagement (clicks on digest, follow-up actions).

Customer Acquisition Strategy

First customer: DM 20 SaaS founders on Twitter/X offering 2 months free in exchange for weekly feedback and testimonial video. Second: ProductHunt launch, Reddit r/SaaS and r/startups, Twitter/X threads on product feedback loops, LinkedIn posts targeting PMs, partner with Slack App Store.

What's the competition?

Competition Level

Medium

Similar Products

Chattermill (enterprise review and feedback analytics, chattermill.com), Thematic (qualitative feedback analysis, getthematic.com), Playvs/Revuze (AI review analytics for CPG but applicable model), Yogi.ai (consumer review intelligence). Trustpilot and Google have native dashboards but no cross-platform aggregation or Slack delivery. Gap: no Slack-native, multi-platform digest tool aimed at early-stage SaaS teams.

Competitive Advantage

Multi-platform scraping in one place (Google, Trustpilot, Capterra). Slack-native delivery. Claude-powered extraction is more accurate than regex or custom models for early users.

Regulatory Risks

Terms of Service: scraping Google Reviews violates TOS; mitigate with user-provided URLs or official API access (Google Reviews API is limited). GDPR: reviews are user-generated content; ensure privacy policy covers data retention. CCPA: California users must be able to request deletion of their reviews from your system.

What's the roadmap?

Feature Roadmap

V1 (week 2): Google Reviews, Trustpilot, Capterra scraping; Claude extraction; weekly Slack digest. V2 (month 2-3): Competitor mention extraction, custom keywords, Jira auto-ticket creation from feature requests. V3 (month 4+): Team collaboration, Slack thread responses, API access, white-label reselling.

Milestone Plan

Phase 1 (Week 1): Build Next.js scaffold, Supabase schema, Google Reviews scraper, test with 5 products. Done when: scraper returns 50+ reviews per product, no errors. Phase 2 (Week 2): Trustpilot + Capterra scrapers, Claude extraction, weekly cron digest. Done when: digest generates and Slack bot posts to test channel. Phase 3 (Month 1): Stripe billing, 5 beta customers on-boarded, first paying customer. Done when: 5 customers have products synced, received 2+ digests.

How do you build it?

Tech Stack

Next.js, Claude API, Playwright, Cheerio, Supabase, Slack API, Stripe — build with Cursor for scraping and Claude integration, v0 for dashboard.

Suggested Frameworks

@anthropic-ai/sdk for Claude structured output (tool_use), Playwright for dynamic scraping, node-cron for weekly digest job, p-limit for concurrency control on scraping batches

Time to Ship

4 weeks

Required Skills

Web scraping, Claude API function calling, Slack bot development, NLP fundamentals

Resources

Claude API docs, Playwright docs, Cheerio docs, Slack API docs, LangChain docs

MVP Scope

Create: (1) Next.js app with Supabase auth and Stripe. (2) Playwright/Cheerio scraper for Google Reviews (via search query). (3) Trustpilot scraper. (4) Capterra scraper. (5) Claude function-calling endpoint (/api/extract) that takes raw review text and returns JSON: {sentiment, objections[], featureRequests[], competitorMentions[]}. (6) Supabase schema: products, reviews, extractions, slack_digests. (7) Weekly cron job that aggregates extractions into digest. (8) Slack bot that delivers digest to user's channel. (9) Simple dashboard showing sentiment trends chart (v0) and top themes table.

Core User Journey

Sign up -> add product URL -> wait for first weekly digest (or manually trigger) -> read Slack digest showing sentiment and top objections -> upgrade to paid for unlimited products.

Architecture Pattern

User inputs product name/URL -> weekly cron triggers -> Playwright scrapes Google/Trustpilot/Capterra -> raw reviews stored in Supabase -> Claude API extracts sentiment+objections via function calling -> results stored in extractions table -> weekly digest aggregates top themes -> Slack bot posts digest to user's channel.

Data Model

User has many Products. Product has many Reviews. Review has many Extractions (sentiment, objections, features). User has many SlackDigests (weekly summaries).

Integration Points

Claude API for sentiment and entity extraction, Playwright for dynamic web scraping, Cheerio for static HTML parsing, Supabase for review storage, Slack API for digest delivery, Stripe for billing.

V1 Scope Boundaries

V1 excludes: sentiment analysis for competitor products, drill-down to individual reviews, team collaboration, mobile app, white-label API.

Success Definition

A paying SaaS founder discovers the product, adds their product, receives the first weekly Slack digest with sentiment and feature requests, acts on one insight, and renews after 30 days.

Challenges

Scraping detection and blocking by review platforms (Capterra is aggressive). Handling duplicate reviews across platforms. Accuracy of sentiment for sarcasm or mixed sentiment.

Avoid These Pitfalls

Do not scrape Google Reviews via Playwright at scale — Google actively fingerprints headless browsers and will block your IP within days; use rotating residential proxies or pivot to Google's Places API (limited but TOS-safe). Do not ignore Capterra's aggressive bot detection — it serves challenge pages to headless browsers; budget for a proxy service like Brightdata or Oxylabs from day one or your scraper will fail in production. Do not store full review text indefinitely — review platforms claim copyright over their content; implement 90-day rolling deletion and store only extracted metadata (sentiment, themes) long-term to reduce legal exposure. Do not send every review individually to Claude — batch 10-20 reviews per API call using the messages array to avoid 10x API costs; single-review calls will burn your Claude budget at ~100 customers. Do not assume sentiment extraction accuracy is uniform — sarcasm, mixed-language reviews (common on Trustpilot EU), and short one-word reviews all degrade Claude accuracy significantly; add a confidence threshold and flag low-confidence extractions for manual review rather than surfacing them in digests.

Security Requirements

Auth: Supabase Auth with email or Google OAuth. RLS enabled on all user-owned tables. Rate limiting: 20 req/min per user to avoid Claude API burnout. Input validation: product URLs validated before scraping. GDPR: data deletion endpoint removes all reviews and extractions for user. Data retention: reviews stored max 90 days; older reviews deleted automatically.

Infrastructure Plan

Hosting: Vercel. Database: Supabase Postgres. Scraping: Playwright Cloud (optional, for reliability). Cron: Vercel Functions. Monitoring: Sentry. CI/CD: GitHub Actions. Environments: dev, staging (Vercel preview), prod. Cost: Vercel $20, Supabase $25, Playwright $50, Sentry $0 (free), Total: $95/month.

Performance Targets

Expected DAU at launch: 25. Weekly cron job: completes in under 5 minutes for 50 products. API response time: Claude extraction under 1 second per review (batched). Dashboard load: under 2s (LCP). Scraper reliability: 95% success rate (some pages blocked, retry needed).

Go-Live Checklist

  • ✓ Google Reviews scraper tested on 3 products, returns 10+ reviews
  • ✓ Trustpilot scraper tested, returns expected data
  • ✓ Capterra scraper tested, handles pagination
  • ✓ Claude extraction tested on 20 reviews manually (accuracy > 85%)
  • ✓ Weekly cron tested in staging for 2 weeks
  • ✓ Slack bot tested end-to-end (delivers digest to test channel)
  • ✓ Stripe checkout tested
  • ✓ Error tracking live (Sentry)
  • ✓ Monitoring shows cron performance
  • ✓ Custom domain configured
  • ✓ Privacy policy includes data retention and GDPR deletion
  • ✓ 5 beta testers signed off (received 2 digests)
  • ✓ Rollback plan documented
  • ✓ ProductHunt and Reddit launch posts drafted.

How to build it, step by step

1. Run 'npx create-next-app@latest reviewmine --typescript --app' and 'npm install @supabase/supabase-js @anthropic-ai/sdk stripe playwright cheerio node-cron p-limit @slack/web-api zod'. 2. In Supabase dashboard create tables: users (id, email, slack_webhook_url, stripe_customer_id), products (id, user_id, name, google_url, trustpilot_url, capterra_url), reviews (id, product_id, platform, author, rating, text, review_date, raw_html_hash for dedup), extractions (id, review_id, sentiment enum('positive','neutral','negative'), confidence float, objections jsonb, feature_requests jsonb, competitor_mentions jsonb), digests (id, user_id, product_id, week_start date, top_themes jsonb, slack_delivered_at). Enable RLS and add policies so users can only read their own rows. 3. Build the Google Reviews scraper in /lib/scrapers/google.ts: use Playwright to navigate to maps.google.com search for the product name + 'reviews', wait for selector 'div[data-review-id]', scroll to load 20+ reviews, parse text/rating/author from DOM. Hash raw text for dedup before insert. Add retry logic with 3 attempts and 2s delay. 4. Build /lib/scrapers/trustpilot.ts: Trustpilot renders server-side so Cheerio suffices for basic scraping — fetch 'https://www.trustpilot.com/review/{domain}', parse '.review-content__text' and '.star-rating' selectors, handle pagination via '?page=N' query param up to page 3. 5. Build /lib/scrapers/capterra.ts: Capterra requires Playwright (JS-rendered). Navigate to the product URL, wait for '.review-content', extract text and rating. Use p-limit(2) to cap concurrent Playwright instances to avoid memory issues on Vercel. 6. Create /app/api/extract/route.ts: accept POST with {reviews: [{id, text}]}. Build a single Claude API call using tool_use with tool name 'extract_review_insights' and input_schema defining sentiment (enum), confidence (number 0-1), objections (string[]), feature_requests (string[]), competitor_mentions (string[]). Batch up to 15 reviews per call using a numbered list in the user message. Parse tool_use response and map results back to review IDs. Validate output with Zod before writing to extractions table. 7. Create /lib/jobs/weekly-digest.ts: query all products with reviews extracted in past 7 days, aggregate objections and feature_requests by counting frequency across extractions jsonb arrays using Postgres jsonb_array_elements, rank top 5 themes, compute sentiment distribution, write to digests table. Use node-cron schedule '0 8 * * 1' (Mondays 8am UTC). Deploy as a Vercel Cron Job in vercel.json with 'crons': [{'path': '/api/cron/digest', 'schedule': '0 8 * * 1'}]. 8. Create /app/api/slack/install/route.ts using @slack/web-api: store incoming_webhook URL per user in Supabase users table. In weekly-digest job, call WebClient.chat.postMessage with blocks formatted as: header block (week date), section blocks for sentiment bar (positive X% / negative Y%), then bullet list of top 5 themes with frequency counts. 9. Build dashboard at /app/dashboard using server components: fetch products and last 4 digests from Supabase, render sentiment trend as a simple recharts BarChart (npm install recharts), render top themes as a sortable table with objection text and frequency. Use v0.dev to scaffold the component layout then customize. 10. Add Stripe billing: create two products in Stripe dashboard ($79/month Starter, $199/month Pro), add /app/api/stripe/checkout/route.ts using stripe.checkout.sessions.create with price IDs, add /app/api/stripe/webhook/route.ts to update users.stripe_tier on checkout.session.completed. Gate scraping to tier limits (3 products vs unlimited) by checking count of active products per user before allowing new product creation.

Generated

March 30, 2026

Model

claude-haiku-4-5-20251001 · reviewed by Claude Sonnet

← Back to All Ideas