Slack Integration
Post lead and call notifications to Slack channels, with per-event channel routing and a smart-debounce queue.
Benefits
- Real-time alerts: New leads, qualifications, bookings, cancellations, and outcomes all post to Slack
- Per-event routing: Send each event type to a different channel (or several channels)
- Smart debouncing: A "New lead" message waits a few minutes — if the prospect qualifies or books, the earlier message is replaced so your channel stays clean
- Rich previews: Each message includes prospect details, the event name, custom form fields, and a one-click "Open in SalesCal" button
Connecting Slack
- Go to Settings > Integrations
- Find Slack and click Add to Slack
- A Slack popup opens. Pick the workspace you want to connect, review the requested permissions, and click Allow
- You're redirected back to SalesCal and the integration card now shows the workspace name and your name as the connector
Required Permissions
SalesCal requests these Slack scopes:
| Scope | Purpose |
|---|---|
chat:write | Post messages in channels the bot is in |
chat:write.public | Post in public channels without joining first |
channels:read | List your public channels in the channel picker |
groups:read | List private channels the bot has been added to |
team:read | Show your workspace name and icon on the connection card |
users:read | Resolve Slack users for future @mentions |
users:read.email | Match SalesCal team members to Slack users by email |
SalesCal does not read your message history. The bot only posts messages it generates from SalesCal events.
Event Routing
Once connected, the Event routing card lists every event you can pipe into Slack. For each event you choose:
- On / off — enable or disable the event
- Channels — one or many channels to post to. Public channels show with
#; private channels show with a lock icon. The bot must be a member of any private channel you select - Test button — when an event is enabled and at least one channel is selected, this sends a sample message to the first selected channel so you can confirm it lands
The 8 supported events:
| Event | When it fires |
|---|---|
| New lead | A prospect entered their name + email or phone on the booking form |
| Qualified | The prospect submitted the form and passed your qualification rules |
| Disqualified | The prospect submitted the form and was disqualified |
| Call booked | A prospect picked a time and confirmed |
| Call rescheduled | An existing booking moved to a new time |
| Call cancelled | A booking was cancelled |
| No-show | The meeting outcome was set to "No-show" |
| Call completed | The meeting outcome was set to "Completed" |
Changes don't take effect until you click Save changes.
New-Lead Delay
The New lead event has a delay slider (default 5 minutes, range 1–30 minutes). When a lead fills in the form, the New-lead message waits this long before posting.
If the prospect qualifies, books, gets disqualified, or completes any other terminal event during the wait, the queued New-lead message is dropped — only the later, higher-signal event is sent. This stops your channel from filling with duplicate noise for the same prospect.
The same debounce applies between "Qualified" and "Booked": if a prospect qualifies and books within 60 seconds, only the booking notification posts.
What's in a Slack Message
Each message uses Slack's Block Kit format and includes:
- Header with an emoji and the event title (e.g. ":sparkles: Qualified lead")
- Prospect details: name (a clickable link that opens the lead in your dashboard), email/phone, the event they're booking, lead score and grade (where applicable), disqualification reason (when disqualified)
- Booking details (booked / rescheduled / cancelled / no-show / completed): scheduled time in the host's timezone, assigned host name and email
- Custom form fields (up to 10, truncated at 200 characters per value)
- Attribution context: UTM source if present, detected city and country if available
- Action button: "Open in SalesCal" links straight to the lead in your dashboard
Per-Team Workspace
Each SalesCal team can connect one Slack workspace. Everyone on the team sees the same Slack settings and the same channel options. Individual users do not have their own Slack connections.
Troubleshooting
"Can't find this private channel in the picker"
The Slack bot needs to be a member of any private channel before SalesCal can post to it. In Slack, open the channel, type /invite @SalesCal, then refresh the channel picker in SalesCal.
"Bot isn't posting to a public channel"
Public channels work without an invite, but only if Slack hasn't restricted public posting at the workspace level. Try inviting the bot to the channel explicitly with /invite @SalesCal.
"Some channels are missing from the picker"
The picker fetches up to ~500 channels for performance. Very large workspaces may have channels that don't appear — invite the bot to the specific channel you need and it will show up.
"Test message didn't arrive"
Confirm the event is toggled on, at least one channel is selected, and the bot is in that channel. If you're impersonating another user from the admin panel, test messages are suppressed to avoid sending fake data to real channels.
"Got a duplicate or out-of-order notification"
This is rare but can happen if Slack's API briefly rate-limits us. Check the message timestamps; if you genuinely see duplicates outside of debounce, contact support.
Disconnecting Slack
- Go to Settings > Integrations > Slack
- Click Disconnect in the top right of the connected card
- Confirm the prompt: "Disconnect Slack? Your channel settings will be lost."
On disconnect, SalesCal revokes the bot token in Slack and removes your channel routing settings. The Slack messages already posted stay where they are.
Privacy & Security
- The bot token is stored encrypted at rest in SalesCal's database
- Messages include prospect data (name, email, phone, custom form answers) — make sure your Slack channels match the level of sensitivity that data deserves
- SalesCal does not subscribe to any Slack events; the integration is outbound only
Best Practices
- Start with one channel. Pipe every event to a single
#salescal-alertschannel for a week, see what's noisy, then split by event type. - Use private channels for outcome events. "No-show" and "Completed" often include host context that's not for the whole company.
- Keep the New-lead delay at 5 minutes. Lower and you get duplicate noise; higher and the signal isn't real-time anymore.
- Test after big workspace changes. If you rename channels or remove the bot, re-run the Test button on a couple of events to confirm routing still works.
Related Guides
- Managing Leads — what each lead state means
- Qualification Rules — controls when "Qualified" vs "Disqualified" fires
- Managing Meetings — outcomes that trigger No-show / Completed