

How to Send Close Lead Assignments to Slack with Zapier
When a lead is assigned in Close, Zapier instantly posts a Slack message to the assigned rep's dedicated channel with company size, lead source, and contact details.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Inside sales teams of 5-30 reps who assign leads manually in Close and need reps to respond within minutes, not hours.
Not ideal for
Teams with high lead volume (500+/day) or complex routing logic — use Make or n8n instead to avoid Zapier task costs and add conditional branching.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS sales team routes inbound demo requests into Close and assigns them to reps by territory. Before this automation, reps refreshed Close manually and routinely missed new leads for 30-90 minutes. After setup, each rep gets a Slack message in their personal #leads-[name] channel within 90 seconds of assignment, including company size and lead source so they can prioritize before picking up the phone.
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 | ||
| Assigned To Name | assigned_to_name | |
| Lead Name / Company | display_name | |
| Lead URL | id | |
6 optional fields▸ show
| Lead Source | lead_source |
| Number of Employees | num_employees |
| Primary Contact Email | contacts[0].emails[0].email |
| Primary Contact Phone | contacts[0].phones[0].phone |
| Lead Status | status_label |
| Date Created | date_created |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap in Zapier
Log in to zapier.com and click the orange 'Create Zap' button in the top-left sidebar. You'll land on the Zap editor — a two-column layout with a trigger panel on the left and a canvas on the right. Give your Zap a name at the top: something like 'Close Lead Assigned → Slack Notification'. This name appears in your Zap history and task logs, so make it descriptive.
- 1Click 'Create Zap' in the left sidebar
- 2Click the name field at the top and type 'Close Lead Assigned → Slack Notification'
- 3Click the trigger panel labeled 'Trigger' to open the app search
Zap Editor > Trigger > App & Event
Set Close as the trigger app
In the trigger panel, type 'Close' into the app search bar and select the Close CRM app (it shows the Close logo — a blue circle with a white C). Click 'Choose event' and select 'New or Updated Lead' from the dropdown. This trigger uses Close's webhook infrastructure, so it fires within seconds of a change, not on a polling schedule.
- 1Type 'Close' in the app search field
- 2Select 'Close' from the results list
- 3Click 'Choose event' dropdown
- 4Select 'New or Updated Lead'
Close > Settings > API Keys
Connect your Close account
Click 'Sign in to Close' — Zapier opens a popup asking for your Close API key. Go to Close > Settings > API Keys, generate a new key, and paste it into Zapier. Give it a label like 'Zapier Integration' so you can identify it later. Zapier will test the connection by making a lightweight API call and show a success state.
- 1Click 'Sign in to Close' in the Zapier trigger panel
- 2In a new tab, go to Close > Settings > API Keys
- 3Click 'Generate API Key', copy the key
- 4Paste the key into the Zapier popup and click 'Yes, Continue to Close'
Zap Editor > Trigger > Test
Test the Close trigger and pull sample data
Click 'Test trigger' — Zapier pulls the 3 most recently updated leads from your Close account to use as sample data. Scan the returned fields to confirm you see 'assigned_to', 'lead_source', 'company', 'num_employees', and contact details. If your sample leads are missing 'assigned_to', it means those leads were never assigned — go to Close, assign a test lead, then re-run the test.
- 1Click 'Test trigger'
- 2Review the returned sample data fields
- 3Confirm 'assigned_to_id' and 'assigned_to_name' appear in the list
- 4If missing, assign a lead in Close and click 'Test trigger' again
Zap Editor > + > Filter by Zapier
Add a Filter to catch only assignment changes
Click the '+' button below the trigger step and add a 'Filter by Zapier' action. This step prevents the Zap from firing on every lead update — you only want it to fire when a lead gets assigned or reassigned. Set the filter condition to: 'Assigned To Name' exists (is not empty). If your team also needs to catch reassignments, add a second condition watching for 'Assigned To Name' changed — but 'exists' covers most cases.
- 1Click the '+' button below the trigger step
- 2Search for 'Filter by Zapier' and select it
- 3Set Field to 'Assigned To Name'
- 4Set Condition to '(Text) Exists'
- 5Click 'Continue'
Zap Editor > + > Formatter by Zapier > Text > Compose
Add a Formatter step to build the Slack message
Click '+' to add another step and choose 'Formatter by Zapier', then select 'Text' and the 'Compose' transform. This lets you build a clean, multi-line Slack message by combining Close fields into a single text block. You'll reference dynamic fields from the trigger — company name, assigned rep name, lead source, employee count, and primary contact email. This avoids hacking together messy text inside the Slack message template itself.
- 1Click '+' below the Filter step
- 2Search for 'Formatter by Zapier' and select it
- 3Choose 'Text' as the action
- 4Choose 'Compose' as the transform
- 5In the 'Input' field, build your message using the template below
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Zap Editor > + > Slack > Send Channel Message
Connect Slack and choose the Send Channel Message action
Click '+' to add the final action step. Search for 'Slack' and select it. Choose 'Send Channel Message' as the action event — this posts a message to a specific channel rather than a DM. You'll connect your Slack workspace by clicking 'Sign in to Slack' and authorizing Zapier through OAuth. Make sure you authorize with an account that has access to the rep-specific channels you want to post in.
- 1Click '+' below the Formatter step
- 2Search for 'Slack' and select it
- 3Select 'Send Channel Message' as the action event
- 4Click 'Sign in to Slack'
- 5Authorize Zapier in the Slack OAuth popup
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Slack Action > Configure > Channel
Map the Slack channel dynamically by rep name
In the 'Channel' field of the Slack action, you have two options: hardcode a single channel like #new-leads, or route to rep-specific channels like #leads-sarah or #leads-marcus. For rep-specific routing, type the channel prefix '#leads-' and then insert the 'Assigned To Name' dynamic field from Close. Zapier will concatenate these into a channel name like '#leads-sarah'. Your Slack channels must already exist and follow the exact naming convention — Zapier will throw an error if the channel doesn't exist.
- 1Click into the 'Channel' field
- 2Type '#leads-' as a static prefix
- 3Click the '+' icon to insert a dynamic field
- 4Select 'Assigned To Name' from the Close trigger data
- 5Verify the preview shows '#leads-[rep name]'
Zap Editor > Slack Action > Configure > Message Text
Configure the Slack message content
In the 'Message Text' field, insert the composed message output from your Formatter step. Add a Bot Name like 'LeadBot' and upload a small icon emoji (🎯 works well) under 'Bot Icon'. Set 'Send as Bot' to true — this prevents the message from showing as your personal Zapier account name. Leave 'Link Names' set to true so @mentions in the message resolve to actual Slack users if you include them.
- 1Click into 'Message Text' and insert the Formatter output field
- 2Set 'Bot Name' to 'LeadBot'
- 3Set 'Bot Icon' to ':dart:'
- 4Set 'Send as Bot?' to 'True'
- 5Set 'Link Names?' to 'True'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Slack Action > Test
Test the full Zap end-to-end
Click 'Test action' — Zapier will post a real message to the Slack channel using your sample Close data. Go to Slack immediately and confirm the message arrived in the correct channel with the right formatting. Check that the company name, lead source, employee count, and contact email all display correctly. If the channel lookup fails, you'll see a specific error message like 'channel_not_found' — go back to step 8 and verify the channel name format.
- 1Click 'Test action'
- 2Open Slack and navigate to the channel that should have received the message
- 3Confirm all fields display correctly
- 4If you see 'channel_not_found', go back to the Channel field and fix the naming
Zap Editor > Publish
Turn on the Zap
Click 'Publish' in the top-right corner of the Zap editor. Zapier will run a final validation check and then activate the Zap. The status indicator at the top will turn from gray to green. From this point, every time a lead is assigned in Close, the filter evaluates it and the Slack message fires within 60-90 seconds. Monitor the Zap's task history for the first 24 hours to catch any channel name mismatches from real lead assignments.
- 1Click the 'Publish' button in the top-right
- 2Confirm the Zap status turns green
- 3Navigate to 'Zap History' in the left sidebar
- 4Assign a test lead in Close and watch for a new task to appear in history within 2 minutes
This Code by Zapier step replaces the Formatter step entirely. It builds the Slack message, constructs the Close lead URL from the lead ID, handles empty fields with fallbacks, and normalizes the rep name into a valid Slack channel slug. Paste this into a 'Code by Zapier' action (JavaScript) inserted between the Filter step and the Slack action. Map inputData fields to the corresponding Close trigger output fields in the input section.
JavaScript — Code Stepconst {▸ Show code
const {
assigned_to_name = '',
display_name = 'Unknown Company',... expand to see full code
const {
assigned_to_name = '',
display_name = 'Unknown Company',
lead_source = 'Unknown',
num_employees = 'Unknown',
contact_email = '',
contact_phone = '',
status_label = 'Unknown',
lead_id = ''
} = inputData;
// Build a valid Slack channel slug from rep name
// e.g. 'Sarah Kim' -> 'sarah-kim'
const repSlug = assigned_to_name
.toLowerCase()
.trim()
.replace(/\s+/g, '-')
.replace(/[^a-z0-9-]/g, '');
// Build direct Close lead URL
const leadUrl = lead_id
? `https://app.close.com/lead/${lead_id}/`
: 'URL unavailable';
// Compose the Slack message with fallbacks for every field
const message = [
`*\ud83c\udfaf New Lead Assigned: ${display_name}*`,
`*Rep:* ${assigned_to_name || 'Unassigned'}`,
`*Contact:* ${contact_email || 'No email'} | ${contact_phone || 'No phone'}`,
`*Source:* ${lead_source} | *Employees:* ${num_employees}`,
`*Status:* ${status_label}`,
`*Close Record:* ${leadUrl}`
].join('\n');
output = [
{
slack_channel: `#leads-${repSlug}`,
slack_message: message,
lead_url: leadUrl,
rep_slug: repSlug
}
];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, you want something live in under 30 minutes, and your lead volume is under 300 assignments per month. Zapier's guided builder handles the Close webhook and Slack OAuth without any configuration headaches. The Filter and Formatter steps are point-and-click, and the whole setup — including testing — takes about 25 minutes. The one scenario where you'd skip Zapier: if you need to detect reassignments (not just first assignments) or route leads based on multiple conditions like territory + company size + lead source. Zapier's Filter can't compare previous vs. current field values, and multi-branch logic requires stacking multiple Zaps, which inflates costs fast.
The math on cost is straightforward. This Zap consumes 3 tasks per successful run: the Filter pass, the Formatter step, and the Slack action. At 100 lead assignments per month, that's 300 tasks — comfortably inside Zapier's Starter plan (750 tasks, $19.99/month). At 300 assignments/month, you hit 900 tasks and need the Professional plan ($49/month). Make handles the equivalent workflow for $9/month (Core plan, 10,000 operations), and at 300 assignments you'd use roughly 1,200 operations — still well inside the limit. The Zapier premium for this specific workflow is $40/month compared to Make once you're above 250 assignments. Below that, the time savings of Zapier's simpler setup is worth the price difference.
Make is better here if you need to compare 'previous assigned_to' vs. 'current assigned_to' — its data store module handles this cleanly. n8n is better if you're self-hosting and want zero per-task cost at any volume; the Close node and Slack node are both native, and you can write inline JavaScript to handle all the channel name normalization without extra steps. Power Automate has a Close connector but it's a premium connector requiring a $15/user/month add-on, making it the most expensive option for this use case with no meaningful feature advantage. Pipedream handles this well for developers — the Close webhook source is built-in and you can write the full message composition and Slack routing in one Node.js step. Zapier wins here specifically on setup speed and the no-code Formatter step, which replaces what would otherwise require custom code in every other platform.
Three things you'll hit after launch. First, Slack channel name normalization: rep names in Close rarely match Slack channel slugs exactly. A rep named 'María García' will break channel lookup immediately — the Formatter lowercase step handles English names but not accented characters or hyphens vs. underscores. Build a naming convention doc and enforce it. Second, Close's API returns the assigned_to field as an object in some plan tiers, which means Zapier surfaces it as 'Assigned To' (raw object) rather than 'Assigned To Name' (string) — always expand the nested fields in the dynamic field picker or you'll get '[object Object]' in your Slack messages. Third, if your team uses Close's built-in sequences, a lead moving through sequence steps triggers multiple 'New or Updated Lead' webhook calls in quick succession. The Filter will pass all of them if the rep is still assigned, flooding the channel with duplicate notifications. Add a Digest by Zapier step or deduplicate on lead ID if sequences are part of your workflow.
Ideas for what to build next
- →Add a Lead Response Tracker Back to Close — When a rep replies in the Slack thread, use a second Zap (Slack New Thread Reply → Close Create Activity) to log the response time back to the lead record in Close. This gives you data on how fast reps are actually acting on notifications.
- →Build a Daily Unresponded Leads Digest — Use a scheduled Zap that queries Close for leads assigned more than 2 hours ago with no activity logged, then posts a digest to a #sales-ops channel. This catches leads that slipped through without a reply.
- →Route High-Value Leads to a Separate Priority Channel — Add a second Filter + Slack branch that checks 'Num Employees > 200' or 'Lead Source = Enterprise Demo' and posts those leads to a #hot-leads channel with a @channel mention, in addition to the rep's personal channel.
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