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

How to Send Zoho CRM Deal Stage Updates to Slack with Zapier

Automatically posts a Slack message to a specified channel whenever a deal's stage changes in Zoho CRM, so your team sees progress updates without checking the CRM.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Sales teams of 5–30 people who live in Slack and want instant visibility into pipeline movement without giving everyone CRM access.

Not ideal for

Teams moving 50+ deals per day — at that volume, Slack noise becomes a problem and a digest report (batched hourly) is a better pattern.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 12-person SaaS sales team posts all deal stage changes to a #pipeline Slack channel so AEs, SDRs, and the VP of Sales see movement the moment it happens. Before this Zap, reps logged into Zoho CRM manually 4–5 times per day and still missed stage changes for hours — or heard about closed-won deals in the weekly standup, days late. Now a Closed Won deal triggers a celebratory message in under 5 minutes, and a deal stuck in Negotiation for 7+ days is visible to anyone who scrolls up.

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 Deal pipeline and deals in it — Zapier needs real records to pull sample data during setup
Zoho CRM user account with 'Read' permissions on the Deals module — admin access is not required, but restricted roles can block the OAuth connection
Slack account with permission to add apps to your workspace — if you're not a Slack admin, get an admin to pre-approve the Zapier app at slack.com/apps
Access to the Slack channel where deal updates should post — you must be a member of private channels before Zapier can post to them
Zapier account — Free tier works but polls every 15 minutes; Professional ($49/month) reduces polling to 2 minutes, which matters for time-sensitive deal updates

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Deal NameDeal_Name
StageStage
Owner NameOwner.name
5 optional fields▸ show
AmountAmount
Close DateClosing_Date
Account NameAccount_Name
ProbabilityProbability
Modified TimeModified_Time

Step-by-Step Setup

1

zapier.com > Dashboard > Create Zap

Create a new Zap in Zapier

Log in at zapier.com and click the orange 'Create Zap' button in the top left sidebar. You'll land on the Zap editor, which shows a two-panel layout — the trigger step on the left and a blank canvas on the right. Give your Zap a name at the top (something like 'Zoho Deal Stage → Slack') so it's findable later. You won't connect any apps yet — this step is just orientation.

  1. 1Log in at zapier.com
  2. 2Click 'Create Zap' in the left sidebar
  3. 3Click the Zap name field at the top and type 'Zoho Deal Stage → Slack'
  4. 4Confirm the editor opens with a 'Trigger' block and an empty 'Action' block below it
What you should see: You should see the Zap editor with an untitled trigger block and your new Zap name saved at the top.
2

Zap Editor > Trigger > Search Apps

Set Zoho CRM as the trigger app

Click the trigger block and search for 'Zoho CRM' in the app search bar. Select it from the results. You'll then be prompted to choose a trigger event — pick 'Updated Module Entry' from the dropdown. This trigger fires every time a record in any Zoho CRM module is modified, which is how Zapier detects stage changes since Zoho CRM doesn't emit a dedicated 'stage changed' webhook.

  1. 1Click the trigger block
  2. 2Type 'Zoho CRM' in the search bar
  3. 3Select 'Zoho CRM' from the results
  4. 4Click the 'Trigger Event' dropdown
  5. 5Select 'Updated Module Entry'
What you should see: You should see 'Zoho CRM — Updated Module Entry' displayed in the trigger block with a prompt to connect your account.
Common mistake — Zoho CRM does not offer a native 'Deal Stage Changed' trigger. 'Updated Module Entry' polls every 5–15 minutes and fires on ANY field update — not just stage changes. You'll filter by stage in a later step. If sub-5-minute latency matters, consider Make with a webhook instead.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Zoho CRM as the trigger …
Slack
SL
module added
3

Zap Editor > Trigger > Zoho CRM > Sign In

Connect your Zoho CRM account

Click 'Sign in to Zoho CRM' and a popup window will open asking you to authorize Zapier. Log in with your Zoho credentials and click 'Accept' on the permissions screen. After authorization, Zapier will redirect you back to the editor. Select the newly connected account from the dropdown and confirm it shows your Zoho org name.

  1. 1Click 'Sign in to Zoho CRM'
  2. 2Log in with your Zoho email and password in the popup
  3. 3Click 'Accept' on the Zoho permissions screen
  4. 4Select your Zoho CRM account from the 'Choose account' dropdown in Zapier
What you should see: You should see a green checkmark and your Zoho org name listed under the account selector.
Common mistake — If your Zoho org uses a regional data center (EU, AU, IN, JP, CA), the OAuth connection can silently fail or connect to the wrong region. Go to Zoho CRM > Admin Panel > Data Center to confirm your region, then make sure you're logging into the correct Zoho domain (e.g., crm.zoho.eu) in the popup.
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 > Configure > Module

Configure the trigger module and filter

In the trigger configuration panel, set 'Module' to 'Deals' from the dropdown. Leave the other fields at their defaults for now. Click 'Continue' and then 'Test trigger' — Zapier will pull in the 3 most recently updated deals from your Zoho CRM. Review the returned data to confirm you can see the 'Stage' field in the payload. Note the exact field name Zapier uses — it will appear as something like 'Stage' or 'Deal_Stage' depending on your CRM setup.

  1. 1Click the 'Module' dropdown and select 'Deals'
  2. 2Click 'Continue'
  3. 3Click 'Test trigger'
  4. 4Scroll through the returned sample data and locate the 'Stage' field
  5. 5Note the exact label Zapier shows for the stage field
What you should see: Zapier should display sample data from 3 recently updated deals, each showing fields like Deal Name, Stage, Amount, Close Date, and Owner.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Zoho CRM
ZO
notified
5

Zap Editor > + > Filter by Zapier > Only continue if

Add a Filter step to catch only stage changes

Click the '+' icon between the trigger and the action to add a step. Search for 'Filter' and select 'Filter by Zapier.' Set it to 'Only continue if...' and map the 'Stage' field from the Zoho trigger. Because Zapier's polling trigger fires on any field update, this filter prevents Slack messages from firing when unrelated fields (like deal amount or contact name) are updated. Add a condition: 'Stage' + 'Text exactly matches' and enter each stage value you want to notify on — or use 'is not empty' if you want all stage changes covered.

  1. 1Click the '+' icon between trigger and action
  2. 2Search for 'Filter' and select 'Filter by Zapier'
  3. 3Click 'Only continue if...'
  4. 4Click the first field selector and choose 'Stage' from the Zoho trigger data
  5. 5Set the condition to 'Text exactly matches' and enter your target stage (e.g., 'Closed Won')
  6. 6Click 'Add AND/OR condition' to add additional stages if needed
What you should see: The filter block should show your condition logic, and when you click 'Continue,' Zapier will confirm whether your sample data passes or fails the filter.
Common mistake — Stage values in Zoho CRM are case-sensitive in Zapier filters. If your pipeline stage is 'Closed Won' but you type 'closed won', the filter will never pass. Copy the exact stage string from the sample data pulled in Step 4.
6

Zap Editor > + > Search Apps > Slack > Send Channel Message

Add Slack as the action app

Click the '+' below the filter step to add an 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. Click 'Continue' and then 'Sign in to Slack' to connect your workspace. You'll be redirected to Slack's OAuth screen to authorize Zapier.

  1. 1Click the '+' below the filter step
  2. 2Type 'Slack' in the search bar and select it
  3. 3Choose 'Send Channel Message' from the action event dropdown
  4. 4Click 'Continue'
  5. 5Click 'Sign in to Slack' and authorize Zapier in the Slack popup
What you should see: You should see 'Slack — Send Channel Message' in the action block with a green connected account badge showing your Slack workspace name.
Common mistake — Zapier's Slack integration posts as the 'Zapier' bot by default. If your Slack workspace has a bot name policy or your channel is restricted to specific apps, the message may be blocked. Check Slack > Settings > Connected Apps to confirm Zapier is listed before testing.
7

Zap Editor > Slack Action > Configure

Configure the Slack message content

In the action configuration panel, select the Slack channel where deal updates should go (e.g., #pipeline or #deals). Then craft the message text using dynamic fields from your Zoho trigger data. Click into the 'Message Text' field and use the insert data icon to map fields: deal name, new stage, amount, owner, and close date. Write a clear, human-readable message — for example: '🎉 *[Deal Name]* moved to *[Stage]* | Amount: $[Amount] | Owner: [Owner Name] | Close Date: [Close Date].' Set 'Send as a bot?' to Yes and optionally customize the bot username to something like 'Zoho CRM'.

  1. 1Click the 'Channel' dropdown and select your target Slack channel (e.g., #pipeline)
  2. 2Click into the 'Message Text' field
  3. 3Type your message template and use the insert icon (lightning bolt) to map Zoho fields: Deal Name, Stage, Amount, Owner Name, Close Date
  4. 4Set 'Send as a bot?' to Yes
  5. 5Optionally set Bot Name to 'Zoho CRM' and add a bot icon emoji
What you should see: The message text field should show a mix of static text and orange dynamic field pills (e.g., '[Deal Name]', '[Stage]', '[Amount]').
Common mistake — Zoho CRM returns the deal owner as an object — Zapier typically exposes this as 'Owner Name' and 'Owner ID' as separate fields. Always map 'Owner Name' (not 'Owner ID') to your Slack message, or the message will display a raw numeric ID like '4839201938' instead of 'Sarah Chen.'
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
8

Zap Editor > Slack Action > Message Text

Add an optional emoji or tone based on stage

If you want Closed Won deals to feel different from Stalled deals in Slack, add a second filter path or use Zapier's 'Paths' feature (available on Professional plan and above). Alternatively, include the stage value dynamically in the message and let your team interpret the tone. The simplest approach: add a static emoji prefix in your message text that you manually change per Zap copy — one Zap for Closed Won (🎉), one for Negotiation (🤝), one for Stalled (⚠️). This avoids Paths entirely and keeps each Zap simple.

  1. 1Decide whether to use one Zap for all stages or separate Zaps per stage
  2. 2If one Zap: include the Stage field dynamically and skip emoji differentiation
  3. 3If separate Zaps: duplicate the Zap, update the filter condition, and change the emoji prefix in the message text
What you should see: Each Zap (or your single Zap) should have a distinct, readable message format that makes the deal stage obvious at a glance in Slack.
9

Zap Editor > Slack Action > Test action

Test the full Zap

Click 'Test action' in the Slack step. Zapier will send a real test message to your selected Slack channel using the sample data pulled from Zoho in Step 4. Go to Slack and confirm the message arrived in the correct channel. Check that all dynamic fields populated correctly — no empty brackets or raw IDs. If the message looks right, return to Zapier and click 'Publish Zap.'

  1. 1Click 'Test action' in the Slack configuration panel
  2. 2Switch to Slack and open the target channel
  3. 3Confirm the test message appeared with correct deal name, stage, amount, and owner name
  4. 4Return to Zapier and click 'Publish Zap' if the message looks correct
What you should see: A test message should appear in your Slack channel within 30 seconds, formatted with the deal data from your most recently updated Zoho deal.
Common mistake — The test uses sample data from your most recently updated deal — not a deal that actually changed stage. If that deal's stage field is blank in Zoho, the message may show empty fields. Manually update a real test deal's stage in Zoho CRM before testing for a cleaner result.
Zapier
▶ Turn on & test
executed
Slack
Zoho CRM
Zoho CRM
🔔 notification
received
10

zapier.com > My Zaps > [Your Zap] > Task History

Turn on the Zap and verify the polling interval

Once published, your Zap is live and will poll Zoho CRM every 5–15 minutes depending on your Zapier plan (Free/Starter: 15 minutes, Professional: 2 minutes, Team/Company: 1 minute). To confirm polling is working, change a deal's stage in Zoho CRM and wait for the next poll cycle. The Slack message should arrive within the polling window. Check your Zap's task history at zapier.com/app/history to confirm successful runs.

  1. 1Confirm the Zap toggle is set to 'On' (blue)
  2. 2Open Zoho CRM and manually move a test deal to a new stage
  3. 3Wait one polling cycle (5–15 minutes depending on your plan)
  4. 4Check the Slack channel for the notification
  5. 5Go to zapier.com/app/history and confirm the task shows as 'Success'
What you should see: Your Zap's task history should show a successful run within one polling cycle, and the Slack channel should have a new message with the correct deal information.
Common mistake — The default polling interval is often 15 minutes. If you need faster delivery, check whether your plan supports shorter intervals before assuming it's a bug.

This Code by Zapier step solves one real annoyance: Zoho CRM returns the Amount field as a raw number ('48000') and the Close Date as an ISO string ('2024-03-31'). Paste this into a 'Code by Zapier' step between the Filter and the Slack action. Map the formatted outputs (formattedAmount, formattedCloseDate, stageEmoji) into your Slack message text instead of the raw Zoho fields.

JavaScript — Code Step// Code by Zapier — runs between Filter step and Slack action
▸ Show code
// Code by Zapier — runs between Filter step and Slack action
// Input fields from Zoho CRM trigger (map these in the input section):
// inputData.amount — raw number e.g. '48000'

... expand to see full code

// Code by Zapier — runs between Filter step and Slack action
// Input fields from Zoho CRM trigger (map these in the input section):
// inputData.amount — raw number e.g. '48000'
// inputData.closeDate — ISO date string e.g. '2024-03-31'
// inputData.stage — stage name e.g. 'Closed Won'

const amount = parseFloat(inputData.amount) || 0;
const closeDate = inputData.closeDate ? new Date(inputData.closeDate) : null;
const stage = inputData.stage || '';

// Format currency with commas and dollar sign
const formattedAmount = amount.toLocaleString('en-US', {
  style: 'currency',
  currency: 'USD',
  minimumFractionDigits: 0,
  maximumFractionDigits: 0
});

// Format date as 'Mar 31, 2024'
const formattedCloseDate = closeDate
  ? closeDate.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })
  : 'No close date set';

// Assign emoji based on stage name
const emojiMap = {
  'Closed Won': '🎉',
  'Closed Lost': '❌',
  'Negotiation': '🤝',
  'Proposal Sent': '📄',
  'Qualification': '🔍',
  'Value Proposition': '💡'
};
const stageEmoji = emojiMap[stage] || '📊';

output = [{ formattedAmount, formattedCloseDate, stageEmoji }];

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, already lives in Zapier for other automations, and can tolerate a 2–15 minute delay between a stage change in Zoho CRM and the Slack message. Setup genuinely takes under 20 minutes — you don't need to write a single line of code, and the Zoho CRM and Slack connectors are both well-maintained. The one scenario where you should pick something else immediately: if your team needs real-time notifications (under 60 seconds) for Closed Won deals, Zapier's polling architecture won't cut it — Make with a Zoho webhook fires in under 30 seconds.

Cost

Here's the cost math. Each deal stage change consumes 2–3 Zapier tasks: one for the trigger, one for the filter, one for the Slack action. If your team moves 150 deals through stages per month, that's 300–450 tasks. Zapier's Free plan gives you 100 tasks — you'll hit the ceiling fast. Starter at $19.99/month gives you 750 tasks and 15-minute polling. Professional at $49/month gives you 2,000 tasks and 2-minute polling. Make's equivalent setup costs $9/month for 10,000 operations with 1-minute polling. For this specific workflow, Make is cheaper and faster — Zapier wins only on ease of setup.

Tradeoffs

Here's how the competitors stack up. Make has a dedicated 'Watch Records' trigger for Zoho CRM that supports webhooks — no polling lag, and it natively tracks the previous field value so you can confirm a stage actually changed (not just any field). n8n lets you self-host and run this for free at any volume, and its IF node handles stage-based routing more cleanly than Zapier Paths. Power Automate integrates with Zoho CRM only through a generic HTTP connector — there's no native Zoho app, making setup significantly more complex. Pipedream offers sub-second execution and lets you write custom logic for stage-based routing with 40+ lines of Node.js, which is overkill here unless you're building something more complex. Zapier is still the right call if your team already uses it, has other Zaps running, and values a single platform over optimal cost or speed.

Three things you'll run into after go-live. First, Zoho CRM's 'Updated Module Entry' trigger fires on every field save — if a rep updates a deal's close date and stage at the same time, you get one trigger but with both fields changed. Your filter catches the stage, but if the stage value didn't change (only the date did), the filter fails and no message sends. Fix this by also testing with a deal that changes stage only. Second, Zoho CRM's amount field returns a raw float ('48000.0') — if you paste it directly into Slack, the message reads '$48000.0' instead of '$48,000.' Use the Code by Zapier step above to format it properly before it hits Slack. Third, if your Zoho admin renames a pipeline stage after the Zap is live, the filter condition will silently stop matching and no messages will fire — there's no error, the Zap just runs with 0 tasks sent. Build a monthly check into your ops calendar to verify stage names still match.

Ideas for what to build next

  • Add a Digest for Daily Deal SummariesUse Zapier's Digest feature to batch all stage changes into a single daily or weekly Slack message — reduces noise for high-volume pipelines while keeping the team informed.
  • Post to Different Channels by StageUse Zapier Paths to route Closed Won notifications to #wins, Stalled deals to #at-risk, and new Proposals to #pipeline — each audience gets only the updates relevant to them.
  • Log Stage Changes to a Google SheetAdd a second action step that writes each stage change to a Google Sheet row — gives you a searchable, time-stamped audit trail of your full pipeline history without paying for Zoho CRM's reporting add-ons.

Related guides

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