Skip to content

Every 15 minutes

Get alerted about bad satisfaction ratings

When a customer rates a ticket bad, your team sees it with their comment within 15 minutes.

Runs
Every 15 minutes
Apps
Zendesk
AI
Not needed
Access
read

Send this to your assistant

Create a ClickRuntime automation: every 15 minutes, check for new bad satisfaction ratings in Zendesk and post the ticket link and the customer's comment to #support in Slack.

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

Zendesk sends a satisfaction survey after a ticket is solved, and a customer clicks Bad with a comment like I was told it would be fixed Friday and nothing happened. That rating sits in a satisfaction report that nobody opens until the monthly CSAT review. By then the customer has churned, left a public review, or been handed to a different agent who never heard about the complaint.

Every 15 minutes, new satisfaction ratings with a score of bad are checked since the last look. For each one, a message is posted with the ticket link, the agent who handled it and the exact words the customer wrote. Good ratings are ignored, so the channel stays about problems.

Support managers who own CSAT targets and want to reach unhappy customers while the issue is still fresh will get the most from it.

What you get out of it

  • A chance to repair the relationship

    Reaching out within the hour, while the problem is still on the customer's mind, often turns a bad rating into a thank you. Waiting for a monthly review rarely does. That context shapes a better apology and a faster fix.

  • Real feedback in the customer's own words

    The comment travels with the alert, so the manager sees whether the complaint is about the answer, the wait or the product. That shapes the follow-up before anyone replies. Patterns appear after a handful of alerts, not after a full quarter of data.

  • CSAT problems traced to causes

    Seeing each bad rating as it happens makes patterns visible: the same macro, the same agent or the same product area. Coaching can then target the real cause. Each alert is also a coaching opportunity for the agent involved.

  • Public damage gets headed off

    Unhappy customers who feel ignored take their story to review sites and social feeds. A quick personal response reduces the number who do. A reply from a named person feels more sincere than a generic apology sent weeks later.

  • A manager does not have to hunt

    Nobody needs to refresh a satisfaction dashboard during the day. The alert comes to the team, which keeps CSAT on the agenda without adding another report to check. Another benefit is that the CSAT score becomes a number the whole team can influence.

  • Fixing root causes

    Several bad ratings about the same issue point to a product defect, and the alerts give support a way to flag it to engineering with evidence. Over a quarter the thread of alerts shows which problems recur, giving support leaders concrete examples to bring to product and operations.

How it works

What happens, step by step

  1. Every 15 minutes, ClickRuntime checks Zendesk for new satisfaction ratings.

  2. It keeps only the bad ratings received since its last check.

  3. A message goes to your #support Slack channel with the ticket number and the customer's comment, so someone can follow up.

Before it runs live

  • Connect Zendesk

What you get

RunsEvery 15 minutes
Get alerted about bad satisfaction ratingstoday, 9:00Succeeded
Slack · #supportBad rating on #4790: Took 4 days to get a refund for a duplicate charge.

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 Slack
  • Combine it with other Zendesk 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.
bad_satisfaction_rating_alert.pyexample
import time
from clickruntime import on_trigger, http, credentials, notify, state, report_fetched

ZD = "https://yourcompany.zendesk.com/api/v2"
AGENT_EMAIL = "you@yourcompany.com"

def zd(method, path, **kw):
    r = http.request(method, f"{ZD}{path}", auth=(f"{AGENT_EMAIL}/token", credentials.secret("ZENDESK_API_TOKEN")), **kw)
    r.raise_for_status()
    return r.json() if r.content else None

@on_trigger
def run(event):
    since = state.get("since") or int(time.time()) - 900
    ratings = zd("GET", "/satisfaction_ratings.json", params={"score": "bad", "start_time": since})["satisfaction_ratings"]
    report_fetched(len(ratings))
    if not ratings:
        return {"bad": 0}
    for r in ratings:
        notify.slack(f"Bad rating on #{r['ticket_id']}: {r.get('comment') or '(no comment)'}\n"
                     f"https://yourcompany.zendesk.com/agent/tickets/{r['ticket_id']}", channel="#support")
    state.set("since", int(time.time()))
    return {"bad": len(ratings)}

FAQ

Common questions

Does it alert on ratings without a comment?
Yes. The alert fires on the bad score itself. If the customer left no comment, the message simply shows the ticket link and the rating, since the rating alone is reason enough to look. The comment is optional for customers, so some alerts show only the score and a link to the ticket.
Are ratings from customers who changed their mind handled?
The check looks for ratings created since the last run. If a customer later changes a bad rating to good, the earlier alert has already gone out, but the ticket link lets you see the current score.
Is Zendesk's satisfaction rating feature required?
Yes. Customer satisfaction ratings must be enabled on your Zendesk account, and your plan needs to include them. Without surveys going out to customers, there are no ratings to read. Plans that include satisfaction ratings in Zendesk are required for this.
What permissions does it need?
read. 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 “Get alerted about bad satisfaction ratings” from your assistant

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