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

How to Post Lost Deal Alerts to Slack with Make

When a deal is marked Lost in Zoho CRM, Make instantly posts the deal name, loss reason, and competitor to a Slack management channel.

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 checking Zoho CRM manually

Not ideal for

Teams running weekly pipeline reviews — a scheduled digest via n8n or Make's aggregator is cleaner than per-deal pings

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 12-person SaaS sales team posts every lost deal to #revenue-alerts in Slack with the loss reason and the competitor who won the deal. Before this, the VP of Sales found out about lost deals during Friday pipeline reviews — sometimes 5 days after the deal closed. Now the team can follow up on competitive losses within hours and flag patterns like 'we lost 4 deals to Competitor X this week on pricing.'

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

Skip the setup

Import this workflow directly into Make

Copy the pre-built Make blueprint and paste it straight into Make. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Zoho CRM account with admin access — required to create Webhooks and Workflow Rules under Setup > Automation
Zoho CRM Deals module must have custom fields for 'Loss Reason' and 'Competitor' already created — Make cannot receive fields that don't exist in your CRM
Slack workspace with permission to add apps — the Make Slack integration requires the 'chat:write' and 'channels:join' OAuth scopes
Make account on any paid plan or the free tier (free tier gives 1,000 ops/month — enough for ~300 lost deals before you hit the limit)
Target Slack channels (#exec-alerts, #sales-losses) must already exist and the Make Slack bot must be invited as a member

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Deal NameDeal_Name
StageStage
Loss ReasonLoss_Reason
AmountAmount
Deal OwnerOwner
3 optional fields▸ show
CompetitorCompetitor
Account NameAccount_Name
Close DateClosing_Date

Step-by-Step Setup

1

make.com > Scenarios > Create a new scenario

Create a new Make scenario

Log into Make at make.com and click the blue 'Create a new scenario' button in the top right of your Scenarios dashboard. You'll land on the visual scenario canvas — a dark grid where you drag and connect modules. Click the large '+' circle in the center of the canvas to open the app picker. Search for 'Zoho CRM' and select it.

  1. 1Click 'Create a new scenario' in the top right
  2. 2Click the large '+' circle on the canvas
  3. 3Type 'Zoho CRM' in the search box
  4. 4Click 'Zoho CRM' from the results
What you should see: The Zoho CRM module picker panel slides in from the right, showing a list of available triggers and actions.
Common mistake — Make defaults to saving scenarios in your Personal folder. If you're on a team, move it to a shared folder before building — you can't reassign scenarios to team folders after creation without re-creating them.
2

Canvas > Zoho CRM > Watch Records

Set Zoho CRM webhook trigger

From the Zoho CRM module list, select 'Watch Records' — this is the webhook-based trigger that fires the moment a record changes in Zoho. You'll be prompted to connect your Zoho CRM account or select an existing connection. Once connected, set the Module to 'Deals'. Leave the trigger type as 'Watch Records (Instant)' to ensure real-time delivery rather than polling.

  1. 1Select 'Watch Records' from the Zoho CRM trigger list
  2. 2Click 'Add' next to the Connection field to authorize Zoho CRM
  3. 3Complete the Zoho OAuth flow in the popup window
  4. 4Set the 'Module' dropdown to 'Deals'
  5. 5Confirm 'Trigger Type' is set to 'Watch Records (Instant)'
What you should see: The module shows your Zoho CRM account name in the Connection field and 'Deals' in the Module field. A webhook URL appears at the bottom of the module config panel.
Common mistake — Zoho CRM's instant webhook requires you to manually register the webhook URL inside Zoho. Make does NOT do this automatically — you'll do that in the next step. If you skip it, the trigger will never fire.
Make
+
click +
search apps
Slack
SL
Slack
Set Zoho CRM webhook trigger
Slack
SL
module added
3

Zoho CRM > Setup > Automation > Webhooks

Register the webhook in Zoho CRM

Copy the webhook URL shown in the Make module. In a new browser tab, open your Zoho CRM account and navigate to Setup > Automation > Webhooks. Click 'New Webhook', paste the Make URL into the Notify URL field, and set the method to POST. Under 'Parameters', add the fields you want Make to receive: Deal Name, Stage, Loss Reason, Competitor, Deal Amount, and Owner. Save the webhook, then create a Workflow Rule in Zoho (Setup > Automation > Workflow Rules) that fires this webhook when Stage changes to 'Lost'.

  1. 1Copy the webhook URL from the Make module panel
  2. 2In Zoho CRM, go to Setup > Automation > Webhooks
  3. 3Click 'New Webhook' and paste the URL into the 'Notify URL' field
  4. 4Set method to POST and add Deal Name, Stage, Loss Reason, Competitor, Amount, Owner as parameters
  5. 5Save the webhook, then go to Setup > Automation > Workflow Rules
  6. 6Create a new Workflow Rule for Deals triggered on 'Edit', with condition Stage equals 'Lost', and attach the webhook as the action
What you should see: Zoho CRM shows the webhook with status 'Active'. The workflow rule shows the webhook listed as an Instant Action.
Common mistake — Zoho CRM's custom fields for 'Loss Reason' and 'Competitor' may be named differently in your org — check your Zoho admin under Setup > Customization > Modules > Deals > Fields before mapping. Using the wrong API name causes Make to receive null values silently.
4

Canvas > Run once button (bottom left)

Test the trigger with a sample deal

Back in Make, click 'Run once' at the bottom of the scenario canvas to put the scenario in listening mode. Switch to Zoho CRM, open any test deal, change the Stage field to 'Lost', fill in a Loss Reason and Competitor, and save the record. Return to Make within 30 seconds — you should see a data bubble appear on the trigger module showing the incoming payload.

  1. 1Click 'Run once' in Make to start listening
  2. 2In Zoho CRM, open a test deal
  3. 3Set Stage to 'Lost', fill in Loss Reason and Competitor fields, click Save
  4. 4Return to Make and watch for the data bubble to appear on the trigger module
  5. 5Click the bubble to inspect the incoming data structure
What you should see: A numbered bubble (e.g., '1') appears on the Zoho CRM trigger module. Clicking it shows all deal fields as key-value pairs, including your loss reason and competitor values.
Make
▶ Run once
executed
Slack
Zoho CRM
Zoho CRM
🔔 notification
received
5

Canvas > Right-click trigger module > Add Router

Add a Router for conditional routing

Click the small wrench icon to the right of the trigger module, then click 'Add a router'. A Router module appears with two empty branches. This lets you send high-value lost deals to a different channel — for example, deals over $20,000 to #exec-alerts and all others to #sales-losses. If you only need one channel, you can skip the router and connect directly to Slack, but the router adds almost no complexity and future-proofs the scenario.

  1. 1Right-click (or hover and click the dot-menu) on the Zoho CRM trigger module
  2. 2Select 'Add a router'
  3. 3Click the first router branch to open its filter settings
  4. 4Set filter: Deal Amount greater than 20000
  5. 5Leave the second branch with no filter (catches everything else)
What you should see: The canvas shows the trigger module connected to a diamond-shaped Router, with two branches extending to the right.
Common mistake — Router branch order matters — Make evaluates them top to bottom and stops at the first match. Put your most specific conditions on the top branch.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Zoho CRM
ZO
notified
6

Canvas > Router Branch 1 > + > Slack > Create a Message

Add Slack module to the high-value branch

Click the '+' at the end of the first router branch (high-value deals). Search for 'Slack' and select it. Choose the 'Create a Message' action. Connect your Slack account via OAuth — you'll need to authorize Make's Slack app in your workspace. Set the Channel to your management channel (e.g., #exec-alerts). This branch handles deals above your threshold with elevated visibility.

  1. 1Click '+' at the end of the first router branch
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Create a Message'
  4. 4Click 'Add' next to Connection and authorize Slack via OAuth
  5. 5Set Channel to '#exec-alerts' (or type the channel ID directly)
What you should see: The Slack module appears on the canvas connected to branch 1. The Connection field shows your Slack workspace name.
Common mistake — Make's Slack integration requires the bot to be a member of the target channel. If the channel is private, you must manually invite the Make bot user before messages will post — otherwise you'll get a 'channel_not_found' error at runtime.
7

Slack module > Text field > Variable picker

Build the Slack message for high-value losses

In the Slack 'Create a Message' module, click into the 'Text' field. Use Make's variable picker (the small rectangle icon) to pull in deal fields from the Zoho CRM trigger. Build a message that includes deal name, amount, loss reason, competitor, and deal owner. Use Slack's mrkdwn formatting — bold with *asterisks*, newlines with actual line breaks in the field. A clear, structured message takes less than 2 minutes to read and act on.

  1. 1Click into the 'Text' field in the Slack module
  2. 2Type ':red_circle: *Lost Deal Alert* (High Value)'
  3. 3Press Enter, then use the variable picker to insert Deal_Name
  4. 4Add each field on its own line: Amount, Loss Reason, Competitor, Owner
  5. 5Set 'Bot Name' to 'CRM Bot' and optionally add an emoji icon
What you should see: The Text field shows a mix of static text and blue variable tokens (e.g., {{1.Deal_Name}}). Hovering over a token shows the source field name.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
8

Canvas > Router Branch 2 > + > Slack > Create a Message

Add Slack module to the standard branch

Click the '+' at the end of the second router branch (all other lost deals). Add another Slack 'Create a Message' module. Reuse the same Slack connection. Set the channel to #sales-losses or your standard sales notification channel. The message structure can be identical to branch 1, or you can simplify it — standard losses don't need the same urgency formatting.

  1. 1Click '+' at the end of the second router branch
  2. 2Select Slack > Create a Message
  3. 3Choose the same Slack connection from the dropdown
  4. 4Set Channel to '#sales-losses'
  5. 5Build the message text using the same variable tokens as branch 1
What you should see: The canvas now shows the trigger → router → two Slack modules. Both Slack modules show green connection indicators.
9

Slack module > Right-click > Add error handler > Ignore

Add error handling to the scenario

Click the small wrench icon on each Slack module and select 'Add error handler'. Choose the 'Ignore' handler for now — this prevents one failed Slack post from breaking the entire scenario. For production, consider adding a second Slack module in the error handler that pings a #make-errors channel with the raw error text. Right-click anywhere on the canvas and enable 'Auto-commit' to make sure partial successes are saved.

  1. 1Right-click the first Slack module on the canvas
  2. 2Select 'Add error handler'
  3. 3Choose 'Ignore' from the handler type list
  4. 4Repeat for the second Slack module
  5. 5Right-click the canvas background and confirm 'Auto-commit' is enabled
What you should see: Each Slack module now shows a small red error handler branch below it. The scenario canvas shows 'Auto-commit: On' in the bottom status bar.
Common mistake — The 'Ignore' handler silently swallows errors. Set a Make alert (Scenario > Settings > Notifications) to email you if the scenario fails more than 3 times in a row — otherwise you won't know Slack posting broke.
10

Canvas > Run once > Execution History

Test end-to-end with a real deal

Click 'Run once' in Make, then go to Zoho CRM and mark a real test deal as Lost with populated Loss Reason and Competitor fields. Watch Make's execution log — the green checkmarks on each module confirm successful data flow. Check both Slack channels to confirm the message posted correctly. Verify the deal amount routing worked by testing one deal above and one below your threshold.

  1. 1Click 'Run once' to start listening
  2. 2In Zoho CRM, open a test deal worth more than $20,000 and mark it Lost
  3. 3Check Make's execution log for green checkmarks on all modules
  4. 4Verify the message posted to #exec-alerts
  5. 5Repeat with a deal under $20,000 and verify it posts to #sales-losses
What you should see: Make's execution log shows all modules with green checkmarks and operation counts. Both Slack channels show correctly formatted messages with the right deal data.
11

Canvas > Toggle (bottom left) > Scenario Settings > Gear icon

Activate the scenario

Click the toggle in the bottom left of the canvas to switch the scenario from OFF to ON. Make will now run this scenario automatically whenever Zoho CRM sends a webhook. Set the scenario name to something descriptive like 'Zoho Lost Deal → Slack Alert' by clicking the name at the top of the canvas. Check the Scenario Settings (gear icon) and confirm the maximum number of cycles is set to 1 — this is a per-record trigger and should process one deal per execution.

  1. 1Click the ON/OFF toggle at the bottom left of the canvas
  2. 2Confirm the toggle turns blue and shows 'ON'
  3. 3Click the scenario name at the top and rename it to 'Zoho Lost Deal → Slack Alert'
  4. 4Click the gear icon > confirm Max Cycles = 1
  5. 5Click Save
What you should see: The scenario shows as 'Active' in your Scenarios dashboard with a blue dot. The last run time updates within seconds of any new lost deal in Zoho.

Paste this formula into a Make 'Set Variable' module placed between the Router and the Slack modules. It generates a formatted amount string and a severity label based on deal size, so your Slack message shows '$28,500 — HIGH VALUE' instead of a raw number. Add a Set Variable module, name it 'Format Deal Data', and paste the expressions into two separate variable fields named formatted_amount and severity_label.

JavaScript — Custom Function// Variable 1: formatted_amount
▸ Show code
// Variable 1: formatted_amount
// Paste into a Set Variable module → Variable Value field
if(

... expand to see full code

// Variable 1: formatted_amount
// Paste into a Set Variable module → Variable Value field
if(
  {{1.Amount}} >= 1000,
  join(
    ["$", formatNumber({{1.Amount}}, 2, ".", ",")],
    ""
  ),
  join(["$", {{1.Amount}}], "")
)

// Variable 2: severity_label
// Add a second variable in the same Set Variable module
if(
  toNumber({{1.Amount}}) >= 20000,
  "🔴 HIGH VALUE",
  if(
    toNumber({{1.Amount}}) >= 5000,
    "🟡 MID-TIER",
    "⚪ STANDARD"
  )
)

// Variable 3: loss_summary
// Combines reason + competitor into one clean line for the Slack message
if(
  {{1.Competitor}} != "",
  join([{{1.Loss_Reason}}, " (Lost to ", {{1.Competitor}}, ")"], ""),
  {{1.Loss_Reason}}
)

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 Make for this workflow

Use Make for this if your team wants conditional routing logic without writing code. The visual Router module lets you send $50K+ deals to an exec channel and smaller losses to a general sales channel — that's two Slack posts with different content, built in under 10 minutes. Make also handles Zoho CRM's webhook format cleanly out of the box, while platforms like Zapier require you to parse Zoho's nested payload manually. One scenario where you'd skip Make: if your team already lives in n8n and has engineers maintaining it — n8n's code nodes give you more control over payload transformation for the same zero-per-run cost.

Cost

The math here is straightforward. Each scenario run consumes 3-4 Make operations: 1 for the Zoho trigger, 1 for the router, 1-2 for the Slack post. At 100 lost deals per month, that's 400 operations — well within Make's free tier (1,000 ops/month). At 300 deals/month you'll use 1,200 operations and need the Core plan at $9/month. Zapier charges per task: the same 300 deals/month costs $29/month on Zapier's Starter plan (2-step Zaps at $0.05-0.10/task equivalent). Make is cheaper by $20/month at that volume, and cheaper by more as volume grows.

Tradeoffs

Zapier's Zoho CRM integration has one edge here: its 'Updated Deal' trigger is pre-configured and doesn't require you to manually register a webhook in Zoho — Zapier handles that registration automatically, saving about 10 minutes of setup. n8n's Zoho CRM node lets you write a JavaScript filter directly on the incoming payload (e.g., filter for Stage === 'Lost' AND Amount > threshold in one expression) without needing a separate Router module. Power Automate connects natively to Microsoft Teams, not Slack — if your company uses Teams for management comms, Power Automate beats Make for this use case with no translation layer needed. Pipedream gives you a real-time webhook listener with Node.js code steps and costs nothing for low-volume runs. Make is still the right call for most sales teams because the Router + Slack modules are visual, non-engineers can maintain them, and the Zoho integration handles OAuth without API key management.

Three things you'll hit post-launch. First, Zoho's custom field API names don't always match the display names — 'Loss Reason' might be Loss_Reason_1 or a GUID-based name if it was created by a third-party Zoho integration. Check Setup > Customization > Modules > Deals > Fields and look at the 'API Name' column before building. Second, if your Zoho org has multiple sales pipelines, each pipeline may have its own Stage picklist, and 'Lost' in Pipeline A might be 'Closed Lost' in Pipeline B — your Zoho Workflow Rule needs to cover both, or you'll miss deals from one pipeline entirely. Third, Make's free tier pauses scenarios that haven't run in 30 days. If your team has a slow month with zero lost deals, the scenario goes dormant and needs manual reactivation — set a calendar reminder to test it monthly with a dummy deal.

Ideas for what to build next

  • Log lost deals to a Google Sheet for trend analysisAdd a Google Sheets module as a second action after the Slack post. Each lost deal appends a row with date, competitor, reason, amount, and owner — giving you a queryable dataset to spot competitive patterns over time.
  • Create a Zoho CRM task for the deal owner to follow upAdd a second Zoho CRM module after the Slack post that creates a follow-up task assigned to the deal owner. Set the due date 2 days out with a note referencing the loss reason — keeps the learning loop closed without manual work.
  • Build a weekly competitive loss digestCreate a separate Make scenario with a Scheduled trigger (every Monday 8 AM) that queries Zoho CRM for all deals lost in the past 7 days, aggregates them by competitor using Make's Array Aggregator module, and posts a summary table to #exec-alerts. This pairs well with the real-time alert and gives leadership a weekly pattern view.

Related guides

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