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

How to Sync Slack Channel Members to Copper with Zapier

Automatically creates a new Copper contact whenever someone joins a designated Slack channel, capturing their name and email so your CRM stays current 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

Small sales or partnerships teams who onboard external collaborators via Slack and need those people in Copper immediately without manual data entry.

Not ideal for

Teams adding hundreds of members per day — at that volume the task cost adds up fast and a direct Copper API script or Make scenario is cheaper.

Sync type

real-time

Use case type

sync

Real-World Example

💡

A 12-person agency uses a #partners Slack channel as the entry point for every new client contact. Before this Zap, the account manager had to manually copy names and emails into Copper after each kickoff call — a step that got skipped 30% of the time. Now, the moment the account manager adds a client to #partners, a Copper contact appears within 90 seconds, tagged 'Partner', and the deal record is ready to link.

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.

Zapier account on any paid plan, or the free plan if under 100 tasks/month
Slack account with permission to add apps to your workspace (Workspace Admin or App Manager role)
Copper account with API access enabled — available on all Copper plans; find the API key at Settings > Integrations > API Keys
Slack channel already created and designated as the one to monitor (e.g. #partners or #new-hires)
Slack user profiles in your workspace should have email addresses populated — Zapier reads these from Slack's users:read.email scope

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
First Namename
Last Namename
Email Addressemail
5 optional fields▸ show
Tagstags
Phone Numbersphone_numbers
Titletitle
Companycompany_id
Details / Descriptiondetails

Step-by-Step Setup

1

zapier.com > My Zaps > Create Zap > Trigger > Slack

Create a new Zap and connect Slack

Log into zapier.com and click the orange 'Create Zap' button in the left sidebar. The Zap editor opens to a blank canvas with a trigger block at the top. Click that trigger block and type 'Slack' in the search field. Select Slack from the results — you'll see the Slack logo appear with a list of available triggers below it. Choose 'New Channel Member' as your trigger event.

  1. 1Click 'Create Zap' in the left sidebar
  2. 2Click the trigger block labeled 'Trigger'
  3. 3Type 'Slack' in the app search box
  4. 4Select 'Slack' from the dropdown results
  5. 5Choose 'New Channel Member' from the trigger event list
  6. 6Click 'Continue'
What you should see: You should see the Slack trigger block now showing 'New Channel Member' as the selected event, with a prompt to connect your Slack account.
Common mistake — The 'New Channel Member' trigger fires when a user is *added* to a channel, not when they join a workspace. If your team uses invite-only channels and admins do the adding, this trigger works perfectly. If users join public channels themselves, it still fires — but only for channels you specify in step 2.
2

Zap Editor > Trigger > Slack > Choose Account > Sign in to Slack

Connect your Slack account

Click 'Sign in to Slack' and a popup window opens asking you to authorize Zapier. You'll land on Slack's OAuth screen — make sure you're signed into the correct Slack workspace in the top-right dropdown before approving. Click 'Allow'. Zapier needs permission to read channel membership events, so the scopes requested include channels:read and users:read — both are required for this Zap to function.

  1. 1Click 'Sign in to Slack'
  2. 2In the popup, confirm the correct workspace is selected in the top-right
  3. 3Click 'Allow' to grant Zapier access
  4. 4Close the popup and select the connected account in the Zapier dropdown
  5. 5Click 'Continue'
What you should see: Your Slack workspace name appears in the 'Choose Account' dropdown with a green checkmark. The popup closes automatically after authorization.
Common mistake — If you manage multiple Slack workspaces, double-check the workspace name shown in the Zapier account dropdown. It is easy to authorize the wrong one if you are signed into several — the OAuth popup defaults to whichever workspace Slack last had active in your browser.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
3

Zap Editor > Trigger > Slack > Set Up Trigger > Channel

Select the target Slack channel

In the 'Set up trigger' panel, click the 'Channel' dropdown. Zapier fetches a list of all public channels your connected Slack account can see. Scroll or search for the channel you want to monitor — for example, #partners or #new-hires. You can only select one channel per Zap. If you need to watch multiple channels, you will build separate Zaps for each or use a multi-step Zap with a filter (covered in step 5).

  1. 1Click the 'Channel' dropdown in the 'Set up trigger' panel
  2. 2Type the channel name to filter the list
  3. 3Select the target channel (e.g. #partners)
  4. 4Click 'Continue'
What you should see: The selected channel name appears in the Channel field. The trigger configuration panel shows a summary: 'Trigger: New Channel Member in #partners'.
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 Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
4

Zap Editor > Trigger > Slack > Test Trigger

Test the Slack trigger

Click 'Test trigger' — Zapier polls the channel for recent membership events to pull in sample data. For this test to return data, the channel must have at least one member added in the recent past. If the channel is brand new, manually add a test user to it now, then click 'Test trigger' again. The sample data will show fields like User ID, Username, Display Name, Email, and Real Name — you'll map these to Copper in later steps.

  1. 1Click 'Test trigger'
  2. 2If no data appears, add a test member to the Slack channel first
  3. 3Click 'Test trigger' again
  4. 4Confirm the sample shows fields including 'Email' and 'Real Name'
  5. 5Click 'Continue with selected record'
What you should see: You see a record with fields populated: User ID (e.g. U04AB12XY), Real Name (e.g. Jordan Ellis), Email (e.g. [email protected]), Display Name (e.g. jordan.e).
Common mistake — Slack only exposes a user's email in Zapier's trigger data if the Zapier Slack app has the users:read.email scope. If the Email field shows blank in your test data, your Slack workspace admin may need to approve that scope. Without email, Copper contact creation is possible but incomplete — you'd only have a name.
Zapier
▶ Turn on & test
executed
Slack
Copper
Copper
🔔 notification
received
5

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

Add a Filter step to exclude bot accounts

Click the '+' button below the trigger block and select 'Filter' (it is listed under 'Logic' in Zapier). Bots are added to Slack channels frequently — CI systems, support tools, notifications bots — and you do not want those creating ghost contacts in Copper. Set the filter condition to: 'Is Bot' (from Slack trigger data) 'Is false'. This single condition blocks any Zap run where the new member is a bot account.

  1. 1Click the '+' button between trigger and action
  2. 2Click 'Filter' under the Logic section
  3. 3In 'Only continue if...', click the field dropdown and select 'Is Bot'
  4. 4Set the condition to 'Is false'
  5. 5Click 'Continue'
What you should see: The Filter step shows: 'Only continue if: Is Bot — (Boolean) Is false'. The filter block turns green to indicate it is correctly configured.
Common mistake — Zapier's Filter step treats missing values as failing the condition by default. If Slack does not return the 'Is Bot' field for some users (rare but possible for guest accounts), those runs will be stopped by the filter. Test with a guest account if your channel includes external guests.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Copper
CO
notified
6

Zap Editor > + > Action > Copper > Create Person

Add Copper as the action app

Click the '+' button below the Filter step and search for 'Copper' in the action app search. Select Copper and then choose 'Create Person' as the action event — Copper calls individual contacts 'People' in its data model, not 'Contacts'. Click 'Continue' to proceed to account connection.

  1. 1Click the '+' button below the Filter step
  2. 2Type 'Copper' in the app search box
  3. 3Select 'Copper' from the results
  4. 4Choose 'Create Person' from the action event list
  5. 5Click 'Continue'
What you should see: The action block shows 'Copper — Create Person'. You are prompted to connect your Copper account.
Common mistake — Copper uses 'People' for individual contacts and 'Companies' for organizations. Do not select 'Create Company' — that creates an org record, not a person record. If you need both, you would add a second Copper action step after this one.
7

Copper > Settings > Integrations > API Keys

Connect your Copper account

Click 'Sign in to Copper'. A popup asks for your Copper API key and the email address associated with your Copper account. To get your API key, open Copper in a separate tab, go to Settings > Integrations > API Keys, and click 'Generate API Key'. Copy it and paste it into the Zapier popup along with your Copper login email. Click 'Yes, Continue to Copper'.

  1. 1Click 'Sign in to Copper' in the Zapier popup
  2. 2Open Copper in a new tab and go to Settings > Integrations > API Keys
  3. 3Click 'Generate API Key' and copy the key
  4. 4Paste the API key and your Copper email into the Zapier connection form
  5. 5Click 'Yes, Continue to Copper'
  6. 6Confirm the account name appears in Zapier's account dropdown
What you should see: Your Copper account name or email appears in the 'Choose Account' dropdown with a green checkmark. The popup closes.
Common mistake — Copper API keys are tied to your specific user account, not the workspace. If you are setting this up on behalf of a team, use a service account email in Copper so the Zap does not break if your personal account is deactivated.
8

Zap Editor > Action > Copper > Set Up Action

Map Slack fields to Copper contact fields

The 'Set up action' panel shows all available Copper Person fields. Click into each field and use the blue insert icon (or type '/') to pull in data from the Slack trigger. Map 'First Name' to the Slack 'First Name' field, 'Last Name' to 'Last Name', and 'Email' to the Slack 'Email' field. In the 'Tags' field, type a static value like 'Slack-Partner' so you can filter these contacts in Copper later. Leave 'Company' blank for now — Copper will auto-match it if the email domain matches an existing company record.

  1. 1Click the 'First Name' field and select 'First Name' from the Slack trigger data
  2. 2Click the 'Last Name' field and select 'Last Name' from the Slack trigger data
  3. 3Click the 'Email' field and select 'Email' from the Slack trigger data
  4. 4Click the 'Tags' field and type a static tag value such as 'Slack-Partner'
  5. 5Optionally map 'Phone Numbers' if your Slack profile data includes it
  6. 6Click 'Continue'
What you should see: Each mapped field shows the Slack data in orange pill format (e.g. 'Real Name' pill in the Name field). The Email field shows the Slack user's email address from your test record.
Common mistake — Slack's trigger returns a single 'Real Name' field in addition to separate 'First Name' and 'Last Name' fields. If First Name or Last Name come back blank in your test data (some Slack profiles skip them), map 'Real Name' to Copper's First Name field as a fallback — you can split it with a Formatter step added before this action.
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

Zap Editor > + (between Filter and Copper) > Formatter by Zapier > Text > Split Text

Add a Formatter step to split full name (if needed)

If step 8 revealed that Slack only returns 'Real Name' as a single string (e.g. 'Jordan Ellis') rather than separate first and last name fields, add a Zapier Formatter step before the Copper action. Click the '+' between the Filter and Copper steps, choose 'Formatter by Zapier', select 'Text', then 'Split Text'. Set the input to the Slack 'Real Name' field, the separator to a single space, and the segment index to 'All' — this outputs First (index 1) and Last (index 2) as separate values you can map into Copper.

  1. 1Click '+' between the Filter step and the Copper action
  2. 2Search for and select 'Formatter by Zapier'
  3. 3Choose 'Text' as the transform type
  4. 4Choose 'Split Text' as the action
  5. 5Set 'Input' to the Slack 'Real Name' field
  6. 6Set 'Separator' to a single space character
  7. 7Set 'Segment Index' to 'All'
  8. 8Click 'Continue' and test — confirm Output 1 and Output 2 appear
What you should see: The Formatter step test shows 'Output 1: Jordan' and 'Output 2: Ellis'. Go back to the Copper action step and remap First Name to 'Output 1' and Last Name to 'Output 2' from the Formatter step.
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}}
10

Zap Editor > Action > Copper > Test Action

Test the full Zap

Click 'Test action' in the Copper step. Zapier uses your sample Slack data to create a real contact in Copper — this is a live write, not a simulation. Open Copper in a separate tab immediately after and search for the contact by the test email address. Confirm the record was created with the correct name, email, and tag. If the contact already exists in Copper, you will likely see an error or a duplicate — handle this by checking Copper's People list for duplicates and deleting the test record before going live.

  1. 1Click 'Test action'
  2. 2Wait 5-10 seconds for Zapier to confirm success
  3. 3Open Copper in a new tab and go to People
  4. 4Search for the test contact's email address
  5. 5Confirm the record shows the correct name, email, and tag
  6. 6Delete the test contact from Copper before publishing
What you should see: Zapier shows a green 'Test was successful' message with the Copper Person ID returned (e.g. 'id: 48291035'). The contact appears in Copper's People list within 10 seconds.
Common mistake — Copper does not automatically deduplicate on email during API creation. If a person with that email already exists, Copper creates a second record. You will then have two identical contacts. See the troubleshooting section for how to handle this with a Copper search step.
11

Zap Editor > Zap Name > Publish Zap

Name and publish the Zap

Click the pencil icon next to 'Untitled Zap' at the top of the editor and give it a clear name like 'Slack #partners → Copper Contact'. Click 'Publish Zap' in the top right. The Zap status changes to 'On'. From this point, every time a non-bot user is added to your target Slack channel, Zapier fires within 1-2 minutes and creates the Copper contact automatically.

  1. 1Click the pencil icon next to 'Untitled Zap'
  2. 2Type a descriptive name: 'Slack #partners → Copper Contact'
  3. 3Click 'Publish Zap' in the top-right corner
  4. 4Confirm the Zap status shows 'On' in green
What you should see: The Zap editor shows a green 'On' badge. You are redirected to the Zap detail page showing the trigger, filter, and action steps in a summary view.

This Code by Zapier step runs before the Copper action and formats a clean 'details' note combining the Slack channel name, join date, and display name. Paste this into a 'Code by Zapier' step (choose JavaScript) inserted between the Formatter step and the Copper Create Person action. Map the output variable 'detailsNote' into the Copper 'Details' field.

JavaScript — Code Step// Code by Zapier — runs before Copper Create Person
▸ Show code
// Code by Zapier — runs before Copper Create Person
// Inputs (set these in the 'Input Data' section of the Code step):
//   slackChannel: from Slack trigger 'Channel Name'

... expand to see full code

// Code by Zapier — runs before Copper Create Person
// Inputs (set these in the 'Input Data' section of the Code step):
//   slackChannel: from Slack trigger 'Channel Name'
//   displayName: from Slack trigger 'Display Name'
//   userEmail: from Slack trigger 'Email'

const channel = inputData.slackChannel || 'unknown-channel';
const display = inputData.displayName || 'unknown';
const email = inputData.userEmail || '';

// Build ISO date string for today
const today = new Date();
const dateStr = today.toISOString().split('T')[0]; // e.g. '2024-03-15'

// Construct a clean note for Copper's Details field
const detailsNote = `Source: Slack #${channel}\nJoined: ${dateStr}\nSlack handle: @${display}\nEmail confirmed: ${email ? 'Yes' : 'No'}`;

// Determine a suggested tag based on channel name
let suggestedTag = 'Slack-Member';
if (channel.toLowerCase().includes('partner')) {
  suggestedTag = 'Slack-Partner';
} else if (channel.toLowerCase().includes('hire') || channel.toLowerCase().includes('onboard')) {
  suggestedTag = 'Slack-NewHire';
}

output = [{ detailsNote: detailsNote, suggestedTag: suggestedTag }];

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 team is non-technical and needs the Zap running today, not next week. The guided editor makes the Slack trigger and Copper action setup genuinely fast — about 15 minutes if you have both accounts ready. The Filter step to block bots is built-in with no code. Zapier's Slack integration handles the webhook subscription automatically, so you don't touch Slack's API settings at all. The one scenario where you'd skip Zapier: if you're watching four or more Slack channels and need all of them feeding into one deduplication check in Copper. That routing logic gets expensive in Zapier tasks fast and is better handled in Make's router module.

Cost

The task math: each Zap run burns 2 tasks (the Slack trigger counts as 1, the Copper action counts as 1; the Filter does not count separately). If your team adds 60 new Slack channel members per month, that's 120 tasks. Zapier's free plan gives you 100 tasks/month — you'll exceed it. The Starter plan at $19.99/month includes 750 tasks, which covers you up to 375 new contacts/month. Make's equivalent scenario costs $0 at that volume on the free tier (1,000 operations/month). For low-volume teams under 50 contacts/month, the Zapier free plan works fine.

Tradeoffs

Make handles conditional routing better — if you need to watch #partners and #new-hires and tag contacts differently per channel, Make's router does this in one scenario versus two separate Zapier Zaps. n8n gives you a pre-built Copper node with full API access, which lets you search for existing contacts and upsert rather than always creating new ones — Zapier requires a workaround search step to get there. Power Automate has no native Copper connector, so you'd need a custom HTTP action against Copper's API, which is more setup than it's worth for this use case. Pipedream is worth considering if you want to add server-side deduplication logic or enrich the contact with a third API (like Clearbit) in the same workflow — it handles async API calls cleanly. Zapier is still the right pick here if your team won't touch code and you're under 300 contacts/month.

Three things you'll hit post-launch. First, Slack guest accounts (single-channel guests and multi-channel guests) sometimes don't return an email in the Zapier trigger data even with the users:read.email scope approved — you'll see blank email fields in Copper. Filter these out or set up an alert when email is missing. Second, Copper silently creates duplicate Person records when the same email is submitted twice via API — there's no error thrown, just two records. If you add people to Slack channels manually and sometimes make mistakes, build the Find Person deduplification step from day one, not later. Third, if your Slack workspace is on a free plan, Slack's API access for third-party apps is limited — some user profile fields including email may not be accessible. The Zapier Slack integration requires a paid Slack workspace to reliably return email addresses via the OAuth scope.

Ideas for what to build next

  • Add a Copper lead or opportunity after contact creationExtend this Zap with a second Copper action step — 'Create Opportunity' — linked to the new Person record. This turns contact creation into a full pipeline entry with zero extra work.
  • Post a Slack confirmation message when the Copper contact is createdAdd a final Slack action step using 'Send Direct Message' or 'Send Channel Message' to notify your team that the Copper record was created. Include the Copper Person ID so anyone can jump directly to the record.
  • Build the reverse: create a Slack channel invite when a new Copper contact is taggedSet up a second Zap in the other direction — Copper trigger on 'New Person with Tag' firing a Slack 'Invite User to Channel' action. This closes the loop for contacts added directly in Copper rather than via Slack.

Related guides

Was this guide helpful?
Slack + Copper overviewZapier profile →