

How to Alert on Salesforce Opportunity Stage Changes with Make
Send automatic Slack DMs to deal owners when Salesforce opportunities move stages, including deal name, value, probability, and close date.
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
Sales teams using Salesforce who want automated Slack notifications when deals progress through stages
Not ideal for
Teams needing instant real-time alerts or those with complex approval workflows before notifications
Sync type
pollingUse case type
notificationReal-World Example
A 25-person B2B software sales team uses this to notify deal owners immediately when opportunities move to 'Proposal' or 'Negotiation' stages. Before automation, reps discovered stage changes during morning standup meetings, sometimes 12+ hours after prospects responded. Now they get Slack alerts within 5 minutes and can follow up while conversations are still warm.
What Will This Cost?
Drag the slider to your expected monthly volume.
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
Import this workflow directly into Make
Copy the pre-built Make blueprint and paste it straight into Make. 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Opportunity Name | Name | |
| Stage Name | StageName | |
| Owner Name | Owner.Name | |
| Owner Email | Owner.Email | |
3 optional fields▸ show
| Deal Amount | Amount |
| Close Date | CloseDate |
| Probability | Probability |
Step-by-Step Setup
Dashboard > Create scenario > +
Create new scenario in Make
Start building the automation by creating a new scenario workspace. This will contain your Salesforce trigger and Slack action modules.
- 1Click 'Create a new scenario' from your Make dashboard
- 2Click the large + icon in the center of the canvas
- 3Search for 'Salesforce' in the app selector
- 4Select 'Salesforce' from the results list
Salesforce module > Watch Records
Configure Salesforce Watch Records trigger
Set up Make to monitor Salesforce for opportunity record changes. The Watch Records trigger polls Salesforce every few minutes for new or updated records.
- 1Select 'Watch Records' from the Salesforce trigger options
- 2Click 'Create a connection' and enter your Salesforce login credentials
- 3Set Record Type to 'Opportunity'
- 4In the Formula field, enter: AND(ISCHANGED(StageName), NOT(ISBLANK(StageName)))
- 5Set Limit to 100
Salesforce module > Select Fields
Add field selection for opportunity data
Specify which Salesforce fields Make should retrieve when an opportunity stage changes. This reduces API calls and gives you the data needed for Slack.
- 1Scroll down to the 'Select Fields' section in the Salesforce module
- 2Check the boxes for: Name, Amount, Probability, CloseDate, StageName
- 3Check the box for: Owner > Name (this is nested under the Owner section)
- 4Click 'OK' to save the trigger configuration
+ > Slack > Create a Direct Message
Add Slack module for direct messaging
Connect the Slack app to send direct messages to deal owners. Make will use Slack's API to find users and deliver personalized notifications.
- 1Click the + icon to the right of your Salesforce module
- 2Search for 'Slack' and select it from the app list
- 3Choose 'Create a Direct Message' from the action options
- 4Click 'Create a connection' and authorize Make to access your Slack workspace
Slack module > User field
Map deal owner to Slack user
Configure how Make finds the right Slack user to message. This typically matches by email address since most companies sync Salesforce and Slack users.
- 1In the 'User' field, click the dropdown and select 'Select by email'
- 2Click in the email field and select 'Owner > Email' from the Salesforce data
- 3If Owner Email isn't available, use a manual mapping or lookup table
- 4Leave 'Create user if not exists' unchecked
Slack module > Text field
Build the Slack message content
Create a formatted message that includes all the deal details sales reps need. Use Salesforce field mappings to pull live data into the message template.
- 1Click in the 'Text' field of the Slack module
- 2Type: 'Deal Update: ' and then select 'Name' from the Salesforce mappings
- 3Add a new line and type 'Stage: ' followed by 'StageName' from mappings
- 4Add 'Value: $' and select 'Amount', then 'Probability: ' and select 'Probability'
- 5Add 'Close Date: ' and select 'CloseDate' from the Salesforce data
🔔 New Lead: {{1.FirstName}} {{1.LastName}}
Email: {{1.Email}}
Company: {{1.Company}}
Status: {{1.LeadStatus}}Connection line > Set up filter
Add conditional filtering
Set up filters so Make only sends notifications for meaningful stage changes. This prevents spam from minor updates or irrelevant stage movements.
- 1Right-click the line connecting Salesforce to Slack
- 2Select 'Set up a filter' from the context menu
- 3Name the filter 'Stage Change Only'
- 4Set condition: StageName 'Not equal to' 'Closed Lost'
- 5Add another condition with AND: StageName 'Not equal to' 'Prospecting'
Run once button > Execution log
Test with sample data
Run a test to verify your scenario works with real Salesforce data. This catches field mapping issues and message formatting problems before going live.
- 1Click 'Run once' at the bottom left of the scenario
- 2Wait for Make to poll Salesforce and process any recent opportunity changes
- 3Check the execution log to see if data was retrieved correctly
- 4Verify the test Slack message was sent and formatted properly
- 5Review any error messages in the execution details
Slack module > Add error handler
Configure error handling
Set up proper error handling so the scenario doesn't break when Slack users aren't found or Salesforce returns incomplete data.
- 1Right-click the Slack module and select 'Add error handler'
- 2Choose 'Ignore' from the error handler options
- 3Add a note explaining this handles missing Slack users
- 4Click the settings gear on the Salesforce module
- 5Enable 'Store incomplete executions' under Advanced settings
Clock icon > Schedule settings
Set scenario schedule and activate
Configure how often Make checks Salesforce for changes and turn on the automation. Start with frequent polling for immediate notifications.
- 1Click the clock icon at the bottom of the scenario
- 2Set schedule to 'Every 5 minutes' for near real-time alerts
- 3Click 'OK' to save the schedule
- 4Toggle the scenario to 'ON' using the switch at the bottom left
- 5Click 'Save' to finalize all configurations
Drop this into a Make custom function.
JavaScript — Custom Function{{formatDate(CloseDate; "MMM DD, YYYY")}} to convert Salesforce ISO dates to readable format like 'Dec 15, 2024'. Add this in the Slack message text field.▸ Show code
{{formatDate(CloseDate; "MMM DD, YYYY")}} to convert Salesforce ISO dates to readable format like 'Dec 15, 2024'. Add this in the Slack message text field.... expand to see full code
{{formatDate(CloseDate; "MMM DD, YYYY")}} to convert Salesforce ISO dates to readable format like 'Dec 15, 2024'. Add this in the Slack message text field.Scaling Beyond 500+ stage changes/day+ Records
If your volume exceeds 500+ stage changes/day records, apply these adjustments.
Reduce polling frequency
Switch from 5-minute to 15-minute polls to stay under API limits. Salesforce allows 15,000-100,000 daily API calls depending on license tier, and each poll consumes one call.
Add bulk processing
Use Make's aggregator to batch multiple stage changes into a single Slack message per user. This reduces Slack API calls and prevents notification flooding during mass data updates.
Filter by priority stages
Only notify on high-value stages like 'Proposal' and 'Negotiation' rather than every stage change. This cuts notification volume by 60-70% while preserving critical alerts.
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
Use Make for this if you need reliable polling of Salesforce changes with detailed error handling. Make's Salesforce connector handles API pagination automatically and includes robust field mapping for complex objects like Opportunities. The visual scenario builder makes it easy to add filters and conditional logic. Skip Make if you need instant notifications — go with Salesforce Process Builder + Slack webhook for true real-time alerts instead.
This workflow uses 2 operations per triggered opportunity: 1 for the Salesforce poll and 1 for the Slack message. At 200 stage changes per month, that's 400 operations monthly. Make's Core plan ($9/month) includes 10,000 operations, so you're well covered. Zapier would need the Starter plan at $20/month for the same volume. N8n self-hosted is free but requires server management time.
Zapier's Salesforce trigger includes built-in deduplication that prevents duplicate notifications if the same record changes multiple times quickly. N8n offers better date formatting options out of the box, so CloseDate displays more naturally without custom formatters. Make still wins because its error handling is more granular — you can route failed Slack messages to a backup notification channel, while Zapier just retries and gives up.
Salesforce's API returns dates in ISO format, so CloseDate shows as '2024-12-15T00:00:00.000+0000' instead of 'Dec 15, 2024' in Slack messages. You'll need Make's formatDate function to clean this up. The Opportunity Owner lookup sometimes returns inactive users if people leave the company but still own old deals — add a filter to check Owner.IsActive. Make's polling can lag during Salesforce maintenance windows, typically Sunday nights, causing 2-3 hour notification delays.
Ideas for what to build next
- →Add closed deal celebrations — Create a separate path that sends congratulatory messages to team channels when opportunities reach 'Closed Won' status with confetti emoji and deal details.
- →Build deal progress tracking — Connect a Google Sheets module to log all stage changes for reporting, creating a historical view of sales velocity and bottlenecks by rep and stage.
- →Set up manager escalations — Add conditional logic to notify sales managers via Slack when high-value deals (>$50k) sit in the same stage for more than 7 days without progress.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup