Which case is for you?
Case A – for teams on Slack: the worst ratings ping your Slack channel within seconds.
Case B – for companies on Microsoft 365: the same alert lands in a Microsoft Teams channel.
A customer who leaves your survey with the worst rating is the one most likely to write a bad public review next. With this setup, your team sees that rating in Slack or Microsoft Teams within seconds, with the comment and the order, so someone can reach out first.
This is the message your team gets in Slack in Case A:
And this is the same alert in a Microsoft Teams channel in Case B:
How this works. Survio sends each completed response to a webhook URL. An automation tool (we use n8n in this guide) receives it, checks whether it's one of the worst ratings and, if so, posts a message to your team's channel. Everything else is ignored.
New to webhooks in Survio? Start with Webhooks: send responses to your other tools in real time, then come back here.
What you'll build
In both cases, the alarm goes off only for the worst responses: a rating of 1 out of 5 or the answer Dissatisfied. To hear about every unhappy customer, see the Retention playbook.
At a glance | Case A: Slack | Case B: Microsoft Teams |
Result | A message in your team's Slack channel | A message in your team's Teams channel |
Tools | Survio, n8n, Slack | Survio, n8n, Microsoft Teams |
Best for | A small team that already talks in Slack | A company on Microsoft 365 |
Don't paste a Slack or Teams webhook URL straight into Survio. Slack incoming webhooks and Teams workflow webhooks accept only their own message format. Survio's deliveries would be rejected, retried for about a day, and after 5 days of failures Survio switches the webhook off. Always put n8n in between.
Before you start
A Survio survey on a paid plan. Webhooks aren't available on the Free plan, and each plan allows a set number of webhooks per survey (see the webhooks article).
An n8n account, n8n Cloud or self-hosted.
Case A: a Slack workspace and a channel for the alerts, for example
#customer-alerts. Case B: Microsoft Teams with a work or school Microsoft 365 account, and a team with a channel for the alerts.
In this guide we use a short customer satisfaction survey: a star rating, an "Overall, how satisfied are you?" choice question, a "How did you shop with us this time?" choice question, an open comment and an optional e-mail question.
You don't need to know who answered. The alert works without it and still shows the rating and the comment, so your team can spot the problem. If your survey has an e-mail question or URL parameters, the alert also shows the customer's contact.
Step 1 — Create the webhook in n8n
In n8n, create a new workflow and add a Webhook node as the trigger.
Set HTTP Method to POST.
Switch to the Production URL tab and copy the address.
Click Publish. The production URL only accepts deliveries once the workflow is published.
Use the Production URL, not the Test URL. The Test URL only listens while the editor is waiting for a test event, so Survio's deliveries fail as soon as you close it.
Step 2 — Connect the survey in Survio
Open your survey and go to Get responses.
In the left sidebar under Automations & Integrations, select Webhooks and click + Add a webhook.
Paste the n8n Production URL into Webhook URL and click Save webhook. The webhook is switched on straight away.
Step 3 — Send a test response and find your question ids
Open your survey through its normal link and submit one complete response with a rating of 1. Survio sends only completed responses, so click through to the end.
In n8n, open the Executions tab. The delivery arrives within a few seconds.
Open the execution and click the Webhook node. Expand
body, thendata, thenanswers, and write down the ids of the rating, satisfaction, channel, comment and e-mail questions.
Case A — Alert your team in Slack
Two steps follow the webhook: Worst rating? lets only the worst responses through, and Alert the team in Slack posts the message.
Worst rating?
Add an If node after the Webhook node and rename it to
Worst rating?.Add two conditions and combine them with OR:
Value | Condition | Compare with |
| Number: is equal to | 1 |
| String: is equal to | Dissatisfied |
Replace 90403153 (the rating) and 90403151 (the satisfaction question) with your own ids, and type the answer option exactly as it appears in your survey.
Alert the team in Slack
Add a Slack node to the true output of Worst rating?, rename it to
Alert the team in Slack, and set Resource to Message and Operation to Send.Connect your Slack account. Under Send Message To, choose Channel and pick your alerts channel. The list shows only channels your connected Slack account can see, so join a private channel first.
Keep Message Type on Simple Text Message and write the Message Text. The ready-made workflow below uses the rating, the satisfaction answer, the comment as a quote, and the channel, order and contact on the last line.
Under Options, turn off Include Link to Workflow.
Leave the false output empty. Click Publish again; changes you make after publishing go live only when you publish again.
Case B — Alert your team in Microsoft Teams
Start with the same Worst rating? node as in Case A, then add one step to its true output.
Alert the team in Teams
Add a Microsoft Teams node to the true output of Worst rating?, rename it to
Alert the team in Teams, and set Resource to Channel Message and Operation to Create.Connect Microsoft Teams with a work or school Microsoft 365 account. A personal Microsoft account can't be connected.
Under Team, pick your team, and under Channel, pick your alerts channel. The lists show only teams the connected account is a member of.
Set Content Type to HTML and write the Message. The ready-made workflow below puts the rating and the satisfaction answer in bold, the comment as a quote, and the channel, order and contact on the last line.
Under Options, turn off Include Link to Workflow.
Leave the false output empty and click Publish again.
The alert comes from the account you connected. Teams shows the message under the name of the Microsoft 365 account you connected in n8n.
Get the ready-made workflow
Instead of building Step 1 and your case by hand, start from our workflow. Download the file for your case from the attachments at the end of this article: survio-worst-ratings-to-slack.json for Case A, or survio-worst-ratings-to-teams.json for Case B. Then:
In n8n, create an empty workflow. Open the menu (three dots) next to the workflow name and choose Import, then From file. Pick the file you downloaded.
Open Worst rating? and replace the question ids with your own.
Case A: open Alert the team in Slack, connect Slack, pick your channel and replace the question ids in the message.
Case B: open Alert the team in Teams, connect Microsoft Teams, pick your team and channel, and replace the question ids in the message.
Open Survio Webhook, copy the Production URL into Survio (Step 2) and click Publish.
Test it end to end
Submit a response with a rating of 1. The message appears in your Slack or Teams channel within seconds.
Submit a response with a rating of 2. No message appears; that one belongs to the Retention playbook.
Look at the Executions tab in n8n. Both deliveries are listed; the second stops at Worst rating?.
Troubleshooting
Symptom | Cause | Fix |
Nothing arrives in n8n | The Test URL is in Survio, or the workflow isn't published | Copy the Production URL into Survio and click Publish |
Survio switched the webhook off after a few days | A Slack or Teams webhook URL was pasted into Survio directly, or the URL kept failing | Put the n8n Production URL into Survio and switch the webhook back on |
Your channel isn't in the list in n8n | It's a private channel your connected Slack account isn't a member of | Join the channel in Slack, then reload the list |
Connecting Microsoft Teams in n8n fails with | You signed in with a personal Microsoft account | Connect a work or school Microsoft 365 account |
Your team or channel isn't in the list in Case B | The connected Microsoft 365 account isn't a member of the team | Add the account to the team in Teams, then reload the list |
Every response posts a message | The Slack or Teams node is on the false output, or the conditions are combined with AND | Connect it to the true output and combine the conditions with OR |
A 1-star rating doesn't post a message | Wrong question id, or the answer text differs from the condition | Check the ids and texts against a test response in Executions |
Your latest change has no effect | The workflow is published, but the change isn't (the Publish button shows a dot) | Click Publish again |
Good to know
Survio sends only completed responses, one message per response, within seconds.
Nothing is sent retroactively: not responses from before the webhook existed, and not responses from while it was paused.
A failed delivery is retried up to 8 times over roughly 27 hours, and each attempt waits up to 30 seconds for a reply.
If deliveries fail for 5 days in a row, Survio switches the webhook off and you need to switch it back on.
Pausing a webhook keeps its slot; deleting it is permanent.
Survio doesn't keep a delivery history in the app. The Executions tab in n8n is your log.
Sending responses to webhooks doesn't use up any extra responses from your plan.
Rather have us set it up? On the Webhooks page in Survio, click Get expert setup, tell us what you'd like to happen, and our team will build it, test it and hand you a working webhook.
