Every 15 minutes
Share new Qualtrics responses in Slack
Your team sees fresh survey responses in their channel within about 15 minutes of submission.
- Runs
- Every 15 minutes
- Apps
- Qualtrics
- AI
- Not needed
- Access
- API permission on the brand
Send this to your assistant
Create a ClickRuntime automation: every 15 minutes, check my Qualtrics "Store visit feedback" survey for new responses and post each one's score and comment to #cx-feedback in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Qualtrics surveys collect answers all week, but the people who should read them are in Slack, not in Qualtrics. A product manager running a feedback survey after a release checks the Responses tab when they remember, which might be Thursday, and a respondent describing a serious bug has been waiting since Monday for anyone to notice.
Every 15 minutes, ClickRuntime asks Qualtrics for any responses recorded since the last one it saw, posts a short summary of each to the Slack channel you pick, and saves the ID of the newest response so nothing is posted twice. Quiet periods produce no messages at all.
It is a good fit for launch feedback, post-support surveys and event surveys, where the team wants to read answers while the context is still fresh.
What you get out of it
The team reads feedback while it matters
A survey answer read the same day can lead to a quick fix or a thank-you reply. The same answer read the following week usually only becomes a line in a report.
Everyone sees the same responses
Posting to a shared channel means designers, support and product all read the same words. That avoids the common situation where one person holds the export and summarizes it differently for each group.
No one needs Qualtrics access
Many teammates lack a Qualtrics license. A Slack summary gives them the answers without seat costs or training, and the full response stays in Qualtrics for whoever needs the details.
Nothing is posted twice or skipped
Saving the last response ID means each answer appears exactly once, even if a check runs late. You get a reliable stream instead of an occasional batch that might overlap or leave gaps.
Urgent problems stand out in the stream
A respondent reporting a billing error appears among the other answers within a quarter hour. Someone can reply or open a ticket straight from the thread, rather than discovering the complaint in a monthly summary.
How it works
What happens, step by step
Every 15 minutes, ClickRuntime checks your Qualtrics survey for responses received since its last check.
Each new response is posted to your Slack channel with its score and the written comment.
It remembers the last response it posted, so nothing is shared twice.
Before it runs live
- Connect Qualtrics
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
- 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 Qualtrics steps into one automation
Under the hood
The code that runs this automation
import io, json, time, zipfile
from clickruntime import on_trigger, credentials, http, state, notify, report_fetched
DATACENTER = "iad1"
SURVEY_ID = "SV_abc123XYZ"
def qx(method, path, **kw):
resp = http.request(method, f"https://{DATACENTER}.qualtrics.com/API/v3/{path}",
headers={"X-API-TOKEN": credentials.secret("QUALTRICS_API_TOKEN")}, **kw)
resp.raise_for_status()
return resp
@on_trigger
def run(event):
token = state.get("token")
body = {"format": "json", "compress": True, "allowContinuation": True}
if token:
body = {"format": "json", "compress": True, "continuationToken": token}
job = qx("POST", f"surveys/{SURVEY_ID}/export-responses", json=body).json()["result"]
while (prog := qx("GET", f"surveys/{SURVEY_ID}/export-responses/{job['progressId']}").json()["result"])["status"] != "complete":
time.sleep(2)
raw = qx("GET", f"surveys/{SURVEY_ID}/export-responses/{prog['fileId']}/file").content
zf = zipfile.ZipFile(io.BytesIO(raw))
responses = json.loads(zf.read(zf.namelist()[0]))["responses"]
report_fetched(len(responses))
if not responses:
return {"summary": "Nothing new"}
for r in responses:
v = r["values"]
notify.slack(f"Store visit feedback: {v.get('QID1', '?')}/10\n> {v.get('QID2_TEXT') or '(no comment)'}",
channel="#cx-feedback")
state.set("token", prog.get("continuationToken"))
return {"posted": len(responses)}FAQ
Common questions
Does a 15-minute delay matter for survey responses?
What does each Slack message contain?
Will it post responses that were already in Qualtrics before I set it up?
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
Get an email when a customer scores you 6 or lower
You hear about each detractor right after they answer, with their comment, so you can follow up the same day.
See how it worksGet a weekly NPS read-out by survey
Each Monday you get last week's response count and average score for every survey.
See how it worksSee new job listings as they're posted
Jobs that match your keywords show up in a Slack channel, each one only once.
See how it worksKeep exploring
Set up “Share new Qualtrics responses in Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.