Connect Salesforce to Slack
Bring Salesforce into the channel where the team already works: deal and pipeline alerts with the record context attached, and approval steps that pause a workflow for a named person and write the decision, and who made it, back to Salesforce. Every notification and approval is in the run log.
Why teams connect Salesforce and Slack
Reps and managers live in Slack. The deal data lives in Salesforce. The usual result is a bot that posts every field change as noise, or an approval that happens over DM with no record. Neither scales, and neither is auditable.
- Alerts are selective and contextual: a closed-won post carries the amount, product, and a link, and threads the onboarding checklist underneath
- Approvals pause the workflow: a discount over a threshold waits for the deal desk, and the run does not continue until someone acts
- The decision, the approver's Slack user, and the timestamp are written back to Salesforce and recorded in the run log, so an approval is provable later
- A timeout escalates: no response in the window re-posts to a channel and re-assigns, rather than the deal silently stalling
Worked example
The approval flow most revenue teams turn on first.
A quote over 20 percent discount waits for the deal desk before it is sent
Triggered when a Salesforce quote reaches pending approval, with a timeout escalation.
- Trigger: Salesforce
New or updated recordonQuotewhereStatus = In ReviewandDiscount__c > 0.20. - Resolve approver: a data table maps the owning rep's region to a deal desk lead's email. Slack
Get userby that email returns the Slack user ID. - Request approval: Slack posts a Block Kit message to that user with the account, amount, discount, a link to the quote, and Approve and Reject buttons. The run pauses.
- Timeout: no response in 4 working hours re-posts to
#deal-deskand re-assigns the decision. - On approve: Salesforce
Update recordon the quote setsStatus = Approved,Approved_By__cto the deal desk lead, andApproved_At__cto now. The original Slack message is edited to show the outcome. - On reject: the quote goes to
Rejected, a follow-up modal captures the reason, and it is posted back to the rep in a thread.
Field mapping
Slack has no record model, so the map is Salesforce fields to the Block Kit message, and the interaction payload back to Salesforce.
| Salesforce | Slack | Notes |
|---|---|---|
Quote.Id | block_id on the actions block | Carried through the interaction payload so the response maps back to the record. |
Owner.Region__c → approver email | users.lookupByEmail → user ID | Resolves the human. IDs do not match across systems. |
Account.Name, Quote.GrandTotal, Quote.Discount__c | section block fields | Formatted for the card. Currency and percent formatted for display. |
| quote record URL | button (link) accessory | Opens the quote in Salesforce. |
| , | Approve / Reject action_id | The two decision actions on the message. |
Quote.Status | ← interaction action_id | approve sets Approved, reject sets Rejected. |
Quote.Approved_By__c | ← interaction user.id | Resolved to the Salesforce user by email, so the CRM shows a person, not a Slack ID. |
Quote.Approved_At__c | ← interaction timestamp | Written on the response, in UTC. |
Quote.Reject_Reason__c | ← follow-up modal submission | Only on reject. |
What syncs, each direction
- Deal alerts. Closed-won, stage regressions, large new opportunities, and stalled deals post to the relevant channel with the record context. (Salesforce to Slack)
- Approval requests. Discounts, non-standard terms, and credit holds post an approval card to a named person and pause the workflow. (Salesforce to Slack)
- Approval decisions. The approve or reject action, the approver, the timestamp, and any reason are written to the record and the run log. (Slack to Salesforce)
- Quick updates. An emoji reaction or a slash command on a deal alert can log an activity or advance a stage, without opening Salesforce. (Slack to Salesforce)
Governance and audit
The same controls apply to this sync as to every other Neblex workload.
- Ordered run log. Every notification and approval is an event log. An approval records the approver's user ID, the decision, and the time, so it is provable later.
- Approval steps. The core feature of this pair: a flow pauses in Slack until a named person responds or a timeout escalates.
- Scoped access. Slack uses OAuth scopes limited to the channels and actions the flows use. Salesforce uses a permission set limited to the objects that are read and written.
- Environments. Build against a Slack test workspace and a Salesforce sandbox, then promote the same flow to production.
Frequently asked questions
Can a Salesforce workflow actually wait for a Slack approval?
Yes. The run pauses at the approval step and resumes only when the person clicks approve or reject, or when a timeout fires and escalates.
Where is the approval recorded?
On the Salesforce record (approver, decision, timestamp, reason) and in the Neblex run log, which keeps the full message and the interaction payload.
How do you keep alerts from becoming noise?
Alerts fire on specific conditions you choose, not every field change, and they carry the context a person needs so they do not have to open Salesforce to act.
Is this different from Slack's own Salesforce app?
Slack's app is good for record previews and channel notifications. This adds approval steps that gate a workflow, write-back to the record, timeout escalation, and the run log.
Does anything get installed in Salesforce?
No. The connector uses the Salesforce APIs through a connected app. No managed package or Apex.
Connectors on this page
Salesforce
CRM
- Operations
- 1,296
- Typed outputs
- 57.9%
- Change triggers
- 95 (poll)
- Authentication
- OAuth2
Slack
Applications
- Operations
- 317
- Typed outputs
- 100%
- Change triggers
- Poll or inbound webhook
- Authentication
- Bearer
Bring one real integration
We will build it with you against your own systems, with the run log open.