Beginner~12 min setupCommunication & CRMVerified April 2026
Slack logo
Copper logo

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-time

Use case type

sync

Real-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.

/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.

Make account with at least the Core plan (free plan does not support instant Slack triggers)
Slack account with 'channels:read', 'users:read', and 'users:read.email' OAuth scopes approved by your workspace admin
Copper account with API access enabled — go to Copper > Settings > Integrations > API Keys to confirm
Admin or owner permissions in the Slack workspace to install the Make Slack app and invite it to private channels if needed
The Slack channel you want to monitor must already exist and the Make Slack app must be a member of it

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
First Namefirst_name
Last Namelast_name
Email Addressemail_addresses
5 optional fields▸ show
Job Titletitle
Phone Numberphone_numbers
Tagstags
Details / Descriptiondetails
Assigneeassignee_id

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 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.

  1. 1Go to make.com and sign in
  2. 2Click 'Create a new scenario' in the top-right corner
  3. 3Wait for the visual canvas to load — you'll see a single grey circle with a '+' in the center
What you should see: You should see an empty canvas with one grey module circle and the label 'Set up a trigger' beneath it.
2

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.

  1. 1Click the grey '+' circle on the canvas
  2. 2Type 'Slack' in the search bar
  3. 3Select 'Slack' from the results
  4. 4Scroll to find and click 'Watch Channel Members'
  5. 5Click 'Add' to place it on the canvas
What you should see: A Slack module appears on the canvas with an orange clock icon indicating it is a trigger module, and a configuration panel opens on the right.
Common mistake — Make's Slack app uses the Events API under the hood for this trigger. If your Slack workspace has restrictions on third-party app installations, you'll need a Slack admin to approve the Make app before the webhook can receive events.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
3

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.

  1. 1Click 'Add' next to the Connection field in the Slack module panel
  2. 2Sign in to Slack if prompted
  3. 3Click 'Allow' on the OAuth permissions screen
  4. 4Confirm your workspace name appears in the Connection dropdown
What you should see: The Connection field shows your Slack workspace name (e.g., 'Acme Corp') and a green checkmark appears next to it.
Common mistake — Make requests the 'channels:read', 'users:read', and 'users:read.email' scopes. If 'users:read.email' is blocked by your Slack admin, you won't get email addresses in the trigger payload — you'll need admin approval specifically for that scope before building the rest of this workflow.
Make settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
4

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.

  1. 1Click the Channel dropdown in the Slack module panel
  2. 2Type the channel name or scroll to find it
  3. 3Select the channel (e.g., '#partners')
  4. 4Click 'OK' to save the module configuration
What you should see: The Slack module on the canvas shows the selected channel name beneath the Slack logo, and the module border turns blue indicating it is fully configured.
Common mistake — Private channels won't appear in the dropdown unless the Make Slack app has been explicitly invited to that channel with '/invite @Make'. Run that command in Slack before returning here if your target channel is private.
5

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'.

  1. 1Click the '+' on the right side of the Slack trigger module
  2. 2Search for 'Slack' and select 'Get a User'
  3. 3In the User field, click the variable picker icon
  4. 4Select '1. User ID' from the trigger output
  5. 5Click 'OK' to save
What you should see: A second Slack module labeled 'Get a User' appears connected to the trigger, with the User field showing '1. User ID' in blue text.
Common mistake — Slack bot accounts and app accounts will also trigger this event when they join a channel. Their 'Is Bot' field returns true. You'll filter these out in the next step — skip that and you'll start creating Copper contacts for every Slack bot you ever invite.
6

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.

  1. 1Click the small wrench/filter icon on the connector arrow between 'Get a User' and the next module slot
  2. 2Set Condition 1: Field = '2. Is Bot', Operator = 'Equal to', Value = 'false'
  3. 3Click 'Add AND rule'
  4. 4Set Condition 2: Field = '2. Profile: Email', Operator = 'Exists'
  5. 5Click 'OK' to save the filter
What you should see: The arrow between modules now shows a small funnel icon, indicating the filter is active. Hovering over it shows the two conditions you set.
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
Copper
CO
notified
7

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.

  1. 1Click '+' after the filter to add a new module
  2. 2Search 'Copper' and select 'Create a Person'
  3. 3Click 'Add' next to the Connection field
  4. 4In a new tab, go to Copper > Settings > Integrations > API Keys
  5. 5Copy the API key and paste it into Make's connection panel
  6. 6Enter the email address associated with your Copper account and click 'Save'
What you should see: The Copper module shows your connection name with a green status indicator, and the Create a Person field mapping panel opens below.
Common mistake — Copper's API authenticates based on the combination of API key AND email address. If you paste a key generated under one user's account but enter a different user's email, every API call will return a 401 error. Use the email of whichever user generated the key.
8

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.

  1. 1Click into the 'First Name' field and select '2. Profile: First Name' from the variable picker
  2. 2Click into the 'Last Name' field and select '2. Profile: Last Name'
  3. 3Click into the 'Email' field and select '2. Profile: Email'
  4. 4Click into the 'Title' field and select '2. Profile: Title'
  5. 5Click 'OK' to save the Copper module
What you should see: Each mapped field in the Copper module shows blue variable tags (e.g., '2. Profile: Email') instead of empty placeholders.
Common mistake — Copper's 'Create a Person' endpoint requires the email to be sent as an array object, not a plain string. Make's Copper integration handles this automatically — but if you switch to using the Copper HTTP module instead, you'll need to wrap the email in the correct JSON array structure or get a validation error.
Slack fields
text
user
channel
ts
thread_ts
available as variables:
1.props.text
1.props.user
1.props.channel
1.props.ts
1.props.thread_ts
9

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.

  1. 1Click the connector between the filter and the 'Create a Person' module to insert a new module
  2. 2Search 'Copper' and select 'Search People'
  3. 3Set the Email field to '2. Profile: Email'
  4. 4Add a new Filter after this module: '3. Total Count of Persons' Equal to '0'
  5. 5Click 'OK' on both the module and the filter
What you should see: Your canvas now shows: Slack Trigger → Get a User → [Bot Filter] → Copper Search People → [Duplicate Filter] → Copper Create a Person. The duplicate filter funnel icon appears between Search and Create.
10

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.

  1. 1Click 'Run once' at the bottom of the Make canvas
  2. 2Switch to Slack and run '/invite @[real-team-member]' in the monitored channel
  3. 3Return to Make and watch for the green execution bubbles
  4. 4Click the bubble on the Copper module to inspect the output data
  5. 5Open Copper and confirm the new contact exists with correct details
What you should see: Each module shows a green bubble with '1' indicating one record processed. In Copper, the new contact appears under People with the name and email matching the Slack profile.
Common mistake — Make's 'Run once' mode only catches events that fire while it is actively listening. If you trigger the Slack join event before clicking 'Run once', Make won't see it. Click 'Run once' first, then do the Slack invite.
Make
▶ Run once
executed
Slack
Copper
Copper
🔔 notification
received
11

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.

  1. 1Click 'Save' in the bottom toolbar
  2. 2Click the scenario name at the top-left and rename it to 'Slack → Copper: New Channel Member Sync'
  3. 3Toggle the scenario switch from OFF (grey) to ON (blue) in the bottom-left corner
  4. 4Confirm the status badge in the Scenarios list shows 'Active'
What you should see: The scenario appears in your Scenarios list with a blue 'Active' badge and an instant trigger indicator. The next time someone joins your monitored Slack channel, Make processes it automatically.

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 Sync

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 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.

Cost

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.

Tradeoffs

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 creationAfter 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 themRight 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 channelAt 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

Was this guide helpful?
Slack + Copper overviewMake profile →