Weekly
Get a weekly NPS read-out by survey
Each Monday you get last week's response count and average score for every survey.
- Runs
- Weekly
- Apps
- Qualtrics
- AI
- Not needed
- Access
- API permission
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9am, email me last week's response count and average NPS for each of my active Qualtrics surveys.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A survey owner in operations or customer success is asked every Monday how the surveys did last week. Answering means logging into Qualtrics, exporting responses for a date range, pasting them into a spreadsheet and working out the count and the average score for each survey. It takes half an hour and is often skipped when the week is busy.
Each week, ClickRuntime exports the last week's responses from Qualtrics, calculates the number of responses and the average score for each survey, and emails you a compact table. The date range is the same every time, so each week lines up with the previous one and trends are obvious at a glance.
People who run several surveys at once, such as onboarding, support and renewal, get the most from seeing them all in one message.
What you get out of it
Monday questions are answered before they are asked
The numbers arrive in your inbox ready to forward. When a manager asks how the surveys are doing, the answer is already written, with counts and averages for each survey.
Response rates show survey fatigue
A count that drops from 120 to 40 responses in a few weeks tells you something changed, such as a broken link or an email landing in spam. Weekly counts make that visible far sooner than a quarterly review.
Score movement is easy to compare
Averages for each survey are listed in the same layout every week. A satisfaction score falling from 4.4 to 4.0 is noticed by eye, without building a chart or remembering last week's number.
The export step is gone
Date-range exports are fiddly: wrong ranges, missing columns, a forgotten timezone. Automating the pull gives consistent windows week after week, so differences in the numbers reflect customers, not mistakes in how the data was exported.
Stakeholders get a standing update
Forwarding the same email to leadership each week builds a habit of looking at customer feedback. That makes survey work visible, which helps justify the time spent running the surveys in the first place.
How it works
What happens, step by step
Every Monday, ClickRuntime exports last week's responses from each of your Qualtrics surveys.
It counts the responses and works out the NPS for each survey.
You get one email listing every survey with its response count and score.
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
- Run it at a different time, more or less often, or only on weekdays
- 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 datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, notify
DATACENTER = "iad1"
NPS_QUESTION = "QID1"
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
def export(survey_id, since):
job = qx("POST", f"surveys/{survey_id}/export-responses",
json={"format": "json", "compress": True, "startDate": since}).json()["result"]
while (prog := qx("GET", f"surveys/{survey_id}/export-responses/{job['progressId']}").json()["result"])["status"] != "complete":
time.sleep(2)
zf = zipfile.ZipFile(io.BytesIO(qx("GET", f"surveys/{survey_id}/export-responses/{prog['fileId']}/file").content))
return json.loads(zf.read(zf.namelist()[0]))["responses"]
@on_trigger
def run(event):
since = (datetime.now(timezone.utc) - timedelta(days=7)).strftime("%Y-%m-%dT%H:%M:%SZ")
surveys = [s for s in qx("GET", "surveys").json()["result"]["elements"] if s["isActive"]]
lines = []
for s in surveys:
scores = [int(r["values"][NPS_QUESTION]) for r in export(s["id"], since) if NPS_QUESTION in r["values"]]
nps = round(100 * (sum(x >= 9 for x in scores) - sum(x <= 6 for x in scores)) / len(scores)) if scores else None
lines.append(f"{s['name']}: {len(scores)} responses, NPS {nps if nps is not None else '-'}")
notify.email_me("Qualtrics: last week", "\n".join(lines))
return {"surveys": len(lines)}FAQ
Common questions
Which date range does the summary use?
What does the average score refer to?
Can I get the summary for only some of my surveys?
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
Share new Qualtrics responses in Slack
Your team sees fresh survey responses in their channel within about 15 minutes of submission.
See how it worksGet 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 worksKnow the moment your website goes down
Your team hears in Slack when the site stops responding or slows down, and again when it's back.
See how it worksKeep exploring
Set up “Get a weekly NPS read-out by survey” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.