Skip to content

Every 30 minutes

Tag customer feedback by sentiment and topic

Every feedback row gets a sentiment and topic, and the negative ones are flagged to you.

Runs
Every 30 minutes
Apps
Google Sheets
AI
Yes, uses the built-in AI allowance
Access
read+write

Send this to your assistant

Create a ClickRuntime automation: every 30 minutes, mark new rows in my Feedback sheet as positive, neutral or negative with a topic, and send me the negative ones 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

A restaurant group collects reviews and comment-card responses in a Google Sheet. Reading them all takes a manager an evening, so she skims, and a pattern like repeated complaints about slow service on Saturdays slips by. Meanwhile an angry review about a food safety concern sits in row 143 for a week, because nothing marks it out among forty friendly ones.

Every 30 minutes, ClickRuntime reads the new rows and asks ClickRuntime's built-in AI to label each one with a sentiment, such as positive, neutral or negative, and a topic such as food, service, price or cleanliness. The labels are written back to the row, and negative ones are flagged in Slack for someone to look at.

Hospitality, retail, SaaS and event teams use it to turn piles of comments into something they can filter.

What you get out of it

  • Serious complaints are seen quickly

    A negative review about hygiene or safety is posted to Slack within half an hour. The manager can respond the same day, before it spreads online or leads to a formal complaint.

  • Patterns appear in the data

    With sentiment and topic columns, a pivot table shows that service complaints cluster on weekends. Spotting that pattern points to a scheduling fix that no single comment would reveal. That pattern would never show in a skim of the comments.

  • Praise is easy to find too

    Positive rows are labeled with their topic, so you can pull out good quotes for the website or recognize a team member by name. Positive feedback becomes something you use instead of something you skim.

  • Less time reading, more time acting

    Instead of an evening reading every comment, you review the flagged ones and the summary counts. The time shifts from sorting feedback to responding to it. Managers can reply to guests while the visit is recent.

  • Consistent labels across all rows

    Every comment is judged against the same label set, regardless of who reads it. Trends across months are comparable, as nothing changes with the mood of the person doing the reading.

How it works

What happens, step by step

  1. Every 30 minutes ClickRuntime reads your customer feedback Google Sheet for rows that haven't been tagged.

  2. AI reads each comment and tags it as positive, neutral or negative, with a topic such as billing.

  3. The tags are written back into the sheet.

  4. Negative feedback is also posted to your Slack channel, with the customer's email and their comment.

Before it runs live

  • Connect your Google Sheets account and pick the spreadsheets it may use

What you get

RunsEvery 30 minutes
Tag customer feedback by sentiment and topictoday, 9:00Succeeded
Slack · #feedbackNegative feedback (billing) from ops@acme.example: > We were charged twice this month and support hasn't replied.

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
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Slack
  • Combine it with other Google Sheets 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.
ai_sentiment_and_category_tagging_of_feedback_rows.pyexample
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, report_fetched, credentials, ai, notify

SHEET_ID = "your-spreadsheet-id"
SCHEMA = {"type": "object", "properties": {"sentiment": {"type": "string", "enum": ["positive", "neutral", "negative"]},
          "topic": {"type": "string"}}, "required": ["sentiment", "topic"]}

@on_trigger
def run(event):
    sheets = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets()
    rows = sheets.values().get(spreadsheetId=SHEET_ID, range="Feedback!A2:D").execute().get("values", [])
    todo = [(i, r) for i, r in enumerate(rows, start=2) if len(r) > 1 and (len(r) < 3 or not r[2])]
    report_fetched(len(todo))
    if not todo:
        return {"summary": "Nothing new"}
    for i, row in todo[:40]:
        d = ai.generate("Classify the sentiment and a short topic of this feedback:\n" + row[1][:1500],
                        json_schema=SCHEMA, max_output_tokens=40).json
        sheets.values().update(spreadsheetId=SHEET_ID, range=f"Feedback!C{i}:D{i}", valueInputOption="RAW",
                               body={"values": [[d["sentiment"], d["topic"]]]}).execute()
        if d["sentiment"] == "negative":
            notify.slack(f"Negative feedback ({d['topic']}) from {row[0]}:\n> {row[1][:300]}", channel="#feedback")
    return {"tagged": min(len(todo), 40)}

FAQ

Common questions

How accurate is the sentiment label?
It is reliable for clear comments, and less so for sarcasm, mixed opinions or very short remarks. Reviewing the labels on a sample of rows in the first week tells you how much to trust it for your type of feedback, and what to add to the instructions.
Can I set my own topics?
Yes. List the topics that matter to your business, such as food, service, price, cleanliness and booking, and the AI picks from them. A row can also carry two topics if you allow it, which suits comments about both food and service.
Does it work with comments in other languages?
Generally yes. The AI can read many languages and assign the same sentiment and topic labels in your chosen language, so mixed-language feedback can be analyzed in a single column. Check a few results in each language you receive before relying on them.
What permissions does it need?
read+write. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly 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 “Tag customer feedback by sentiment and topic” from your assistant

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