✈ Discuss your project
All case studies / AI Assistants & Agents

SaaS collects reviews from 8 platforms and drafts AI responses for each business niche

Industry: SaaS for local businesses: review responsesScale: SaaS founder, multiple locations per ownerFocus: AI assistants and agents
8 platformsreviews collected from them
2 stagesAI first analyzes the review, then writes a response
2 follow-up projectspaid, after delivery of the main version
I need something similar

Before

  • The founder was building an AI review response platform for restaurants and other local businesses
  • One owner can have multiple locations, so multi-location support was needed
  • After launch, the client requested tabs for answered and unanswered reviews and four more platforms

What we built

  • Review collection from eight platforms; Avito uses the official API
  • Two-stage generation: review analysis, then a response tailored to the business niche, whether a restaurant, clinic, or hotel
  • One-click response publishing on Avito via the official API; the other platforms do not provide a publishing API, and the client was told this directly
  • Owner and admin roles, multi-location support, plans and subscriptions with expiration emails
  • Production deployment with Docker Compose on the client's server

How it works

Platforms8 review sources
→
Collectionscheduled, stored in PostgreSQL
→
AnalysisLLM identifies the meaning and tone
→
ResponseLLM tailored to the business niche
→
PublishingAvito via API

Result

  • The main version was accepted and paid for
  • Two follow-up projects were accepted and paid for: tabs and subscriptions, then four new platforms
  • The product runs in production on the client's server

Technology

PythonFastAPIVue 3PostgreSQLAlembicLLM via OpenRouter (Claude Sonnet, DeepSeek)Avito APIResendDocker
What matters in a project like this. The collector returned an empty value both when there was no response and when it failed to read one, so an update could erase responses already found. Keeping the old value when a read returned empty (COALESCE in UPSERT) was tested on a live review.

Have a similar project?

Describe it in two lines in Telegram. We'll explain how we'd approach it, how long it would take, and what it would cost.

Message me on Telegram

Similar case studies