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

How to Send Daily Sales Digests from Zoho CRM to Slack with Zapier

A scheduled Zapier workflow that pulls deal and pipeline data from Zoho CRM once daily and posts a formatted summary message to a designated Slack channel.

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 reps who want a daily pipeline snapshot in Slack without anyone manually pulling reports from Zoho CRM.

Not ideal for

Teams that need real-time deal alerts — use a webhook-based Zap triggered on stage changes instead.

Sync type

scheduled

Use case type

reporting

Real-World Example

💡

A 12-person SaaS sales team uses this to post a morning digest to #sales-team every weekday at 8 AM showing total open pipeline value, deals closing this week, and yesterday's won/lost count. Before this, the sales manager pulled a Zoho CRM report manually each morning and copy-pasted numbers into Slack — a 10-minute task that got skipped on busy days. Now the digest fires automatically and the team reviews it in standup without anyone touching Zoho CRM first.

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 Manager-level access to the Deals module — read permission is required for Zapier to pull deal records
Slack workspace where you have permission to add apps and post to the target channel (channel must not be private unless you invite the Zapier bot first)
Zapier account on the Starter plan or higher — the Schedule trigger and Code by Zapier both require a paid plan; the free tier does not support multi-step Zaps
Zoho CRM OAuth credentials ready — your Zoho login email/password and knowledge of which data center region your account is on (US, EU, IN, AU, or JP)
A defined set of deal stages in Zoho CRM that distinguish active pipeline from closed deals — the search filter in Step 5 depends on consistent stage naming

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Deal NameDeal_Name
AmountAmount
StageStage
Closing DateClosing_Date
4 optional fields▸ show
Owner NameOwner
Account NameAccount_Name
ProbabilityProbability
Lead SourceLead_Source

Step-by-Step Setup

1

Zapier Dashboard > Create Zap > Trigger > Schedule by Zapier

Create a new Zap and set the Schedule trigger

Log into Zapier and click the orange 'Create Zap' button in the top-left sidebar. In the trigger search box, type 'Schedule' and select the native 'Schedule by Zapier' app. Choose 'Every Day' as the trigger event. This is a built-in Zapier app — no authentication required. You'll configure the exact time in the next screen.

  1. 1Click 'Create Zap' in the left sidebar
  2. 2Click the trigger box and type 'Schedule' in the search field
  3. 3Select 'Schedule by Zapier' from the results
  4. 4Choose 'Every Day' as the trigger event
  5. 5Click 'Continue'
What you should see: You should see a trigger configuration panel with a 'Time of Day' dropdown set to a default time.
Common mistake — Schedule by Zapier fires in UTC. If your team wants 8 AM Eastern, set the time to 13:00 UTC (or 12:00 UTC during daylight saving). Getting this wrong means the digest posts mid-afternoon.
Zapier
+
click +
search apps
Slack
SL
Slack
Create a new Zap and set the…
Slack
SL
module added
2

Trigger > Schedule by Zapier > Configure > Time of Day

Configure the daily schedule time

In the trigger configuration panel, open the 'Time of Day' dropdown and select your desired UTC time. There is no timezone selector here — Zapier always schedules in UTC, so do the math before saving. You can also check 'Day of Week' to restrict to weekdays only by switching to 'Every Week' trigger event instead and selecting Mon–Fri. Click 'Continue' once the time is set.

  1. 1Open the 'Time of Day' dropdown
  2. 2Select the UTC equivalent of your team's morning standup time
  3. 3Optionally toggle to 'Every Week' trigger if you want weekdays only
  4. 4If using 'Every Week', check Mon, Tue, Wed, Thu, Fri checkboxes
  5. 5Click 'Continue'
What you should see: You should see a summary like 'Trigger: Every day at 13:00 UTC' displayed below the configuration panel.
Common mistake — Confirm your workflow timezone matches your business timezone — n8n uses the instance timezone by default. Also verify the workflow is saved and set to Active, since Schedule Triggers won't fire on inactive workflows.
3

Zap Editor > Action > Search for 'Zoho CRM' > Find Records

Add a Zoho CRM search action to pull open deals

Click the '+' button to add the first action step. Search for 'Zoho CRM' and select it. Choose 'Find Records' as the action event — this lets you search for multiple deals based on criteria rather than just looking up a single record. You'll be asked to connect your Zoho CRM account on the next screen. This is where Zapier fetches the pipeline data that will populate your digest.

  1. 1Click the '+' icon below the trigger step
  2. 2Type 'Zoho CRM' in the app search box
  3. 3Select 'Zoho CRM' from the results
  4. 4Choose 'Find Records' as the action event
  5. 5Click 'Continue'
What you should see: You should see a 'Connect a new account' button or a dropdown of previously connected Zoho CRM accounts.
Common mistake — Zapier's 'Find Records' for Zoho CRM returns a maximum of 200 records per search. If your open pipeline has more than 200 deals, you will get a truncated result silently — no error fires. For pipelines over 200 deals, filter by close date or stage before pulling.
4

Zap Editor > Zoho CRM Action > Connect Account > OAuth popup

Authenticate 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' on the permissions screen. Zapier needs read access to CRM modules (Deals, Contacts, Accounts). Once authorized, the popup closes and your account appears in the dropdown. Select it and click 'Continue'.

  1. 1Click 'Sign in to Zoho CRM'
  2. 2Log into your Zoho account in the popup
  3. 3Click 'Accept' on the Zoho permissions screen
  4. 4Select your newly connected account from the dropdown
  5. 5Click 'Continue'
What you should see: You should see your Zoho CRM account email displayed with a green checkmark next to it.
Common mistake — Zoho CRM has data center regions (US, EU, IN, AU, JP). If your Zoho account is on the EU or IN data center, the standard OAuth connection may fail. You need to select the correct data center region when connecting — Zapier doesn't auto-detect it.
5

Zoho CRM Action > Configure > Module: Deals > Search Fields

Configure the Zoho CRM search to target open deals

In the 'Configure' tab, set 'Module' to 'Deals'. In the 'Search Field' dropdown, choose 'Stage' and set the value to exclude Closed Won and Closed Lost — or filter to specific active stages like 'Proposal/Price Quote' and 'Value Proposition'. You can also add a 'Closing Date' filter set to the current or next 7 days to focus on pipeline urgency. This shapes what data ends up in your Slack digest.

  1. 1Set 'Module' to 'Deals'
  2. 2Click 'Add Search Field' and choose 'Stage'
  3. 3Set Stage to any active stage value (e.g. 'Qualification', 'Needs Analysis', 'Value Proposition')
  4. 4Optionally add a second search field for 'Closing Date' and set it to within the next 30 days
  5. 5Click 'Continue'
What you should see: You should see a 'Test' button. After testing, Zapier displays a list of matching deal records pulled from Zoho CRM.
Common mistake — Zapier's 'Find Records' search uses OR logic between multiple values of the same field but AND logic between different fields. If you add Stage and Closing Date as separate fields, both conditions must be true — not just one.
6

Zap Editor > Add Action > Code by Zapier > Run Javascript

Add a Code by Zapier step to aggregate deal data

Click '+' to add another action. Search for 'Code by Zapier' and choose 'Run Javascript'. This step aggregates the list of deal records into summary statistics — total count, total pipeline value, and deals closing this week. Without this step, you'd only be able to post individual deal records, not a rolled-up digest. Paste the aggregation script (see Pro Tip) into the code editor. Map the deals array output from the previous Zoho CRM step into the input data.

  1. 1Click '+' below the Zoho CRM step
  2. 2Search for 'Code by Zapier'
  3. 3Select 'Run Javascript'
  4. 4In 'Input Data', create a key called 'deals' and map it to the output array from the Zoho CRM step
  5. 5Paste the aggregation script into the code editor
What you should see: After clicking 'Test', you should see output variables like 'total_deals', 'total_value', 'closing_this_week' populated with real numbers from your Zoho CRM data.
Common mistake — The input data field in Code by Zapier only accepts string values — Zapier serializes the mapped deal array as a JSON string. Your script must call JSON.parse() on the input before iterating over it, or you'll get a 'deals.forEach is not a function' error.

Paste this into the Code by Zapier 'Run Javascript' step (Step 6). It parses the deal array from Zoho CRM, calculates total deals, total pipeline value, weighted pipeline value, and deals closing within 7 days, then formats currency. Map the output variables directly into your Formatter compose template in Step 7.

JavaScript — Code Step// Input: inputData.deals — JSON string of deal records from Zoho CRM
▸ Show code
// Input: inputData.deals — JSON string of deal records from Zoho CRM
// All monetary values come in as strings from Zoho; parse them
const dealList = JSON.parse(inputData.deals || '[]');

... expand to see full code

// Input: inputData.deals — JSON string of deal records from Zoho CRM
// All monetary values come in as strings from Zoho; parse them

const dealList = JSON.parse(inputData.deals || '[]');

const today = new Date();
const sevenDaysOut = new Date(today);
sevenDaysOut.setDate(today.getDate() + 7);

let totalDeals = dealList.length;
let totalValue = 0;
let weightedValue = 0;
let closingThisWeek = 0;
let closingThisWeekValue = 0;

dealList.forEach(deal => {
  const amount = parseFloat(deal.Amount) || 0;
  const probability = parseFloat(deal.Probability) || 0;
  const closeDate = new Date(deal.Closing_Date);

  totalValue += amount;
  weightedValue += (amount * probability / 100);

  if (closeDate >= today && closeDate <= sevenDaysOut) {
    closingThisWeek++;
    closingThisWeekValue += amount;
  }
});

const fmt = (n) => '$' + Math.round(n).toLocaleString('en-US');

output = [{
  total_deals: totalDeals,
  total_value: fmt(totalValue),
  weighted_value: fmt(weightedValue),
  closing_this_week_count: closingThisWeek,
  closing_this_week_value: fmt(closingThisWeekValue)
}];
7

Zap Editor > Add Action > Formatter by Zapier > Text > Compose

Add a Formatter step to build the Slack message text

Click '+' to add another action. Choose 'Formatter by Zapier' and select 'Text' as the event, then 'Compose' as the transform. In the template field, build your digest message using the output variables from the Code step. Reference fields like total_deals, total_value, and closing_this_week using Zapier's variable picker. Use Slack's mrkdwn formatting: *bold* for headers, newline characters for line breaks. This produces a clean, readable digest without extra line-by-line Slack messages.

  1. 1Click '+' and select 'Formatter by Zapier'
  2. 2Choose 'Text' as the event type
  3. 3Select 'Compose' as the transform
  4. 4In the 'Template' field, type your digest structure and insert variables from the Code step using the variable picker
  5. 5Click 'Continue' and test to see the composed message
What you should see: The test output should show a fully composed Slack message string with real values substituted in, like '*Daily Sales Digest — Jan 15*\n Open Deals: 34\n Total Pipeline: $412,000'.
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}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
8

Zap Editor > Add Action > Slack > Send Channel Message > Connect Account

Connect your Slack account

Click '+' to add the final action. Search for 'Slack' and choose 'Send Channel Message' as the event. Click 'Sign in to Slack' — this opens an OAuth popup where you authorize Zapier to post messages on behalf of your Slack workspace. Select the workspace from the dropdown if you're in multiple. Once authorized, your workspace name appears in the account selector. Click 'Continue'.

  1. 1Click '+' below the Formatter step
  2. 2Type 'Slack' in the app search box 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 and select your workspace
What you should see: Your Slack workspace name should appear with a green checkmark in the account connection field.
Common mistake — Zapier posts as its own bot user by default, not as you. The message will show 'Zapier' as the sender. If your team wants it to appear from a custom bot name, you need a Slack app with a custom bot token — that's outside native Zapier and requires a webhook action instead.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
9

Slack Action > Configure > Channel + Message Text + Bot Settings

Configure the Slack message action

In the 'Configure' tab, select the target Slack channel from the 'Channel' dropdown — type to search if you have many channels. In the 'Message Text' field, map the composed output from your Formatter step. Set 'Send as a bot?' to Yes. Optionally set a 'Bot Name' like 'Sales Digest Bot' and paste in a chart emoji URL for the bot icon. Leave 'Link Names' set to Yes so any @mentions in your digest resolve correctly.

  1. 1Select your target channel from the 'Channel' dropdown (e.g. #sales-team)
  2. 2Click the 'Message Text' field and select the composed output from the Formatter step
  3. 3Set 'Send as a bot?' to 'Yes'
  4. 4Type a bot name like 'Sales Digest Bot' in the 'Bot Name' field
  5. 5Click 'Continue'
What you should see: The test should show a preview of the Slack message. Check your actual Slack channel — you should see the digest message posted by your bot.
Common mistake — Slack channel names are case-sensitive in Zapier's dropdown. If you type '#Sales-Team' but the channel is '#sales-team', Zapier may fail silently or post to the wrong channel. Always confirm by checking the channel after the test.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
10

Zap Editor > Test Zap button (top right)

Test the full Zap end-to-end

Click 'Test Zap' to run all steps in sequence using real data. Watch each step's status — green means it passed, orange means it ran with warnings, red means it failed. Confirm the Slack message landed in your channel with correct numbers. Check that the pipeline value formatting looks right (no raw cents like 412000 instead of $412,000 — handle this in your Code step). Fix any field mapping issues before turning on.

  1. 1Click 'Test Zap' in the top-right of the editor
  2. 2Watch each step's status indicator turn green
  3. 3Open your Slack channel and confirm the digest message appeared
  4. 4Verify the numbers match what you'd expect from your Zoho CRM pipeline
  5. 5Click 'Publish Zap' once all steps pass
What you should see: All steps show green status and a properly formatted digest message appears in your Slack channel within 30 seconds of clicking Test.
Zapier
▶ Turn on & test
executed
Slack
Zoho CRM
Zoho CRM
🔔 notification
received
11

Zapier Dashboard > Zap Name > Task History

Publish and monitor the Zap for the first week

Click 'Publish Zap' to make it live. The Zap will now fire automatically at your configured UTC time each day. For the first 5 business days, check your Zap's Task History in the Zapier dashboard each morning to confirm it ran successfully. Look at the 'Tasks Used' count — each run consumes tasks equal to the number of steps that executed. Set up email notifications in Zapier Settings so you're alerted if a run fails.

  1. 1Click 'Publish Zap' in the top-right of the editor
  2. 2Navigate to the Zapier dashboard and find your Zap in the list
  3. 3Click into the Zap and open the 'Task History' tab
  4. 4Confirm the first scheduled run appears the next morning
  5. 5Go to Account Settings > Notifications and enable failure alerts by email
What you should see: In Task History, you should see a successful run entry each morning at your scheduled time with a green status and the task count for that run.

Scaling Beyond 200+ open deals in Zoho CRM pipeline+ Records

If your volume exceeds 200+ open deals in Zoho CRM pipeline records, apply these adjustments.

1

Filter by Close Date to Stay Under the 200-Record Cap

Zoho CRM's Find Records action in Zapier caps at 200 results with no pagination. If your full pipeline exceeds 200 deals, add a Closing Date filter to restrict results to deals closing within the next 60 or 90 days. This keeps the record count manageable and makes the digest more relevant — deals closing in Q3 don't belong in a daily standup digest anyway.

2

Split Digests by Stage or Owner for Large Teams

If you have 30+ reps and 500+ deals, a single aggregated number loses meaning. Create separate Zaps per sales pod or pipeline stage — one digest for SMB deals, one for Enterprise. Each Zap runs its own Zoho CRM search with stage or owner filters, keeping each result set under the 200-record cap and making each digest actionable for its audience.

3

Use Zoho CRM Reports Instead of Live Search for Accuracy

For pipelines over 100 deals, consider using Zoho CRM's native Reports feature to pre-aggregate data, then pull the report via the Zoho CRM API using a Zapier Webhook step. Reports are pre-computed and bypass the 200-record API search limit. This requires a custom Zoho API connection but is more reliable than real-time record searches at scale.

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 ops team doesn't write code and needs something running in under an hour. The guided Zap builder, native Schedule trigger, and pre-built Zoho CRM and Slack actions mean you can configure the whole thing without touching an API doc. The Code by Zapier step handles the aggregation math without requiring a backend. The one scenario where you'd pick something else: if your pipeline has complex segmentation needs — per-rep digests, multi-region breakdowns, conditional formatting based on deal health — switch to Make, where you can build branching logic visually without writing Javascript.

Cost

Real cost math: this Zap runs 5 steps per execution. At one run per weekday, that's 110 tasks per month. Zapier's Starter plan ($19.99/month) includes 750 tasks — this workflow uses 15% of that budget, leaving room for other Zaps. If you add weekend runs or per-rep digest variants (each a separate Zap), you'll burn through the 750-task limit fast and need the Professional plan at $49/month for 2,000 tasks. Make handles the equivalent for $9/month with 10,000 operations — roughly 5x cheaper for the same output volume. Zapier's advantage here is setup time, not cost.

Tradeoffs

Make does multi-step aggregation better than Zapier for this use case — its Array Aggregator module rolls up deal records natively without requiring a Code step. That alone eliminates a task cost and the JSON parsing headache. n8n lets you self-host the entire workflow for free and has a Zoho CRM node with full search support, making it the right call if your team has a developer and wants zero per-task cost. Power Automate integrates with Zoho CRM through a premium connector ($15/user/month add-on) and its HTML table action produces better-formatted digest content, but the setup is messier and the connector is less reliable than Zapier's. Pipedream handles the aggregation in native Node.js with full async support and costs $0 for this volume. Zapier is still the right call if your team has no technical resources and needs this live today — the tradeoff is cost and flexibility.

Three things you'll hit after setup. First: Zoho CRM OAuth tokens silently expire after 60 days if the connected user's account settings change (password reset, MFA update). The Zap fails with a generic auth error and no Slack message posts — you won't know until you check Task History. Fix this by setting up Zapier failure email alerts on day one. Second: the 'Find Records' step returns Amount as a string like '85000.0', not a number — your Code step must parse it with parseFloat() or currency formatting will break. Third: Slack's mrkdwn renderer in channel messages doesn't support tables. If you try to post a formatted table using spaces or pipes, it renders as a ragged mess on mobile. Use bullet-point lists with em-dashes for alignment instead — they render consistently across desktop and mobile Slack clients.

Ideas for what to build next

  • Add a Weekly Deal Won/Lost SummaryCreate a separate Zap that runs every Monday and pulls Closed Won and Closed Lost deals from the past 7 days in Zoho CRM, then posts a win/loss scorecard to Slack. This pairs with the daily digest to give teams both forward-looking and backward-looking pipeline views.
  • Post Per-Rep Breakdowns to Individual DMsExtend the workflow to loop through each sales rep's deals using a Zoho CRM search filtered by owner, then send a personalized digest via Slack DM instead of a shared channel. Each rep sees only their own numbers without a shared channel post cluttering the team view.
  • Alert on Stale Deals SeparatelyBuild a companion Zap that searches for deals where Last Activity Date is more than 14 days ago and posts a 'Stale Deals' warning to Slack alongside the digest. This turns the digest from a passive report into an actionable prompt for reps to follow up.

Related guides

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