Most "AI review reply" tools are template systems wearing an AI label — pick a star rating, swap in a name, done. Building something that actually reads and responds to a review is a different problem, and it surfaces some interesting engineering constraints worth writing about.
Detection isn't the hard part, but it's not trivial either
Google's Business Profile API doesn't push new reviews to you — you have to poll. We poll every five minutes per connected business, which sounds simple until you're doing it across hundreds of businesses without hitting rate limits or burning unnecessary compute. The fix ended up being straightforward: stagger polling windows per business rather than firing every job on the same five-minute tick, and skip businesses with zero review velocity more aggressively than active ones.
The actual hard part: constrained generation
Getting an LLM (we use Gemini) to write a review reply is easy. Getting it to sound like your business, consistently, across hundreds of reviews, is not. Two reviews with identical sentiment should not read like they came from two different companies depending on which one hit the API first.
The approach that worked was treating brand voice as a hard constraint injected into every prompt — formality level, personality traits, vocabulary preferences (do you say "customers" or "guests"?) — rather than a one-time style example the model loosely imitates. Style examples drift over a long context; explicit constraints don't.
The second constraint is specificity. A response that doesn't reference anything the reviewer actually said reads as generic, and customers notice. So entity extraction happens before generation — staff names, specific products, mentioned details — and those get fed back into the prompt as anchors the response has to touch.
Sentiment analysis is where the edge cases live
"The food was not bad" is mildly positive. "Great job making me wait an hour for cold food" is very negative despite containing the word "great." Naive keyword scoring gets both of these wrong. What actually matters for response generation isn't a single sentiment score — it's understanding proportion in mixed reviews (three sentences of praise, one sentence of a minor complaint should produce a response weighted toward the praise) and catching sarcasm patterns that keyword approaches miss entirely.
Where we deliberately don't let the AI run free
Positive reviews (4–5 stars) post automatically. Anything 1–3 stars gets drafted immediately but held for a one-click human approval before it goes live. This wasn't a modeling limitation — it's a deliberate design choice. A negative review response is the one place where a subtly wrong tone does real reputational damage, and no business owner wants to discover their AI publicly apologized for something inaccurately or over-apologized for something minor. Fast draft, human veto, still faster than writing it from scratch.
We've been building this as TopTierClass (https://toptierclass.com?utm_source=devto&utm_medium=organic&utm_campaign=content) — happy to go deeper on any part of this if anyone's working on something similar.(https://toptierclass.com?utm_source=devto&utm_medium=organic&utm_campaign=content) — happy to go deeper on any part of this if anyone's working on something similar.