Collects as they arrive, acts daily
Ask customers for a review by text after each job
Once a job is done, the customer gets one polite text with your review link, a couple of hours later.
- Runs
- Collects as they arrive, acts daily
- Apps
- Twilio
- AI
- Not needed
- Access
- write
Send this to your assistant
Create a ClickRuntime automation: when my job app posts 'job done' with the customer's phone to this link, text them our Google review link 2 hours later, never after 8pm, and only once per customer.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Happy customers rarely leave reviews on their own, which is why a trade business with excellent work can still have only eight Google reviews and lose out to a competitor with fifty. Asking in person is awkward, and a follow-up message sent by hand a week later usually does not happen, because the electrician is already on the next job.
When you record a finished job, this stores it with the customer's phone number. After a delay you choose, such as two hours or the next morning, and outside your quiet hours, it sends one text with your Google review link. It then marks the number as asked, so the same person is never asked twice.
It works for plumbers, cleaners, dentists, installers and anyone whose work ends with a clear finishing moment.
What you get out of it
More reviews from satisfied customers
A text sent while the work is fresh gets far more responses than a request weeks later. A steady flow of new reviews improves how you rank in local search and how you look to buyers.
Asked at the right moment
The delay lets the customer enjoy the result first. A message right as the van leaves the driveway feels pushy, while one a couple of hours later arrives when they are pleased.
One request per customer
Marking each phone number as asked prevents repeat messages. Customers who have already been asked are never nagged again, which protects the goodwill you have just earned. You keep their goodwill and still collect the review.
Consistency without effort
Jobs get a follow-up whether the owner is busy, away or sick. Reviews stop depending on someone's memory, so the numbers grow steadily rather than in the occasional burst after a reminder.
Quiet hours are respected
A customer who finishes a late job is texted the next morning instead. That avoids annoying people and reduces the chance that a review request is ignored or marked as unwanted.
How it works
What happens, step by step
When a job is marked done, ClickRuntime saves the customer's name and number.
A couple of hours later, and never during quiet hours, it texts them a polite request with your review link.
Each number is only asked once, so repeat customers don't get pestered.
Before it runs live
- Connect Twilio
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Twilio steps into one automation
Under the hood
The code that runs this automation
import time
from datetime import datetime, timezone
from clickruntime import on_event, on_trigger, credentials, http, state
FROM, REVIEW_LINK, DELAY = "+447700900000", "https://g.page/r/northwind/review", 2 * 3600
@on_event
def job_done(event):
jobs = state.get("jobs") or []
jobs.append({"phone": event.json["phone"], "name": event.json["name"], "at": time.time()})
state.set("jobs", jobs)
return {"queued": len(jobs)}
@on_trigger
def send_due(event):
if not 9 <= datetime.now(timezone.utc).hour < 20:
return {"skipped": "quiet hours"}
jobs, asked = state.get("jobs") or [], set(state.get("asked") or [])
sid, pending, sent = credentials.secret("TWILIO_ACCOUNT_SID"), [], 0
for j in jobs:
if time.time() - j["at"] < DELAY:
pending.append(j)
elif j["phone"] not in asked:
http.post(f"https://api.twilio.com/2010-04-01/Accounts/{sid}/Messages.json", auth=(sid, credentials.secret("TWILIO_AUTH_TOKEN")),
data={"To": j["phone"], "From": FROM, "Body": f"Hi {j['name']}, thanks for choosing Northwind! Would you leave us a quick review? {REVIEW_LINK}"})
asked.add(j["phone"])
sent += 1
state.set("jobs", pending)
state.set("asked", list(asked))
return {"sent": sent}FAQ
Common questions
Where does the review link come from?
What if a customer had a bad experience?
How does it know a job is done?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Follow up on quotes that get no reply
Customers who haven't answered your quote get two friendly nudges by text, and you hear if they never reply.
See how it worksText clients a booking confirmation and reminders
Clients get an SMS when they book, plus reminders the day before and shortly before, never during quiet hours.
See how it worksGet a text when your form or app reports something
A new form entry, order or failed job sends a short SMS to your phone with the details that matter.
See how it worksKeep exploring
Set up “Ask customers for a review by text after each job” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.