If you’ve ever missed a big deal moving forward—or watched your sales team scramble because nobody told them a contract was about to close—you know: email notifications just don’t cut it. You want real-time, custom Slack alerts, right where your team actually lives. You want them only when they matter, and you want them to be reliable.
This guide’s for anyone using Tray to automate processes and tired of “one-size-fits-all” alerts. I’ll show you how to build your own Slack notifications for deal stage changes, avoid the common traps, and keep things maintainable. No over-complication, no fluff.
What You’ll Need
Before you start, make sure you’ve got:
- Access to a Tray workspace (and enough permissions to build workflows)
- Admin or builder access to your company’s Slack workspace
- API access to your CRM (like Salesforce or HubSpot)
- A clear idea of what counts as a “deal stage change” for your team
If you’re missing any of these, stop here and get access first—otherwise, you’ll waste time beating your head against permissions errors.
Step 1: Decide What Actually Matters
I know you want alerts, but here’s the thing: more isn’t better. If you alert on every single deal stage change, your team will start ignoring them. Decide:
- Which stages need alerts (e.g., only “Contract Sent” or “Closed Won”)
- Which deal types or owners matter (e.g., only deals over $10K, or only your team’s deals)
- Who needs to see each alert (a Slack channel, a specific user, or maybe both)
Pro tip: Ask your team what they actually need, not what you think they want.
Step 2: Set Up Your Trigger in Tray
In Tray, you build workflows by dragging and connecting building blocks. Start with a trigger that listens for deal stage changes. Here’s what to do:
-
Create a new workflow
In your Tray dashboard, click “New Workflow.” Give it a name you’ll recognize later, likeSales Deal Stage Alerts
. -
Add your CRM as the trigger
- If you’re using Salesforce: Add the Salesforce connector as the trigger. Set it to fire on “Record Updated” for the Opportunity or Deal object.
- For HubSpot: Use the “Deal Property Changed” trigger.
-
For other CRMs: Use whatever event corresponds to “deal stage changed.”
-
Filter for stage changes you care about
- Use a “Boolean Condition” or “If” step right after your trigger.
- Only continue if the
Stage
field matches your chosen stages (e.g., “Contract Sent,” “Closed Won”). - If possible, filter for amount, owner, etc. here, too—don’t flood Slack with noise.
What doesn’t work:
Don’t try to filter inside Slack later. If you send everything, you’ll end up with alert fatigue or, worse, Slack rate-limiting you.
Step 3: Format the Slack Message
You want a message that’s clear, actionable, and not a giant wall of text. Tray gives you flexibility, but it’s easy to make something ugly or unreadable.
- Add the Slack connector
- Drag in the Slack connector after your filter step.
- Choose “Send Message” or “Post Message to Channel.”
-
Authenticate to Slack (you’ll need admin or at least permission to post to your chosen channel).
-
Customize the message
- Use variables from your CRM trigger (like deal name, stage, owner, amount).
-
Format for readability. Example:
:rocket: Deal stage updated! Deal: {{deal.name}} Stage: {{deal.stage}} Owner: {{deal.owner}} Amount: ${{deal.amount}} View in CRM
-
Add emojis, bold text, or links—but don’t overdo it.
-
Pick the right channel or user
- You can send to a public channel, private group, or DM.
- For high-signal alerts (e.g., “Closed Won”), a public channel is fine.
- For noisy or sensitive alerts, consider a private channel or direct message.
Pro tip:
Test your Slack formatting using Slack’s Block Kit Builder first, then paste the template into Tray.
Step 4: Test (and Actually Try to Break It)
Don’t skip this. Most “it works on my machine” moments come from assuming your workflow covers all edge cases.
- Trigger a deal stage change in your CRM
- Change a stage manually on a test deal.
-
Make sure you hit all the conditions you set up.
-
Check if the Slack alert fires
- Is the message formatted as expected?
- Is it going to the right people?
-
Did the workflow run once (not twice, not zero times)?
-
Test for what you don’t want
- Change a stage you didn’t specify—does it stay quiet?
-
Try with a small deal, or a deal owned by someone not in your team.
-
Look for edge cases
- What if two deals update at once?
- What if required CRM fields are empty?
- What happens if Slack is down, or your auth token expires?
If you find anything weird, fix it now. Don’t trust “should be fine”—trust what you see.
Step 5: Add Fail-Safes (Optional, but Recommended)
Even simple automations break. Tray is robust, but APIs and tokens expire, CRMs change field names, Slack channels get deleted. Here’s how to cover yourself:
- Add error handling steps in Tray. If the Slack message fails, send an alert to email or log it somewhere.
- Log all alerts in a Google Sheet or Airtable for backup.
- Set up a “heartbeat” alert—once a week, Tray pings you to confirm alerts are still running.
Don’t overcomplicate this, but at least make sure you’ll know if alerts silently fail.
Step 6: Roll Out to the Team (and Get Feedback)
Once you’re happy with your workflow:
- Let your team know
- Explain what alerts they’ll see, and where.
-
Point out what’s not included (so they don’t expect everything).
-
Ask for feedback after a week
- Is the signal-to-noise ratio right?
- Are the messages clear?
- Anything you should tweak?
Don’t treat your first version as final. It’s easier to adjust early than after everyone’s built workarounds.
What Not To Do
- Don’t alert on every stage. Seriously—no one wants their Slack blowing up for “Discovery Call Scheduled.”
- Don’t hardcode channel names or user IDs if you can help it. Use environment variables or Tray config files. It’ll save you pain if you ever need to change channels.
- Don’t assume Tray will “just work” forever. Monitor your automations—even the best no-code tools break now and then.
FAQs & Honest Takes
How reliable are Tray’s Slack alerts?
If set up right, pretty solid. But if your CRM API limits you or Slack changes permissions, things can break. Build in basic monitoring.
Is Tray the best tool for this?
Tray is flexible and good for cross-system workflows. If you’re only sending basic alerts from Salesforce to Slack, you could use Salesforce’s built-in Slack integration. But Tray shines if you need complex logic or multi-system data.
Will this annoy my team?
If you send too many alerts, yes. Keep it high-signal. Make it easy for people to mute or snooze channels if needed.
Keep It Simple, Iterate Often
You don’t need a perfect system on day one—just a reliable, useful one. Start small: alert on the most important deal stage changes, get feedback, and tweak as you go. Tray makes it easy to update workflows, so don’t be afraid to adjust. The goal is to keep your alerts relevant, not to show off how much you can automate. If you ever catch yourself building a 30-step workflow, step back and ask if you’re solving a real problem or just making it complicated.
Stay skeptical, keep it tight, and you’ll build something your team actually thanks you for.