Beginner~8 min setupCommunication & CRMVerified April 2026
Slack logo
Zoho CRM logo

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-time

Use case type

notification

Real-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.

/mo
505005K50K

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.

Zoho CRM account with at least one active Sales Pipeline containing a 'Lost' stage, and at least one deal with a Reason for Loss populated
Zoho CRM user role with read access to the Deals module — Standard or Administrator role works; custom roles need 'View' permission on Deals
Slack workspace admin access or permission to add third-party apps — needed to authorize the Zapier Slack bot
The target Slack channel already created (e.g. #lost-deals or #sales-leadership), with you as a member
Zapier account on at least the Free plan — multi-step Zaps with Filter require Starter ($19.99/month) or higher

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Deal NameDeal_Name
Deal StageStage
AmountAmount
6 optional fields▸ show
Reason for LossReason_For_Loss
CompetitorCompetitor
Account NameAccount_Name
Deal OwnerOwner
Closing DateClosing_Date
Lead SourceLead_Source

Step-by-Step Setup

1

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.

  1. 1Log in at zapier.com
  2. 2Click the orange 'Create Zap' button in the left sidebar
  3. 3The Zap editor opens — you'll see a blank canvas with a 'Trigger' block
What you should see: You should see the Zap editor with an empty trigger block showing 'Click to add a trigger app'.
2

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.

  1. 1Click the empty 'Trigger' block
  2. 2Type 'Zoho CRM' in the search bar
  3. 3Select 'Zoho CRM' from the results
  4. 4Under 'Trigger Event', select 'Updated Deal'
  5. 5Click 'Continue'
What you should see: You should see 'Zoho CRM — Updated Deal' displayed in the trigger block header, and a 'Choose Account' prompt appears below.
Common mistake — Zoho CRM does not offer a native 'Deal Marked as Lost' trigger in Zapier. 'Updated Deal' is the correct approach — you'll filter for Stage = Lost in a later step. Do not use 'New Deal', which only fires on creation.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Zoho CRM as the trigger …
Slack
SL
module added
3

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.

  1. 1Click 'Sign in to Zoho CRM' button
  2. 2In the popup, log in with your Zoho credentials
  3. 3Click 'Accept' on the OAuth permissions screen
  4. 4Back in Zapier, confirm your Zoho email is selected in the account dropdown
  5. 5Click 'Continue'
What you should see: Your Zoho CRM account email appears in the account selector with a green checkmark. The step advances to 'Test trigger'.
Common mistake — If you manage multiple Zoho organizations (like a parent company and a subsidiary), make sure the account you authorize is tied to the correct org. Zoho CRM's OAuth does not let you switch orgs after connecting — you'd need to disconnect and reconnect.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

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.

  1. 1Click 'Test trigger'
  2. 2Wait 5-10 seconds for Zapier to poll Zoho CRM
  3. 3Expand the returned records to confirm you can see fields like 'Stage', 'Reason for Loss', and 'Competitor'
  4. 4Click 'Continue with selected record'
What you should see: You see 1-3 deal records listed with expandable field data including Deal Name, Stage, Amount, and Loss Reason fields.
Common mistake — Zoho CRM's 'Reason for Loss' and 'Competitor' fields only appear in Zapier's field list if they contain data in at least one of the 3 sample records pulled. If your test deals are not actually lost deals, those fields will be blank or missing. Mark one real deal as Lost in Zoho CRM before testing so these fields show up.
Zapier
▶ Turn on & test
executed
Slack
Zoho CRM
Zoho CRM
🔔 notification
received
5

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.

  1. 1Click the '+' icon between the trigger and action blocks
  2. 2Click 'Filter' under Built-in Apps
  3. 3In 'Only continue if...', click the field selector and choose '1. Deal Stage' from Zoho CRM
  4. 4Set the condition to '(Text) Exactly matches'
  5. 5Type 'Lost' in the value field (case-sensitive — match exactly how Zoho stores it)
  6. 6Click 'Continue'
What you should see: The filter block shows 'Deal Stage Exactly matches Lost'. When you test it against a non-lost deal, it shows 'This Zap would not have continued' — that's correct behavior.
Common mistake — Zoho CRM stores pipeline stages exactly as you named them in your CRM settings. If your stage is called 'Deal Lost' or 'Closed Lost' instead of 'Lost', the filter will never match and no notifications will fire. Check your Zoho CRM pipeline stages at CRM Settings > Pipeline > Stages before typing the value here.
Slack
SL
trigger
filter
Deal Stage
matches criteria?
yes — passes through
no — skipped
Zoho CRM
ZO
notified
6

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.

  1. 1Click '+' to add an action step
  2. 2Search for 'Formatter by Zapier' and select it
  3. 3Choose action event 'Text', then select 'Merge'
  4. 4In the 'Input' field, map these Zoho CRM fields in sequence: Deal Name, Amount, Stage, Reason for Loss, Competitor
  5. 5Set the 'Separator' to a newline character by clicking the field and pressing Shift+Enter
  6. 6Click 'Continue', then 'Test action'
What you should see: The test output shows a single merged text block with each field on its own line, like: 'Acme Corp / $24,000 / Lost / Price too high / Salesforce'.
Common mistake — If the Competitor field is blank on the source deal, Formatter will output a blank line in the middle of your message. Wrap each optional field with a label prefix (e.g., 'Competitor: ' + value) so an empty field is at least labeled rather than silently missing.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
7

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.

  1. 1Click '+' to add an action
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Send Channel Message' as the action event
  4. 4Click 'Sign in to Slack'
  5. 5Authorize Zapier in the Slack OAuth popup — select the correct workspace
  6. 6Click 'Continue'
What you should see: Your Slack workspace name appears in the account dropdown with a green checkmark. The action setup panel expands to show message configuration fields.
8

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:.

  1. 1In 'Channel', select or type your management Slack channel (e.g. #lost-deals)
  2. 2In 'Message Text', click the field and insert the merged Formatter output
  3. 3Prepend each line with a label: '*Deal:* ', '*Amount:* ', '*Lost Reason:* ', '*Competitor:* '
  4. 4Set 'Bot Name' to 'Deal Tracker'
  5. 5Optionally set 'Bot Icon' to ':chart_with_downwards_trend:'
  6. 6Click 'Continue'
What you should see: The message preview in Zapier shows a readable multi-line Slack message with bold labels and deal data filled in from the test record.
Common mistake — Slack's 'Send Channel Message' requires the Zapier bot to be a member of private channels. If your management channel is private, open it in Slack, type '/invite @Zapier', and add the bot before testing. Otherwise the Zap will fail silently with a 'channel_not_found' error.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

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.

  1. 1Click 'Test action' in the Slack step
  2. 2Open Slack and navigate to your target channel
  3. 3Confirm the test message appears with correct field data
  4. 4Check that 'Lost Reason' and 'Competitor' are populated (if your sample deal had those values)
  5. 5If the message looks correct, click 'Publish Zap'
What you should see: A Slack message appears in your channel within 30 seconds showing deal name, amount, lost reason, and competitor pulled from the Zoho CRM test record.
Common mistake — The test message is a real Slack post — it will be visible to everyone in that channel. Either test in a private #zap-testing channel first, or delete the test message from Slack before going live.
10

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.

  1. 1Click the 'Turn on Zap' toggle in the top right of the editor
  2. 2Confirm the Zap status shows 'On'
  3. 3In Zoho CRM, mark a test deal as Lost and add a reason code
  4. 4Wait up to 15 minutes for Zapier's polling cycle
  5. 5Check Slack for the notification and check zapier.com/app/history for the run log
What you should see: The Zap History shows a successful run with green checkmarks on all steps. The Slack channel shows the live notification with correct deal data.
Common mistake — Free Zapier accounts poll every 15 minutes. Starter plans poll every 5 minutes. If your team needs faster alerts, this latency may be unacceptable — Make.com with Zoho's webhook module fires within 30 seconds of the deal update.

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

VerdictWhy Zapier for this workflow

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.

Cost

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.

Tradeoffs

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 AnalysisAdd 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 LeadershipBuild 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 LossAdd 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

Was this guide helpful?
Slack + Zoho CRM overviewZapier profile →