Skip to content

Every 5 minutes

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.

Runs
Every 5 minutes
Apps
Google Business Profile, Slack
AI
Not needed
Access
read+write (business.manage); chat:write, channels:history, groups:history

Send this to your assistant

Create a ClickRuntime automation: every 5 minutes, post new Google reviews for Rosa's Bakery to #reviews in Slack, and when someone replies in a review's thread starting with "reply:", publish that text as our reply on Google and confirm in the thread.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Small teams often discuss bad reviews in Slack anyway: someone pastes the review, the manager suggests wording, and then someone has to log into Google to post it. The last step is the one that gets forgotten.

This automation posts each new Google review to a Slack channel and watches its thread. When someone writes a reply starting with "reply:", it is published on Google as the owner reply and a tick is added to the thread.

Discussion and the final answer live in one place, and replies go out within minutes of being agreed.

What you get out of it

  • Answer without logging in

    Replies go from Slack straight to Google.

  • Team can discuss first

    Only messages starting with "reply:" are published.

  • Visible confirmation

    A tick in the thread shows the reply is live.

  • Fast responses

    Agreed replies are posted within 5 minutes.

  • Your own Slack app

    It uses your Slack connection and standard message permissions.

How it works

What happens, step by step

  1. Every 5 minutes, ClickRuntime checks your Google Business Profile for new reviews and posts each one to #reviews.

  2. It also reads the threads under those messages in Slack.

  3. When someone writes a thread reply that starts with "reply:", that text is published as your reply on Google.

  4. A confirmation is added to the thread so everyone can see the reply is live.

Before it runs live

  • Connect Google Business Profile
  • Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)

What you get

RunsEvery 5 minutes
Reply to Google reviews from a Slack threadtoday, 9:00Succeeded
Slack · #reviews★★☆☆☆ from Jamie R. Waited 20 minutes for a coffee, croissant was stale. Reply in this thread with "reply: your text" to answer on Google. └ Maya: reply: Sorry Jamie, Saturday mornings got the better of us. Next coffee is on us, just mention this review. └ :white_check_mark: Reply posted on Google.

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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 Google Sheets
  • Combine it with other Google Business Profile and Slack steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
reply_to_google_reviews_from_a_slack_thread.pyexample
from clickruntime import on_trigger, credentials, http, notify, state

LOCATION = "accounts/1234567890/locations/9876543210"  # Rosa's Bakery
CHANNEL_ID = "C0123REVIEWS"  # #reviews
STARS = {"ONE": 1, "TWO": 2, "THREE": 3, "FOUR": 4, "FIVE": 5}

def slack(method, **params):
    r = http.post(f"https://slack.com/api/{method}", json=params,
                  headers={"Authorization": f"Bearer {credentials.connection('slack', 'work')}"}) if method == "chat.postMessage" \
        else http.get(f"https://slack.com/api/{method}", params=params,
                      headers={"Authorization": f"Bearer {credentials.connection('slack', 'work')}"})
    return r.json()

@on_trigger
def run(event):
    g = {"Authorization": f"Bearer {credentials.connection('google', 'work')}"}
    threads = state.get("threads") or {}  # slack ts -> review name
    last = state.get("last_create") or ""
    reviews = http.get(f"https://mybusiness.googleapis.com/v4/{LOCATION}/reviews",
                       params={"orderBy": "updateTime desc"}, headers=g).json().get("reviews", [])
    for r in sorted((r for r in reviews if r["createTime"] > last), key=lambda r: r["createTime"]):
        s = STARS[r["starRating"]]
        msg = slack("chat.postMessage", channel=CHANNEL_ID,
                    text=f"{'★' * s}{'☆' * (5 - s)} from {r['reviewer']['displayName']}\n{r.get('comment', '(no text)')}\n"
                         "Reply in this thread with \"reply: your text\" to answer on Google.")
        threads[msg["ts"]] = r["name"]
        last = max(last, r["createTime"])
    posted = 0
    for ts, review in list(threads.items()):
        replies = slack("conversations.replies", channel=CHANNEL_ID, ts=ts).get("messages", [])[1:]
        answer = next((m["text"][6:].strip() for m in replies if m.get("text", "").lower().startswith("reply:")), None)
        if answer:
            http.put(f"https://mybusiness.googleapis.com/v4/{review}/reply", json={"comment": answer},
                     headers=g).raise_for_status()
            slack("chat.postMessage", channel=CHANNEL_ID, thread_ts=ts, text=":white_check_mark: Reply posted on Google.")
            del threads[ts]
            posted += 1
    state.set("threads", dict(list(threads.items())[-100:]))
    state.set("last_create", last)
    return {"replies_posted": posted}

FAQ

Common questions

Why does the reply need to start with "reply:"?
So the team can discuss a review in the thread without anything going to Google by accident. Only a message that starts with "reply:" is published.
Can a reply be edited after it's posted?
Yes. Google keeps one owner reply per review, so writing a new "reply:" message in the same thread replaces it, if you ask your assistant to keep watching answered threads. By default a thread stops being watched once its reply is posted.
Which Slack permissions does it use?
Your own Slack app needs chat:write to post reviews and confirmations, and channels:history (or groups:history for a private channel) to read the thread replies.
What permissions does it need?
read+write (business.manage); chat:write, channels:history, groups:history. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Reply to Google reviews from a Slack thread” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.