Every hour
Approve replies to Google reviews from Slack
Each new Google review is posted in Slack with its mood and a draft reply, and the reply goes live when you approve it.
- Runs
- Every hour
- Apps
- Google Business Profile, Slack
- AI
- Yes, uses the built-in AI allowance
- Access
- GBP manage; Slack chat:write
Send this to your assistant
Create a ClickRuntime automation: every hour, post each new Google review to #reviews with its sentiment and a draft reply. When someone reacts with a tick, publish that reply on Google.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Review replies are often written by whoever has the login, when they have time. Other people in the team never see the reviews, and an angry one can sit for days before anyone answers.
Multi-person teams such as restaurants, clinics and agencies managing client profiles use it to share every review with the team, agree on the reply in Slack and publish it without anyone logging in to Google.
What you get out of it
The whole team sees every review
Reviews reach the channel where staff already talk, so praise and complaints are shared the same day.
Replies get a second pair of eyes
Nothing is published until someone approves it, which matters most for unhappy customers.
No Google login needed
Approving takes one reaction in Slack. Only the automation needs access to the Business Profile.
Mood at a glance
A short sentiment label shows which reviews need a careful answer first.
How it works
What happens, step by step
Every hour, ClickRuntime checks your Business Profile for reviews it has not posted to Slack yet.
AI labels the review's mood and drafts a reply.
The review, mood and draft are posted to your Slack channel.
On each check, drafts that someone has approved with a ✅ reaction are published on Google.
Before it runs live
- Connect Google Business Profile
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Google Business Profile and Slack steps into one automation
Under the hood
The code that runs this automation
from slack_sdk import WebClient
from clickruntime import on_trigger, credentials, http, state, ai
LOCATION = "accounts/1234567890/locations/9876543210"
CHANNEL = "C0123REVIEWS"
SCHEMA = {"type": "object", "properties": {"mood": {"type": "string"}, "reply": {"type": "string"}}}
@on_trigger
def run(event):
auth = {"Authorization": f"Bearer {credentials.connection('google', 'work')}"}
slack, pending = WebClient(token=credentials.connection("slack", "work")), state.get("pending") or {}
for ts, p in list(pending.items()):
msg = slack.reactions_get(channel=CHANNEL, timestamp=ts)["message"]
if any(r["name"] == "white_check_mark" for r in msg.get("reactions", [])):
http.put(f"https://mybusiness.googleapis.com/v4/{p['review']}/reply", headers=auth, json={"comment": p["reply"]})
slack.chat_postMessage(channel=CHANNEL, thread_ts=ts, text="Reply published on Google.")
del pending[ts]
reviews = http.get(f"https://mybusiness.googleapis.com/v4/{LOCATION}/reviews", headers=auth).json().get("reviews", [])
last = state.get("last") or ""
for r in [r for r in reviews if r["createTime"] > last and "reviewReply" not in r]:
out = ai.generate(f"Label the mood (positive, mixed, negative) and draft a short, kind reply from Acme Dental:\n"
f"{r.get('comment', '')[:1500]}", json_schema=SCHEMA, max_output_tokens=200).json
posted = slack.chat_postMessage(channel=CHANNEL, text=f"*{r['starRating'].title()} stars* · {out['mood']} · "
f"{r['reviewer']['displayName']}\n>{r.get('comment', '(no text)')}\nDraft: {out['reply']}\nReact ✅ to publish.")
pending[posted["ts"]] = {"review": r["name"], "reply": out["reply"]}
last = max(last, r["createTime"])
state.set("pending", pending)
state.set("last", last)
return {"pending": len(pending)}FAQ
Common questions
How do I approve a reply?
Can I change the draft before it is posted?
How soon is an approved reply published?
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
Reply to Google reviews from a Slack thread
New Google reviews are posted to a Slack channel, and a reply typed in the review's thread is published as the owner reply on Google within 5 minutes.
See how it worksGet a Slack alert when a Google review is edited
Every 30 minutes, Google reviews are checked for edits, and a Slack message shows the old and new star rating and text whenever a customer changes their review.
See how it worksShare weekly Business Profile results in Slack
Every Monday the team sees last week's profile views, calls, direction requests and new reviews in Slack, with a short summary.
See how it worksKeep exploring
Set up “Approve replies to Google reviews from Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.