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.
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
Every 30 minutes ClickRuntime reads your customer feedback Google Sheet for rows that haven't been tagged.
AI reads each comment and tags it as positive, neutral or negative, with a topic such as billing.
The tags are written back into the sheet.
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
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 Slack
- Combine it with other Google Sheets steps into one automation
Under the hood
The code that runs this automation
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?
Can I set my own topics?
Does it work with comments in other languages?
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
Score new leads in your sheet
New leads get a score from 1 to 10 and a reason, so you know who to call first.
See how it worksFill a category column for new rows
New rows get a category filled in from the text in another column.
See how it worksGet notified about new rows
Whenever a row is added to your sheet, you see it in Slack within minutes.
See how it worksKeep exploring
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.