Case study · AI weekly product review pulse
Groundswell
A multi-agent LangGraph pipeline that reads public App Store and Google Play reviews for fintech apps, clusters them into themes, and delivers a stakeholder-ready weekly report to Google Docs and Gmail.
- real reviews processed in a live end-to-end run
- 3,400+
- of AI-written customer quotes checked against the source review
- 100%
- duplicate reports or emails when a run is repeated
- 0
The problem
Public app reviews tell a product team what users actually feel, but they arrive as an unstructured stream across two stores and nobody has time to read them every week. Summarising them with an LLM adds a new risk: a report that quotes customers who never said those words.
How it works
- 1
Ingest reviews
ingest_reviews()
Public App Store and Google Play reviews for fintech apps such as Groww, INDMoney and Kuvera.
- 2
Scrub PII
scrub_pii()
Personal data is removed before any text reaches a model, and prompts are hardened against injection.
- 3
Cluster themes
cluster_themes()
Embeddings group thousands of reviews into the themes users keep raising.
- 4
Draft the report
draft_report()
Llama 3.3 on Groq writes the weekly insight report, with retries when the API rate-limits.
- 5
Validate quotes
validate_quotes()
Every customer quote is matched against verbatim source text. A quote that doesn't match never reaches the report.
- 6
Deliver
deliver()
A Google Doc report and a Gmail notification, sent once per product per week and logged in PostgreSQL.
Engineering decisions
Treat the model's quotes as claims, not facts
A quote-validation node sits between drafting and delivery. Every customer quote in the draft is checked against the verbatim review text before the report goes out.
Make re-runs boring
Each run is unique per product and week. Running the pipeline twice doesn't create a second report or send a second email, and every run is written to an audit log in PostgreSQL.
Assume the input is hostile
Reviews are untrusted public input. The pipeline scrubs PII, hardens prompts against injection, and retries on LLM rate limits instead of failing the run.
Keep integrations at arm's length
Google Docs and Gmail sit in a standalone microservice behind OAuth 2.0, separate from the FastAPI backend and the Next.js dashboard.
What I built
- Multi-agent LangGraph pipeline: ingest reviews, cluster them into themes with embeddings, and write a weekly insight report with an LLM.
- A dedicated quote-validation node checks every AI-written customer quote against the verbatim review before it can reach the report.
- Idempotent, fully auditable runs: one run per product per week, so repeating a run never sends a duplicate report or email.
- PII scrubbing, prompt-injection hardening and retry logic for LLM rate limits, because the input is untrusted public text.
- Full stack: FastAPI with JWT auth, a Next.js App Router dashboard with NextAuth, PostgreSQL for state and audit logs, and a standalone microservice for Google Docs and Gmail over OAuth 2.0.
Outcome
Verified end to end against live data: the running system scraped and processed 3,400+ real App Store and Play Store reviews for a production fintech app, then generated and delivered an actual Google Doc report and Gmail notification.