

How to Sync Slack Members to Copper Contacts with Make
Automatically creates a new Copper contact whenever someone joins a designated Slack channel, pulling their Slack profile data into your CRM without manual entry.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams who use specific Slack channels as the source of truth for new partners or clients and want those people in Copper without any manual data entry.
Not ideal for
Teams adding hundreds of members per day — at that volume, a direct Copper API import from your HR or partner system is faster and cheaper.
Sync type
real-timeUse case type
syncReal-World Example
A 20-person consulting firm creates a dedicated #partners Slack channel whenever they kick off a new engagement. Before this automation, someone on the ops team had to manually copy each partner's name and email into Copper — a task that got skipped 30% of the time. Now, the moment a partner is added to #partners, Make fires and a Copper contact exists within 90 seconds, tagged and ready for the account manager to start logging activity against.
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
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| First Name | first_name | |
| Last Name | last_name | |
| Email Address | email_addresses | |
5 optional fields▸ show
| Job Title | title |
| Phone Number | phone_numbers |
| Tags | tags |
| Details / Description | details |
| Assignee | assignee_id |
Step-by-Step Setup
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 corner of the Scenarios dashboard. You'll land on the visual canvas — a dark grid where modules connect left to right. This is where you'll build the entire workflow. Don't rename it yet; focus on getting the trigger set first.
- 1Go to make.com and sign in
- 2Click 'Create a new scenario' in the top-right corner
- 3Wait for the visual canvas to load — you'll see a single grey circle with a '+' in the center
Canvas > + > Slack > Watch Channel Members
Add the Slack trigger: Member Joined Channel
Click the grey '+' circle to open the module search panel on the right. Type 'Slack' and select the Slack app. Scroll through the trigger list and choose 'Watch Channel Members' — this fires instantly when a user is added to a channel via Make's Slack webhook connection. This is an instant trigger, not a poll, so it will react within seconds of the join event.
- 1Click the grey '+' circle on the canvas
- 2Type 'Slack' in the search bar
- 3Select 'Slack' from the results
- 4Scroll to find and click 'Watch Channel Members'
- 5Click 'Add' to place it on the canvas
channel: {{channel}}
ts: {{ts}}
Slack Module > Connection > Add > Slack OAuth
Connect your Slack account
In the configuration panel, click 'Add' next to the Connection field. A pop-up will open asking you to authorize Make's Slack app. Click 'Allow' on the Slack OAuth screen. After authorization, you'll be returned to Make and the Connection dropdown will show your workspace name. Make sure you are authorizing with an account that has access to the channels you want to monitor.
- 1Click 'Add' next to the Connection field in the Slack module panel
- 2Sign in to Slack if prompted
- 3Click 'Allow' on the OAuth permissions screen
- 4Confirm your workspace name appears in the Connection dropdown
Slack Module > Channel > dropdown
Select the target Slack channel
With your Slack account connected, the Channel dropdown will populate with all public channels your account can see. Select the specific channel you want to monitor — for example, #partners or #new-clients. If you need to monitor multiple channels, you'll add a Router module later. For now, pick one channel to validate the flow end to end.
- 1Click the Channel dropdown in the Slack module panel
- 2Type the channel name or scroll to find it
- 3Select the channel (e.g., '#partners')
- 4Click 'OK' to save the module configuration
Canvas > + > Slack > Get a User
Add a Slack Get User Info module
The 'Watch Channel Members' trigger only returns a user ID, not full profile data. You need a second Slack module to fetch the actual name, email, and title. Click the '+' on the right edge of the Slack trigger module to add a new module. Search for Slack again and this time select 'Get a User'. Map the User ID field to the output from the trigger using Make's variable picker — it will appear as '1. User ID'.
- 1Click the '+' on the right side of the Slack trigger module
- 2Search for 'Slack' and select 'Get a User'
- 3In the User field, click the variable picker icon
- 4Select '1. User ID' from the trigger output
- 5Click 'OK' to save
Canvas > Arrow between modules > Set up a filter
Add a Filter to exclude bots and missing emails
Click the small wrench icon on the arrow between the 'Get a User' module and the next module slot — this adds a Filter. Set Condition 1 to: '2. Is Bot' equals 'false'. Add a second condition (AND): '2. Profile: Email' — set the operator to 'Exists'. This ensures only real humans with valid email addresses flow through to Copper. Without this filter, bot joins and users without email addresses will cause errors downstream.
- 1Click the small wrench/filter icon on the connector arrow between 'Get a User' and the next module slot
- 2Set Condition 1: Field = '2. Is Bot', Operator = 'Equal to', Value = 'false'
- 3Click 'Add AND rule'
- 4Set Condition 2: Field = '2. Profile: Email', Operator = 'Exists'
- 5Click 'OK' to save the filter
Canvas > + > Copper > Create a Person > Add Connection
Connect your Copper account
Click the '+' to add a new module after the filter. Search for 'Copper' and select 'Create a Person'. In the connection setup, Copper requires an API key, not OAuth. Open a separate browser tab, go to Copper > Settings > Integrations > API Keys, and generate a new key. Copy it and paste it into Make's Copper connection panel along with the email address tied to your Copper account. This email must match your Copper login exactly.
- 1Click '+' after the filter to add a new module
- 2Search 'Copper' and select 'Create a Person'
- 3Click 'Add' next to the Connection field
- 4In a new tab, go to Copper > Settings > Integrations > API Keys
- 5Copy the API key and paste it into Make's connection panel
- 6Enter the email address associated with your Copper account and click 'Save'
Copper Module > Create a Person > field mapping panel
Map Slack profile fields to Copper contact fields
In the Copper 'Create a Person' module, you'll see fields like Name, Email, Phone, and Title. Click into each field and use the variable picker to pull data from the '2. Get a User' module. Map Full Name to '2. Profile: Real Name', Email to '2. Profile: Email', and Title/Role to '2. Profile: Title'. For the Name field specifically, Copper expects separate First Name and Last Name — use Make's 'substring' formula if you need to split the real name field, or use '2. Profile: First Name' and '2. Profile: Last Name' if Slack has them populated.
- 1Click into the 'First Name' field and select '2. Profile: First Name' from the variable picker
- 2Click into the 'Last Name' field and select '2. Profile: Last Name'
- 3Click into the 'Email' field and select '2. Profile: Email'
- 4Click into the 'Title' field and select '2. Profile: Title'
- 5Click 'OK' to save the Copper module
Canvas > + (before Create a Person) > Copper > Search People
Add a duplicate check before creating the contact
Before the Copper 'Create a Person' module, insert a Copper 'Search People' module. Set the search criterion to Email equals '2. Profile: Email'. Then add a Filter after the search: only proceed if 'Total Count of Persons' equals 0. This prevents duplicate contacts when the same person is re-added to a channel or added to a second monitored channel. This is the step most people skip and regret.
- 1Click the connector between the filter and the 'Create a Person' module to insert a new module
- 2Search 'Copper' and select 'Search People'
- 3Set the Email field to '2. Profile: Email'
- 4Add a new Filter after this module: '3. Total Count of Persons' Equal to '0'
- 5Click 'OK' on both the module and the filter
Canvas > Run once button (bottom toolbar)
Run a test with a real Slack join event
Click 'Run once' at the bottom of the canvas. Then in Slack, manually add a real team member (not a bot) to your monitored channel using '/invite @username'. Return to Make — within 30-60 seconds you'll see execution bubbles appear on each module showing green checkmarks and record counts. Click on the Copper module bubble to confirm the contact was created with the correct name, email, and title.
- 1Click 'Run once' at the bottom of the Make canvas
- 2Switch to Slack and run '/invite @[real-team-member]' in the monitored channel
- 3Return to Make and watch for the green execution bubbles
- 4Click the bubble on the Copper module to inspect the output data
- 5Open Copper and confirm the new contact exists with correct details
Canvas > Save > Toggle ON > Scenario name (top-left)
Activate the scenario and set scheduling
Once the test passes, click 'Save' in the bottom toolbar, then toggle the scenario from OFF to ON using the switch in the bottom-left corner. Because this uses Slack's Events API (instant trigger), Make will receive events continuously — you don't need to set a polling interval. Rename the scenario something descriptive like 'Slack → Copper: New Channel Member Sync' so your team can find it in 6 months.
- 1Click 'Save' in the bottom toolbar
- 2Click the scenario name at the top-left and rename it to 'Slack → Copper: New Channel Member Sync'
- 3Toggle the scenario switch from OFF (grey) to ON (blue) in the bottom-left corner
- 4Confirm the status badge in the Scenarios list shows 'Active'
Paste this formula into Make's 'Details' field on the Copper 'Create a Person' module. It builds a structured audit string showing which Slack channel triggered the contact creation and when — useful for tracing where a contact came from months later. The formatDate function uses Make's built-in date formatting, and the entire expression goes directly into the Details field variable picker as a text formula.
JavaScript — Custom Function{{formatDate(now; "YYYY-MM-DD HH:mm"; "UTC")}}▸ Show code
{{formatDate(now; "YYYY-MM-DD HH:mm"; "UTC")}}
Contact auto-created from Slack.
Channel: {{if(1.channel; 1.channel; "unknown")}}... expand to see full code
{{formatDate(now; "YYYY-MM-DD HH:mm"; "UTC")}}
Contact auto-created from Slack.
Channel: {{if(1.channel; 1.channel; "unknown")}}
Slack User ID: {{2.id}}
Display Name: {{if(2.profile.display_name; 2.profile.display_name; 2.profile.real_name)}}
Title: {{if(2.profile.title; 2.profile.title; "Not provided")}}
Phone: {{if(2.profile.phone; 2.profile.phone; "Not provided")}}
Bot Account: {{2.is_bot}}
Workspace: {{2.team_id}}
Created via: Make scenario — Slack → Copper SyncGoing 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 Make for this if your team needs visual logic you can hand off to a non-developer. The filter and router system in Make makes it straightforward to handle the bot exclusion and duplicate check without writing any code. Make also handles Slack's Events API instant trigger correctly out of the box — no polling delays. The one case where you'd pick a different platform: if your team already lives in n8n and self-hosts, n8n gives you the same logic with more granular error handling and no operation count constraints.
Each scenario run costs 4 Make operations: the Slack trigger, the Get User call, the Copper Search People call, and the Copper Create Person call. At 100 new channel joins per month, that's 400 operations. Make's free plan gives 1,000 operations/month, so this workflow runs free up to about 250 members/month. Past that, the Core plan at $9/month gives you 10,000 operations — enough for 2,500 members/month. Zapier would charge $19.99/month minimum for the same two-step Zap with a search step, and you'd hit its 750-task free limit at 187 members/month. Make is cheaper by roughly $11/month at moderate volume.
Zapier has one real edge here: its Slack 'New Channel Member' trigger has been around longer and has more documented edge cases resolved in its changelog. If you're not technical and something breaks at 11pm, Zapier's support documentation is more thorough for this specific trigger. n8n beats Make on error handling — its built-in try/catch nodes let you route failed Copper API calls to a fallback Google Sheet without stopping the scenario, something Make requires a paid Error Handler module to approximate. Power Automate has a Slack connector but it uses polling, not instant webhooks, so your contact creation lags by up to 15 minutes — a real problem if you're using Copper to log outreach immediately after someone joins. Pipedream handles this cleanly with native Slack event sources, but requires comfort with JavaScript. Make wins here because the visual duplicate-check logic takes 8 minutes to configure and the instant trigger works reliably without code.
Three things you'll hit after going live. First: Slack guest accounts — single-channel guests have a different API profile structure and their 'is_bot' field sometimes returns null rather than false, which can bypass your bot filter. Add a second filter condition checking that the profile email is not null to catch this. Second: Copper's 'Create a Person' endpoint treats the email field as an array of objects — if you ever switch to Make's generic HTTP module to extend the integration, you must send email as [{email: '[email protected]', category: 'work'}] or the field silently drops. Third: Make's instant trigger requires the scenario to be active to receive events. If you deactivate the scenario for maintenance during business hours and someone joins the channel in that window, that join event is lost permanently — Slack does not replay missed Events API webhooks.
Ideas for what to build next
- →Add a Copper Activity log on contact creation — After the 'Create a Person' module, add a Copper 'Create an Activity' module that logs 'Contact created from Slack #channel-name on [date]' against the new record. This gives your sales team immediate context when they open the contact.
- →Extend to update existing contacts instead of skipping them — Right now, the duplicate filter drops records where a contact already exists. Add a Router after 'Search People': one path creates new contacts, the other path runs a Copper 'Update a Person' module to refresh the title or phone number if the Slack profile has newer data.
- →Post a Slack confirmation back to the channel — At the end of the scenario, add a Slack 'Create a Message' module that posts to a private #ops-log channel saying 'Contact [Name] added to Copper from #partners at [time]'. Gives your team a running log without anyone checking Make's execution history.
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