Support · n8n

Automatically Send SurveyMonkey CSAT Surveys When Intercom Conversations Are Closed

When a support conversation is closed in Intercom, this workflow instantly sends a SurveyMonkey satisfaction survey to the customer. Capture real-time feedback without any manual effort from your customer success team.

difficulty Intermediatesetup 45 minresult Every customer whose Intercom conversation is closed automatically receives a SurveyMonkey survey link via email, giving your team a steady stream of CSAT feedback.
  1. 1

    Step 1 — Catch the Intercom Webhook

    Add a Webhook node as the trigger. Set the HTTP Method to POST and copy the generated webhook URL. In your Intercom Developer Hub, create a new webhook subscription, paste the URL, and select the conversation.closed topic. This node will receive the full conversation payload every time a conversation is closed.

  2. 2

    Step 2 — Extract Customer Details

    Add a Set node connected to the Webhook node. Create two fields: set customerEmail using the expression {{ $json.body.data.item.contacts.contacts[0].email }} and customerName using {{ $json.body.data.item.contacts.contacts[0].name }}. This isolates the data you need for the survey invitation.

  3. 3

    Step 3 — Filter Out Non-Customer Contacts

    Add an IF node after the Set node. Add a condition: customerEmail is not empty (use {{ $json.customerEmail }} is not equal to an empty string). Connect the TRUE branch to the next step. The FALSE branch can be left unconnected, ensuring you only proceed when a valid customer email exists.

  4. 4

    Step 4 — Send Survey Invitation via SurveyMonkey API

    Add an HTTP Request node on the TRUE branch. Set Method to POST and URL to https://api.surveymonkey.com/v3/collectors/YOUR_COLLECTOR_ID/messages/YOUR_MESSAGE_ID/recipients/bulk. In Authentication, choose Header Auth and add header Authorization with value Bearer YOUR_SURVEYMONKEY_ACCESS_TOKEN. Set the Body Type to JSON and paste the body: { "contacts": [{ "email": "{{ $json.customerEmail }}", "first_name": "{{ $json.customerName }}" }] }. Replace YOUR_COLLECTOR_ID and YOUR_MESSAGE_ID with IDs from your SurveyMonkey collector setup. To find these, create an Email Invitation collector on your survey in SurveyMonkey and note the IDs from the URL.

Frequently asked questions

Where do I find my SurveyMonkey Collector ID and Message ID?

Log in to SurveyMonkey, open your survey, and click 'Collect Responses'. Create or open an 'Email Invitation' collector. The Collector ID appears in the page URL after /collectors/. To get the Message ID, call GET https://api.surveymonkey.com/v3/collectors/YOUR_COLLECTOR_ID/messages using a tool like Postman with your access token, and note the id of the message you want to use.

What if a conversation involves multiple contacts?

The Set node currently picks the first contact in the array. If your Intercom conversations often have multiple contacts, you can add a SplitInBatches or loop node to iterate through all entries in contacts.contacts. For most B2C support workflows, the first contact is the primary customer.

Can I prevent the same customer from getting a survey after every single conversation?

Yes. Add a Google Sheets or Airtable node before the HTTP Request node to log surveyed email addresses. Add a second IF condition to check whether the email already exists in that sheet within the past 30 days, and only proceed if it does not. This avoids survey fatigue for customers who contact support frequently.

About this recipe. Recipes on FlowRecipesHub are written for business owners, not developers, and are tested before publishing — how recipes get made. Some ingredient links are affiliate links that cost you nothing — full disclosure.