Productivity · n8n

Instantly Surface Negative Customer Feedback in Slack Using AI Sentiment Analysis

Automatically capture Typeform survey responses, run them through OpenAI to detect sentiment, and post urgent negative feedback alerts straight to your team's Slack channel. Product managers stay ahead of issues without manually reading every response.

difficulty Intermediatesetup 45 minresult Every new Typeform submission is scored for sentiment by OpenAI, and negative responses trigger an immediate, formatted Slack alert so your product team can act fast.
  1. 1

    Trigger on new Typeform submission

    Add a Typeform Trigger node as the workflow start. Connect your Typeform account credentials and select the specific form you use to collect product feedback. Every new submission will automatically fire the workflow. In the node's notes field, record your Typeform API key location (Account > Developer > Personal tokens).

  2. 2

    Extract and format the feedback text

    Add a Set node directly after the trigger. Create a new field called feedbackText and map it to the open-text answer field from your Typeform (e.g. {{ $json.answers[0].text }}). Also set a respondentEmail field from the submission metadata. This keeps downstream nodes clean and readable.

  3. 3

    Send feedback to OpenAI for sentiment analysis

    Add an OpenAI node and choose the Message a Model resource. Set the model to gpt-3.5-turbo. In the User Message field, enter a prompt like: Analyze the sentiment of this customer feedback. Reply with a JSON object containing two keys: sentiment (Positive, Neutral, or Negative) and summary (one sentence). Feedback: {{ $json.feedbackText }}. Add your OpenAI API key in the credentials panel.

  4. 4

    Check if sentiment is Negative

    Add an IF node to branch the workflow. Set the condition to check if the OpenAI response text contains the word Negative — use the expression {{ $json.message.content }} and select contains with value Negative. The True branch proceeds to Slack; the False branch can be left empty or connected to a no-op to silently discard neutral and positive responses.

  5. 5

    Post an alert to Slack

    Add a Slack node on the True branch. Choose the Send a Message operation, select your target channel (e.g. #product-feedback), and compose the message text using: :rotating_light: *Negative Feedback Alert* *From:* {{ $node['Set'].json.respondentEmail }} *Summary:* {{ $json.message.content }} *Raw feedback:* {{ $node['Set'].json.feedbackText }}. Add your Slack Bot Token in credentials. Make sure the bot is invited to the channel first.

Frequently asked questions

What if my Typeform has multiple open-text questions?

In the Set node, concatenate all relevant answers into the feedbackText field using an expression like `{{ $json.answers[0].text }} {{ $json.answers[1].text }}`. OpenAI will analyze the combined text and still return a single sentiment label.

Can I also log all responses, not just negative ones, to a spreadsheet?

Yes. Add a Google Sheets node after the OpenAI node but before the IF node. Map feedbackText, the sentiment result, and the timestamp to columns in your sheet. That way every response is archived while Slack only gets alerted for negative ones.

How do I make the OpenAI response easier to parse in the IF node?

Ask OpenAI to return only the word Positive, Neutral, or Negative as its entire reply by simplifying the prompt to: 'Reply with only one word — the sentiment of this feedback: Positive, Neutral, or Negative. Feedback: ...'. This makes the IF condition simpler and more reliable without needing JSON parsing.

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.