Intermediate~20 min setupCRM & CommunicationVerified April 2026
Salesforce logo
Slack logo

How to Send Salesforce Stage Changes to Slack with N8n

Automatically DM deal owners in Slack when Salesforce opportunities move between stages with deal details.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Slack for Salesforce exists as a native integration, but it limited to record notifications without custom logic. This guide uses an automation platform for full control. View native option →

Best for

Teams that want custom SOQL queries and don't mind 5-minute notification delays

Not ideal for

Teams needing instant notifications or simple drag-and-drop setup without code

Sync type

polling

Use case type

notification

Real-World Example

💡

A 25-person B2B software sales team uses this to notify deal owners immediately when opportunities move to 'Negotiation' or 'Closed-Won' stages in Salesforce. Before automation, sales reps manually checked pipeline reports twice daily and often missed stage changes from other team members. Now deal owners get Slack DMs within 5 minutes showing the new stage, deal value, and probability so they can take immediate action.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Salesforce admin access to create API user and get credentials
Slack workspace admin rights to create bot token with DM permissions
N8n cloud account or self-hosted instance running
Salesforce users must have matching email addresses in Slack

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Opportunity IDId
Deal NameName
AmountAmount
Stage NameStageName
ProbabilityProbability
Close DateCloseDate
Owner EmailOwner.Email

Step-by-Step Setup

1

Workflows > New Workflow

Create new workflow

Start a fresh N8n workflow for the Salesforce to Slack integration. This workflow will poll Salesforce for stage changes and send notifications.

  1. 1Click 'New Workflow' from the N8n dashboard
  2. 2Click the gray '+' node to add your first step
  3. 3Name the workflow 'SF Stage Changes to Slack'
What you should see: You should see a blank workflow canvas with one empty node ready for configuration.
2

Node > Apps > Salesforce > Get Records

Add Salesforce trigger node

Configure N8n to poll Salesforce for opportunity updates. The polling trigger will check every 5 minutes for stage changes.

  1. 1Click the '+' node and search for 'Salesforce'
  2. 2Select 'Salesforce' from the apps list
  3. 3Choose 'Get Records' as the operation
  4. 4Set Resource to 'Opportunity'
What you should see: The Salesforce node appears with empty credential and query fields to configure.
Common mistake — Don't use 'Get All' operation — it pulls every opportunity and will hit API limits quickly.
n8n
+
click +
search apps
Salesforce
SA
Salesforce
Add Salesforce trigger node
Salesforce
SA
module added
3

Salesforce Node > Credentials > Create New

Connect Salesforce credentials

Link your Salesforce org to N8n using OAuth or username/password authentication. This enables the workflow to read opportunity data.

  1. 1Click 'Create New' next to Credentials
  2. 2Choose 'Salesforce OAuth2 API' for production orgs
  3. 3Enter your Salesforce domain (like yourcompany.my.salesforce.com)
  4. 4Click 'Connect my account' and authorize N8n
What you should see: Green 'Connected' status appears next to your Salesforce credential name.
Common mistake — Use 'Username-Password' credentials only for sandboxes — OAuth2 is required for production orgs.
4

Salesforce Node > Options > Use Custom Query

Configure opportunity query

Set up a SOQL query to pull recently modified opportunities. This filters for records changed in the last 10 minutes to catch stage updates.

  1. 1Toggle 'Use custom query' to ON
  2. 2Paste this SOQL: SELECT Id, Name, Amount, Probability, CloseDate, StageName, OwnerId, LastModifiedDate FROM Opportunity WHERE LastModifiedDate >= LAST_N_MINUTES:10
  3. 3Click 'Execute Node' to test the query
What you should see: The node output shows recent opportunity records with stage, amount, and owner data.
Common mistake — Don't set the time window below 5 minutes — it creates duplicate notifications when polling overlaps.
5

Nodes > Logic > IF

Add stage change filter

Filter opportunities to only process those with actual stage changes. This prevents notifications for other field updates like amount or description.

  1. 1Add an 'IF' node after Salesforce
  2. 2Set Condition to 'String' and Field to '{{ $json.StageName }}'
  3. 3Operation should be 'Not Equal' with Value '{{ $json.PreviousStageName }}'
  4. 4Connect the 'true' output to continue the workflow
What you should see: The IF node shows two outputs labeled 'true' and 'false' for routing stage changes.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
Salesforce
SA
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified
6

Nodes > Salesforce > Get Record by ID

Get opportunity owner details

Pull the deal owner's information from Salesforce to get their name and email. This data helps map to the correct Slack user.

  1. 1Add another Salesforce node after the IF filter
  2. 2Set Operation to 'Get Record by ID'
  3. 3Choose Resource as 'User'
  4. 4Set Record ID to '{{ $json.OwnerId }}'
What you should see: This node outputs user details including Name, Email, and other profile fields from Salesforce.
Common mistake — Map by email, not username — Slack usernames often differ from Salesforce usernames.
7

Nodes > Slack > Credentials

Add Slack credentials

Connect N8n to your Slack workspace using a bot token. This allows sending direct messages to deal owners.

  1. 1Add a Slack node to the workflow
  2. 2Click 'Create New' for Slack credentials
  3. 3Enter your Slack bot token (starts with xoxb-)
  4. 4Test the connection
What you should see: Slack credential shows green 'Connected' status and can access your workspace.
Common mistake — Bot tokens need 'chat:write' and 'users:read.email' scopes to send DMs and find users by email.
8

Slack Node > Get User by Email

Find Slack user by email

Match the Salesforce user's email to their Slack account. This ensures notifications reach the right person.

  1. 1Set Slack operation to 'Get User by Email'
  2. 2Map Email field to '{{ $node["Salesforce1"].json.Email }}'
  3. 3Execute to test user lookup
What you should see: Node returns Slack user ID and profile data for the opportunity owner.
Common mistake — This fails if the email doesn't match exactly — Salesforce might have [email protected] while Slack has [email protected].
9

Slack Node > Send Direct Message

Format notification message

Build the Slack DM content with deal details formatted for readability. Include all key information the sales rep needs.

  1. 1Change Slack operation to 'Send Direct Message'
  2. 2Set User ID to '{{ $json.id }}' from the previous step
  3. 3Build message text with deal name, stage, amount, probability, and close date
  4. 4Use Slack formatting like *bold* for emphasis
What you should see: The message preview shows formatted text with opportunity details pulled from Salesforce.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
10

Workflow > Settings > Active

Configure workflow polling

Set the workflow to run automatically every 5 minutes to catch stage changes quickly. This creates near real-time notifications.

  1. 1Click 'Settings' in the top workflow menu
  2. 2Toggle 'Active' to ON
  3. 3Set execution mode to 'Every 5 minutes'
  4. 4Save the workflow
What you should see: Workflow shows 'Active' status and begins polling Salesforce every 5 minutes automatically.
Common mistake — Don't poll faster than 3 minutes — Salesforce has API limits and you'll hit them with frequent queries.

Drop this into an n8n Code node.

Copy this templateAdd this to filter only important stage movements:
▸ Show code
Add this to filter only important stage movements:
WHERE StageName IN ('Proposal', 'Negotiation', 'Closed Won', 'Closed Lost') AND LastModifiedDate >= LAST_N_MINUTES:10

... expand to see full code

Add this to filter only important stage movements:
WHERE StageName IN ('Proposal', 'Negotiation', 'Closed Won', 'Closed Lost') AND LastModifiedDate >= LAST_N_MINUTES:10

Scaling Beyond 200+ stage changes/day+ Records

If your volume exceeds 200+ stage changes/day records, apply these adjustments.

1

Increase polling interval

Move from 5-minute to 10-minute polling to reduce API calls. Add 'LIMIT 100' to your SOQL query to cap results per execution.

2

Batch notifications

Group multiple stage changes per user into a single Slack message instead of separate DMs for each opportunity. Use an aggregate node to collect changes by owner.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you want full control over the SOQL query and message formatting without paying per execution. The polling approach works well for stage changes since they don't happen constantly, and you can customize exactly which fields to pull and how to format notifications. Skip N8n if you need instant notifications — the 5-minute polling delay means urgent stage changes aren't truly real-time. Zapier's webhook triggers fire immediately when configured properly.

Cost

This workflow uses 1 execution every 5 minutes, so 8,640 executions monthly. On N8n Cloud's Starter plan at $20/month, that's well under the 20,000 execution limit. The same automation costs $50/month on Zapier Professional (need multi-step zaps) and $29/month on Make Core. N8n saves you $9-30/month, but the real win is SOQL flexibility — other platforms force you to use basic field filters instead of custom queries.

Tradeoffs

Zapier handles the Salesforce-to-Slack user mapping better with built-in field matching that doesn't require the extra lookup step. Make's error handling is cleaner with automatic retries on API failures, while N8n makes you configure retry logic manually. But N8n wins on query control — you can pull related objects, aggregate data, or add complex filters that Zapier and Make can't handle through their UI-based field selectors.

Salesforce's API returns null for PreviousStageName unless you enable field history tracking on the StageName field first. Go to Setup > Object Manager > Opportunity > Fields > StageName > Set History Tracking to track this field. Also, inactive Salesforce users still own opportunities but might not exist in Slack anymore — add error handling to skip notifications for deactivated owners. The 5-minute polling creates a window where rapid stage changes might get missed if an opportunity moves through multiple stages quickly.

Ideas for what to build next

  • Add closed deal celebrationsSend a different message format with celebration emojis when opportunities move to 'Closed Won' stage instead of standard notifications.
  • Create pipeline change digestBuild a daily summary workflow that posts all stage changes to a sales channel showing team pipeline movement trends.
  • Log notifications to spreadsheetAdd a Google Sheets node to track all sent notifications for reporting on response times and stage change patterns.

Related guides

Was this guide helpful?
Salesforce + Slack overviewn8n profile →