Skip to content

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. 1

    Ingest reviews

    ingest_reviews()

    Public App Store and Google Play reviews for fintech apps such as Groww, INDMoney and Kuvera.

  2. 2

    Scrub PII

    scrub_pii()

    Personal data is removed before any text reaches a model, and prompts are hardened against injection.

  3. 3

    Cluster themes

    cluster_themes()

    Embeddings group thousands of reviews into the themes users keep raising.

  4. 4

    Draft the report

    draft_report()

    Llama 3.3 on Groq writes the weekly insight report, with retries when the API rate-limits.

  5. 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. 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.

Email me