The trigger is usually already sitting in a tool you use: a job marked complete in a scheduling app, an invoice marked paid, a support ticket closed. We wire an agent to watch that event, wait a set number of days (asking immediately after a job tends to get skipped, a few days to a week later tends to land better), and send a short, personalized request through whichever channel the customer already prefers, email or text. The message references real details, the service performed, the date, rather than a generic template, because generic requests get deleted without a second look.
Better versions ask a quick private question first, how did this go, on a simple scale, before asking for a public review. Good answers get pointed straight to Google, Yelp, or whichever platform matters most for that business, often with the review box pre-filled or one tap away. Middling or bad answers get routed to a person instead of a review site, so the business hears about a problem before the internet does. If there's no response at all, the system sends one follow-up and then stops. It does not keep asking.
This only works as well as the completion signal it's watching. If jobs get marked done in three different places, or someone forgets to close the ticket, the trigger never fires and nobody gets asked. It also can't manufacture goodwill: if the work itself was mediocre, automating the ask just automates the silence, or surfaces complaints faster than before. Some review platforms also limit or block direct API posting, so the system can prompt and pre-fill but a person may still need to click submit. Before automating this, look at how consistently 'job done' actually gets recorded today. That's usually the real gap, not the wording of the request.