

How to Send Lost Deal Alerts from Zoho CRM to Slack with Zapier
When a deal is marked as Lost in Zoho CRM, Zapier automatically posts a message to a Slack management channel with the deal name, loss reason, and competitor information.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Sales managers at 5-50 person teams who need instant visibility into lost deals without logging into Zoho CRM throughout the day.
Not ideal for
Teams losing 100+ deals per month — the volume of Slack notifications becomes noise; use a daily digest via scheduled report instead.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person B2B SaaS sales team uses this to post every lost deal into a private #deal-losses channel where the VP of Sales and CRO can see reason codes and competitor mentions within minutes. Before this, the sales manager ran a manual Zoho CRM report every Friday and competitive intel was already a week stale by the time it reached leadership. Now, when a rep logs 'Lost to Competitor — Pricing' against a deal, the channel fires within 5 minutes.
What Will This Cost?
Drag the slider to your expected monthly volume.
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
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Deal Name | Deal_Name | |
| Deal Stage | Stage | |
| Amount | Amount | |
6 optional fields▸ show
| Reason for Loss | Reason_For_Loss |
| Competitor | Competitor |
| Account Name | Account_Name |
| Deal Owner | Owner |
| Closing Date | Closing_Date |
| Lead Source | Lead_Source |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap in Zapier
Log into your Zapier account at zapier.com. Click the orange 'Create Zap' button in the top-left sidebar. You'll land on the Zap editor, which opens with an empty trigger block labeled 'Trigger' on the left side of the canvas. This is where you'll connect Zoho CRM as the event source.
- 1Log in at zapier.com
- 2Click the orange 'Create Zap' button in the left sidebar
- 3The Zap editor opens — you'll see a blank canvas with a 'Trigger' block
Zap Editor > Trigger Block > Search Apps
Set Zoho CRM as the trigger app
Click the empty trigger block. A search panel slides in from the right. Type 'Zoho CRM' and select it from the results. Zapier will show a list of available trigger events for Zoho CRM. Choose 'Updated Deal' — this fires whenever any deal record is modified, which is how you'll catch the stage change to Lost.
- 1Click the empty 'Trigger' block
- 2Type 'Zoho CRM' in the search bar
- 3Select 'Zoho CRM' from the results
- 4Under 'Trigger Event', select 'Updated Deal'
- 5Click 'Continue'
Zap Editor > Trigger > Choose Account > Sign in to Zoho CRM
Connect your Zoho CRM account
Click 'Sign in to Zoho CRM'. A popup window opens asking you to authorize Zapier. Log in with your Zoho credentials and click 'Accept' to grant access. Zapier needs read access to your Deals module to pull deal data. Once authorized, the popup closes and your Zoho account email appears in the dropdown.
- 1Click 'Sign in to Zoho CRM' button
- 2In the popup, log in with your Zoho credentials
- 3Click 'Accept' on the OAuth permissions screen
- 4Back in Zapier, confirm your Zoho email is selected in the account dropdown
- 5Click 'Continue'
Zap Editor > Trigger > Test Trigger
Test the trigger to pull sample deal data
Click 'Test trigger'. Zapier polls Zoho CRM for the 3 most recently updated deals in your account. These are displayed as labeled data records you can expand. You need sample data here so Zapier can show you available fields in the next steps — specifically Deal Stage, Loss Reason, and Competitor fields. If no deals appear, update any deal in Zoho CRM manually to generate a test record.
- 1Click 'Test trigger'
- 2Wait 5-10 seconds for Zapier to poll Zoho CRM
- 3Expand the returned records to confirm you can see fields like 'Stage', 'Reason for Loss', and 'Competitor'
- 4Click 'Continue with selected record'
Zap Editor > + Button > Built-in Apps > Filter
Add a Filter step to catch only Lost deals
Click the '+' button between the trigger and the next action block. Select 'Filter' from the built-in Zapier tools (it's listed under 'Built-in Apps'). This filter checks whether the deal's Stage field equals 'Lost' before passing it on to Slack. Without this step, every single deal update in Zoho CRM — stage changes, note additions, field edits — will trigger a Slack notification.
- 1Click the '+' icon between the trigger and action blocks
- 2Click 'Filter' under Built-in Apps
- 3In 'Only continue if...', click the field selector and choose '1. Deal Stage' from Zoho CRM
- 4Set the condition to '(Text) Exactly matches'
- 5Type 'Lost' in the value field (case-sensitive — match exactly how Zoho stores it)
- 6Click 'Continue'
Zap Editor > + Action > Formatter by Zapier > Text > Merge
Add a Formatter step to build the Slack message text
Click '+' to add an action. Search for 'Formatter by Zapier' and select it. Choose the 'Text' action type, then 'Merge' as the transform. This lets you combine multiple Zoho CRM fields — deal name, amount, loss reason, competitor — into a single formatted string you can drop into Slack. This is cleaner than constructing the message inline inside the Slack step, especially when some fields like Competitor may be blank.
- 1Click '+' to add an action step
- 2Search for 'Formatter by Zapier' and select it
- 3Choose action event 'Text', then select 'Merge'
- 4In the 'Input' field, map these Zoho CRM fields in sequence: Deal Name, Amount, Stage, Reason for Loss, Competitor
- 5Set the 'Separator' to a newline character by clicking the field and pressing Shift+Enter
- 6Click 'Continue', then 'Test action'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Zap Editor > + Action > Slack > Send Channel Message
Add Slack as the action app
Click '+' to add the next action. Search for 'Slack' and select it. Choose 'Send Channel Message' as the action event — this posts a message to a public or private Slack channel. You'll connect your Slack workspace in the next sub-step. The bot will post as a Zapier-owned Slack app by default, but you can customize the bot name and icon in the action configuration.
- 1Click '+' to add an action
- 2Search for 'Slack' and select it
- 3Choose 'Send Channel Message' as the action event
- 4Click 'Sign in to Slack'
- 5Authorize Zapier in the Slack OAuth popup — select the correct workspace
- 6Click 'Continue'
Zap Editor > Slack Action > Configure
Configure the Slack message content
In the 'Channel' field, type or select your target channel name — for example, #lost-deals or #sales-leadership. In the 'Message Text' field, click into it and map the merged output from the Formatter step. Add static labels so the message is readable at a glance: include 'Deal:', 'Amount:', 'Lost Reason:', and 'Competitor:' as prefixes. Set 'Bot Name' to something like 'Deal Tracker' and optionally add an emoji icon like :chart_with_downwards_trend:.
- 1In 'Channel', select or type your management Slack channel (e.g. #lost-deals)
- 2In 'Message Text', click the field and insert the merged Formatter output
- 3Prepend each line with a label: '*Deal:* ', '*Amount:* ', '*Lost Reason:* ', '*Competitor:* '
- 4Set 'Bot Name' to 'Deal Tracker'
- 5Optionally set 'Bot Icon' to ':chart_with_downwards_trend:'
- 6Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Slack Action > Test Action
Test the full Zap end-to-end
Click 'Test action' in the Slack step. Zapier sends a real test message to the channel using your sample deal data. Open Slack and navigate to the target channel to verify the message arrived correctly. Check that the deal name, amount, loss reason, and competitor fields all display as expected. If any field shows as blank or displays an internal Zoho ID instead of a label, go back to the Formatter step and adjust the field mapping.
- 1Click 'Test action' in the Slack step
- 2Open Slack and navigate to your target channel
- 3Confirm the test message appears with correct field data
- 4Check that 'Lost Reason' and 'Competitor' are populated (if your sample deal had those values)
- 5If the message looks correct, click 'Publish Zap'
Zap Editor > Toggle (top right) > On
Turn on the Zap and verify the first live trigger
Click the toggle in the top-right corner of the Zap editor to turn it on. The Zap is now active and polling Zoho CRM every 5-15 minutes (depending on your Zapier plan). To verify it works in production, go to Zoho CRM and mark a real deal as Lost with a reason code. Wait up to 15 minutes and check Slack. You can also check Zap History at zapier.com/app/history to confirm the Zap ran and see exactly what data it processed.
- 1Click the 'Turn on Zap' toggle in the top right of the editor
- 2Confirm the Zap status shows 'On'
- 3In Zoho CRM, mark a test deal as Lost and add a reason code
- 4Wait up to 15 minutes for Zapier's polling cycle
- 5Check Slack for the notification and check zapier.com/app/history for the run log
This Code by Zapier step solves the blank competitor problem: if the Competitor field is empty, it substitutes '—' so the Slack message always has a clean, consistent layout. It also formats the Amount as currency and checks for missing Loss Reason. Paste this into a 'Code by Zapier' (JavaScript) step inserted between the Filter and the Slack action, then map its output fields into the Slack message instead of the raw Zoho CRM fields.
JavaScript — Code Step// Code by Zapier — Clean and format Lost Deal fields for Slack▸ Show code
// Code by Zapier — Clean and format Lost Deal fields for Slack // Input data from previous Zoho CRM trigger step: const dealName = inputData.deal_name || 'Unknown Deal';
... expand to see full code
// Code by Zapier — Clean and format Lost Deal fields for Slack
// Input data from previous Zoho CRM trigger step:
const dealName = inputData.deal_name || 'Unknown Deal';
const amount = parseFloat(inputData.amount) || 0;
const account = inputData.account_name || 'Unknown Account';
const owner = inputData.owner || 'Unassigned';
const lostReason = inputData.reason_for_loss && inputData.reason_for_loss.trim() !== ''
? inputData.reason_for_loss
: 'No reason provided';
const competitor = inputData.competitor && inputData.competitor.trim() !== ''
? inputData.competitor
: '—';
const closeDate = inputData.closing_date
? new Date(inputData.closing_date).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
: 'No date set';
const leadSource = inputData.lead_source || 'Unknown';
// Format currency
const formattedAmount = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0
}).format(amount);
// Compose the full Slack message block
const slackMessage = [
':chart_with_downwards_trend: *Deal Lost*',
`*Deal:* ${dealName}`,
`*Amount:* ${formattedAmount}`,
`*Account:* ${account}`,
`*Owner:* ${owner}`,
`*Lost Reason:* ${lostReason}`,
`*Competitor:* ${competitor}`,
`*Close Date:* ${closeDate}`,
`*Lead Source:* ${leadSource}`
].join('\n');
output = [
{
slack_message: slackMessage,
formatted_amount: formattedAmount,
competitor_clean: competitor,
lost_reason_clean: lostReason
}
];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
Use Zapier for this if your sales team is non-technical and you want this live in under an hour. The Zap builder walks you through every field, the Filter step is one click to add, and you don't need to write a single line of code unless you want cleaner message formatting. It's also the right call if you're already paying for Zapier for other workflows — adding one more Zap is essentially free up to your task limit. The one scenario where you should use something else: if your team closes more than 50 deals per month, the 15-minute polling lag on lost deal alerts is genuinely too slow for competitive response. Make.com with Zoho's webhook trigger fires in under 30 seconds.
The math is simple. This Zap consumes 3 tasks per run: one for the trigger poll, one for the Filter step, and one for the Slack action. (Add a fourth if you use the Formatter step.) At 40 lost deals per month, that's 160 tasks — well inside Zapier's Starter plan limit of 750 tasks/month at $19.99/month. If you're already on Zapier Starter for other Zaps, this workflow costs you nothing additional. Make.com's equivalent scenario runs on their free plan up to 1,000 operations per month, so if this is your only automation, Make saves you $20/month.
Make.com handles the biggest pain point in this workflow better than Zapier: field-level change detection. Make can watch specifically for the Stage field changing TO 'Lost', which eliminates the duplicate notification problem when a rep edits a note on an already-lost deal. Zapier can only detect that a deal was updated, not which field changed. n8n gives you more control over message formatting with JavaScript nodes and handles conditional routing natively, but requires self-hosting or a paid cloud plan and a developer to maintain it. Power Automate has a Zoho CRM connector but it's third-party and unreliable — avoid it for this use case. Pipedream handles Zoho's webhook payload cleanly and would let you build smarter deduplication logic, but it's overkill for a two-step notification. Zapier is still the right pick here because the setup speed and reliability outweigh the polling lag for most teams, and the Filter step solves 90% of the noise problem without any code.
Three things you'll run into after going live. First: reps will mark deals as Lost without filling in the Reason for Loss, and your Slack messages will show blank fields. Fix this before launch by making Reason for Loss a required field in Zoho CRM — not after you've gotten three weeks of useless notifications. Second: Zoho CRM's 'Competitor' field is a picklist in some configurations and a free-text field in others — if it's a picklist, Zapier returns the internal option ID rather than the label. Check your test data carefully; if you see numbers instead of competitor names, you'll need to add a lookup step or switch to a text field. Third: if your Zoho CRM admin changes the pipeline stage name from 'Lost' to anything else — even adding a space — the Filter breaks silently and you stop getting notifications. Set a calendar reminder to audit the Filter value quarterly.
Ideas for what to build next
- →Log Lost Deals to a Google Sheet for Trend Analysis — Add a second action to the same Zap that appends each lost deal as a row in a Google Sheet. After 30-60 days you'll have a dataset showing which competitors and loss reasons are most frequent, which is more actionable than individual Slack pings.
- →Send a Weekly Loss Summary Digest to Leadership — Build a separate scheduled Zap that runs every Monday morning, pulls a filtered view from your Google Sheet log, and posts a summary count (e.g. '7 deals lost last week: 4 to price, 2 to competitor X, 1 to no budget') to a leadership channel — reduces the noise of per-deal pings for senior stakeholders.
- →Create a Zoho CRM Task for the Deal Owner After Loss — Add a second action step after the Slack notification that creates a follow-up task in Zoho CRM assigned to the deal owner with a due date 3 days out, prompting them to log a post-mortem note. Closes the loop between the alert and the structured data capture.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup