Beginner~12 min setupCRM & CommunicationVerified April 2026
Salesforce logo
Slack logo

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

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 '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.

/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 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.

Salesforce admin access with API enabled
Slack workspace admin permissions to install apps
Make account with paid plan (free tier limits polling frequency)
Salesforce users must have email addresses that match their Slack accounts
Opportunity stage names and workflow defined in Salesforce

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Opportunity NameName
Stage NameStageName
Owner NameOwner.Name
Owner EmailOwner.Email
3 optional fields▸ show
Deal AmountAmount
Close DateCloseDate
ProbabilityProbability

Step-by-Step Setup

1

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.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Click the large + icon in the center of the canvas
  3. 3Search for 'Salesforce' in the app selector
  4. 4Select 'Salesforce' from the results list
What you should see: You should see a Salesforce module appear on your canvas with configuration options on the right panel.
2

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.

  1. 1Select 'Watch Records' from the Salesforce trigger options
  2. 2Click 'Create a connection' and enter your Salesforce login credentials
  3. 3Set Record Type to 'Opportunity'
  4. 4In the Formula field, enter: AND(ISCHANGED(StageName), NOT(ISBLANK(StageName)))
  5. 5Set Limit to 100
What you should see: The connection should show 'Successfully connected' with a green checkmark, and the trigger configuration panel should display your formula.
Common mistake — Don't use 'New Records' trigger — you need 'Watch Records' to catch stage updates on existing opportunities
Make
+
click +
search apps
Salesforce
SA
Salesforce
Configure Salesforce Watch R…
Salesforce
SA
module added
3

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.

  1. 1Scroll down to the 'Select Fields' section in the Salesforce module
  2. 2Check the boxes for: Name, Amount, Probability, CloseDate, StageName
  3. 3Check the box for: Owner > Name (this is nested under the Owner section)
  4. 4Click 'OK' to save the trigger configuration
What you should see: The selected fields should appear in a list under 'Select Fields' showing Name, Amount, Probability, CloseDate, StageName, and Owner.Name.
Common mistake — Owner.Name is nested — expand the Owner section or you'll only get the Owner ID, not their readable name
Salesforce fields
FirstName
LastName
Email
Company
LeadStatus
available as variables:
1.sobject.FirstName
1.sobject.LastName
1.sobject.Email
1.sobject.Company
1.sobject.LeadStatus
4

+ > 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.

  1. 1Click the + icon to the right of your Salesforce module
  2. 2Search for 'Slack' and select it from the app list
  3. 3Choose 'Create a Direct Message' from the action options
  4. 4Click 'Create a connection' and authorize Make to access your Slack workspace
What you should see: A Slack module should appear connected to Salesforce, with a connection status showing 'Successfully connected' in green.
5

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.

  1. 1In the 'User' field, click the dropdown and select 'Select by email'
  2. 2Click in the email field and select 'Owner > Email' from the Salesforce data
  3. 3If Owner Email isn't available, use a manual mapping or lookup table
  4. 4Leave 'Create user if not exists' unchecked
What you should see: The User field should show the mapped Salesforce owner email, and you should see 'Owner > Email' as a blue pill in the field.
Common mistake — Don't assume Owner.Email exists — some Salesforce orgs don't sync email to the Owner object. Test with real data first
6

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.

  1. 1Click in the 'Text' field of the Slack module
  2. 2Type: 'Deal Update: ' and then select 'Name' from the Salesforce mappings
  3. 3Add a new line and type 'Stage: ' followed by 'StageName' from mappings
  4. 4Add 'Value: $' and select 'Amount', then 'Probability: ' and select 'Probability'
  5. 5Add 'Close Date: ' and select 'CloseDate' from the Salesforce data
What you should see: Your message template should show blue pills for each Salesforce field, creating a format like 'Deal Update: {Name}' with dynamic content.
Common mistake — Amount might be null for some deals — add error handling or a default value like 'TBD' to prevent blank messages
Message template
🔔 New Lead: {{1.FirstName}} {{1.LastName}}
Email: {{1.Email}}
Company: {{1.Company}}
Status: {{1.LeadStatus}}
7

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.

  1. 1Right-click the line connecting Salesforce to Slack
  2. 2Select 'Set up a filter' from the context menu
  3. 3Name the filter 'Stage Change Only'
  4. 4Set condition: StageName 'Not equal to' 'Closed Lost'
  5. 5Add another condition with AND: StageName 'Not equal to' 'Prospecting'
What you should see: A small filter icon should appear on the connection line, and the filter panel should show your conditions with AND logic.
Common mistake — Test your stage names exactly — Salesforce stage values are case-sensitive and might have extra spaces
Salesforce
SA
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified
8

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.

  1. 1Click 'Run once' at the bottom left of the scenario
  2. 2Wait for Make to poll Salesforce and process any recent opportunity changes
  3. 3Check the execution log to see if data was retrieved correctly
  4. 4Verify the test Slack message was sent and formatted properly
  5. 5Review any error messages in the execution details
What you should see: The execution log should show green checkmarks for both modules, with sample data flowing from Salesforce to a test Slack message.
Common mistake — If no recent stage changes exist, manually update an opportunity stage in Salesforce, then run the test within 5 minutes
Make
▶ Run once
executed
Salesforce
Slack
Slack
🔔 notification
received
9

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.

  1. 1Right-click the Slack module and select 'Add error handler'
  2. 2Choose 'Ignore' from the error handler options
  3. 3Add a note explaining this handles missing Slack users
  4. 4Click the settings gear on the Salesforce module
  5. 5Enable 'Store incomplete executions' under Advanced settings
What you should see: A small error handler icon should appear on the Slack module, and incomplete execution storage should be enabled in Salesforce settings.
Common mistake — Don't use 'Break' error handling in production — missing Slack users are common and shouldn't stop the entire scenario
10

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.

  1. 1Click the clock icon at the bottom of the scenario
  2. 2Set schedule to 'Every 5 minutes' for near real-time alerts
  3. 3Click 'OK' to save the schedule
  4. 4Toggle the scenario to 'ON' using the switch at the bottom left
  5. 5Click 'Save' to finalize all configurations
What you should see: The scenario should show 'ON' status with a green indicator, and the schedule should display 'Every 5 minutes' next to the clock icon.
Common mistake — 5-minute polling uses more operations but provides faster notifications — adjust based on your team's urgency needs and operation limits

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.

1

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.

2

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.

3

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

VerdictWhy Make for this workflow

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.

Cost

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.

Tradeoffs

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 celebrationsCreate 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 trackingConnect 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 escalationsAdd 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

Was this guide helpful?
Salesforce + Slack overviewMake profile →