SalesCal Docs
Integrations

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

  1. Go to Settings > Integrations
  2. Find Slack and click Add to Slack
  3. A Slack popup opens. Pick the workspace you want to connect, review the requested permissions, and click Allow
  4. 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:

ScopePurpose
chat:writePost messages in channels the bot is in
chat:write.publicPost in public channels without joining first
channels:readList your public channels in the channel picker
groups:readList private channels the bot has been added to
team:readShow your workspace name and icon on the connection card
users:readResolve Slack users for future @mentions
users:read.emailMatch 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:

EventWhen it fires
New leadA prospect entered their name + email or phone on the booking form
QualifiedThe prospect submitted the form and passed your qualification rules
DisqualifiedThe prospect submitted the form and was disqualified
Call bookedA prospect picked a time and confirmed
Call rescheduledAn existing booking moved to a new time
Call cancelledA booking was cancelled
No-showThe meeting outcome was set to "No-show"
Call completedThe 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

  1. Go to Settings > Integrations > Slack
  2. Click Disconnect in the top right of the connected card
  3. 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-alerts channel 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.