Skip to main content
Lifetime license included with every purchase
n8n workflowsCSAT surveyscustomer supportfeedback automation

How to Automate CSAT Surveys with n8n on Any Stack

Build n8n CSAT survey automation that fires on ticket resolution, computes the satisfaction score, and escalates low ratings, with no Freshdesk required.

Nn8n Marketplace Team·August 20, 2026·Updated August 20, 2026·8 min read

A support ticket closes and the experience evaporates. Nobody asks the customer whether the fix actually helped, so the team measures resolution time and assumes that's satisfaction. It isn't. n8n CSAT survey automation asks the one question that matters, did we actually help?, while the interaction is still fresh, then turns the answers into a number you can act on.

The template that ranks for this does the easy 80% and stops. The n8n library's Freshdesk CSAT workflow fires a survey on resolution and logs raw rows to a sheet. Guides like Wednesday's customer support post and tooling roundups like Simplesat's describe the same capture. What's missing every time: the actual CSAT math, the low-score escalation gate, and any way to run this if you're not on Freshdesk.

This post fills those three holes, and it doesn't assume you bought a help desk.

Why resolution time lies

Fast resolution feels like good support. It often isn't. A ticket closed in four minutes with a wrong answer reopens as a furious follow-up, and your metrics still counted the first close as a win. CSAT is the corrective: it asks the customer, not the clock.

The trap most teams fall into is collecting ratings and never computing the score. Rows pile up in a sheet, someone exports them monthly, and the trend is always a quarter stale. The fix is to treat CSAT as a live number that updates on every response, plus an interrupt that fires the moment a rating comes in low. The good scores feed the trend. The bad ones grab a human.

What you can automate in a CSAT loop

  • A survey that fires automatically when a ticket flips to Resolved
  • Personalized email with the ticket reference and a one-click rating link
  • Duplicate suppression so a customer isn't surveyed twice for one ticket
  • A Form trigger that captures the 1-5 rating and an optional comment
  • The rolling CSAT score, recomputed on every response
  • Immediate Slack escalation when a rating lands at 1 or 2
  • A Google Sheets log that doubles as the data source for the score

The model only shows up if you want to summarize free-text comments. The rest is triggers, math, and routing.

The CSAT pipeline

Resolution signal (status change / Sheets flip)
  → Dedupe check (already surveyed this ticket?)
  → Send survey email with rating link
  → Form trigger captures rating + comment
  → Code (log row, recompute CSAT %, branch on score)
  → Low score → Slack alert | All scores → rolling sheet

Two halves: outbound (send the survey once) and inbound (capture, score, route). They're separate workflows sharing one sheet, so a survey send never blocks on a response.

1. Detect resolution without a help desk

The Freshdesk template polls ticket status. You don't need Freshdesk to have a resolution signal. Any of these works as the trigger:

  • A help-desk webhook on status change (if you have one)
  • A CRM field flipping to Resolved
  • A Google Sheets row where an agent sets a status column to Resolved
  • A Schedule trigger that diffs current status against the last-seen status

Pick the one that matches your stack. The downstream flow doesn't care where the signal came from, as long as it carries ticket_id, customer_email, and a short ticket reference.

2. Don't survey the same ticket twice

Before sending, check whether this ticket already got a survey. A lookup against the log sheet keyed on ticket_id does it. Skip this and a customer whose ticket bounces between Resolved and Reopened gets pestered three times, which tanks the very satisfaction you're measuring. Stamp surveyed_at on send so the dedupe has something to read.

3. Send a survey people actually answer

Keep it to one question and one click. The email (via Gmail, SendGrid, SMTP — your choice) carries five rating links, each pointing at an n8n Form trigger URL with the rating and ticket_id pre-filled as query params:

How did we do on ticket {{ $json.ticket_ref }}?
[1] [2] [3] [4] [5]

A two-minute survey gets ignored. A one-click rating with an optional comment box on the landing form gets answered. Response rate is the whole game; a perfect survey nobody fills in measures nothing.

4. Capture, then do the math

When the Form trigger fires, a Code node logs the row and recomputes the rolling score. The CSAT formula is the part every tutorial leaves as "an exercise for the reader":

const rows = $json.allResponses; // read from the log sheet
const satisfied = rows.filter(r => r.rating >= 4).length;
const csat = Math.round((satisfied / rows.length) * 100);
const rating = Number($json.rating);
const route = rating <= 2 ? "escalate" : "log";
return [{ json: { rating, csat, route, comment: $json.comment } }];

CSAT is the share of 4s and 5s, as a percentage. A 3 is neutral and counts against you; that's deliberate, because "fine, I guess" isn't satisfaction. The recompute runs on every response, so the number on the dashboard is never stale.

5. Escalate the detractors immediately

A rating of 1 or 2 doesn't wait for the monthly review. It routes straight to a Slack channel with the ticket reference, the customer, and their comment, so a manager can reach out the same day. This is the step that turns CSAT from a vanity chart into a retention tool.

The opinion that earns its keep

A monthly CSAT report is a tombstone. By the time you read that satisfaction dropped, the unhappy customers have already churned or vented publicly. The number worth automating isn't the rolling average — it's the 1-2 rating that fires a same-day Slack ping. Recover one detractor with a personal follow-up and you've out-earned every dashboard you'll ever build. Compute the trend, sure. But wire the interrupt first.

Implementation patterns worth copying

Pattern A — segmented CSAT. Tag each response with the agent, the category, and the customer tier when you log it. Now the rolling score can be sliced: per-agent CSAT spots a coaching need, per-category CSAT spots a broken product area. Same data, one extra Set node, far more signal than a single global number.

Pattern B — comment summarization. When a comment lands, pass it through an OpenAI node to extract a one-line theme (billing confusion, slow response, praise for agent). Append the theme to the log. Once a month, the themes cluster the free text into the three things worth fixing, without anyone reading 400 comments by hand.

n8n nodes you'll use most

NodePurpose
Webhook / Schedule TriggerDetect ticket resolution from any source
Google Sheets (read)Dedupe check against already-surveyed tickets
Email (Gmail / SendGrid)Send the one-click rating survey
Form TriggerCapture the 1-5 rating and optional comment
CodeRecompute the CSAT %, branch on low scores
SlackEscalate 1-2 ratings the same day
Google Sheets (append)Log every response as the score's data source

Getting started

  1. Decide your resolution signal — help-desk webhook, CRM flip, or a Sheets status column.
  2. Build the outbound flow: dedupe check, then the one-click survey email.
  3. Stand up an n8n Form trigger that captures rating, comment, and ticket_id.
  4. Write the Code node that logs the row and recomputes CSAT as the share of 4-5 ratings.
  5. Branch on rating: 1-2 routes to Slack now, everything logs to the rolling sheet.
  6. Send yourself ten test resolutions and confirm the score math and the escalation both fire.
  7. Add agent and category tags so you can slice the score later.

For the wider feedback picture beyond post-ticket CSAT, the User Feedback Loop ingests feedback from multiple sources and runs sentiment on it, and the Review Response Engine handles public review responses with the same low-score Slack alert pattern.

Browse the feedback templates
Skip the build

The User Feedback Loop ships this capture-and-route pattern end to end: it ingests feedback from manual, Google Forms, and Typeform sources, analyzes sentiment with OpenAI, notifies the team on Telegram, and a companion dispatch workflow closes the loop by email, so you add the CSAT math instead of building the ingest and routing from scratch. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog plus every template added later, which pays off the moment you run more than one of these feedback automations.

Get the User Feedback Loop

CSAT only changes anything if the score is live and the low ratings interrupt someone. Pair this with the survey-segmentation ideas in How to Build n8n NPS Survey Automation and the broader capture flow in How to Automate Customer Feedback with n8n for the full voice-of-customer loop. Ask one question. Compute the number. Let the unhappy ones ring a bell the same day.

Start with the User Feedback Loop
FAQ

Common questions

What is CSAT and how is the score calculated?
CSAT is the customer satisfaction score: the percentage of respondents who rated their experience as satisfied. On a 1-5 scale, you count the 4s and 5s, divide by total responses, and multiply by 100. A workflow can compute this rolling number every time a new rating lands instead of waiting for a monthly export.
Can I run CSAT surveys in n8n without Freshdesk or Zendesk?
Yes. The survey fires on a resolution signal, which can be a help-desk status change, a CRM field flip, or a row in Google Sheets marked Resolved. n8n sends the survey by email, captures the rating with a Form trigger, and logs it. The help desk is one possible trigger, not a requirement.
How does CSAT automation flag an unhappy customer fast?
When a response lands, a Code node reads the rating. A 1 or 2 routes immediately to a Slack channel with the ticket context and the customer's comment, so a manager can reach out the same day. The promoter ratings flow into the rolling score; the detractors interrupt someone.
Stop reading. Start running.

Get the workflow templates this guide is built on

Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.

Free — $40 value

Get 3 tested n8n templates, free

The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.

  • 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
  • 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
  • 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14