

How to Log Slack Messages to Copper with Zapier
When a Slack message is posted in a designated customer channel, Zapier creates an Activity log entry on the matching Copper contact record — no manual copy-paste required.
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 account management teams (under 30 people) who run customer conversations in dedicated Slack channels and need those interactions visible in Copper without switching apps.
Not ideal for
Teams logging hundreds of Slack messages per day — at that volume, Zapier task costs add up fast and Make handles the same flow for free.
Sync type
real-timeUse case type
syncReal-World Example
A 12-person SaaS account management team tracks every enterprise customer in a dedicated Slack channel named after the account (e.g. #acme-corp). Before this automation, AEs had to manually paste key conversation notes into Copper after calls — and most skipped it. Now any message tagged with a specific emoji reaction (or posted in a monitored channel) instantly creates an Activity on the Copper contact, keeping the CRM timeline accurate without any extra steps.
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 | ||
| Activity Details | details | |
| Parent Type | parent.type | |
| Parent ID | parent.id | |
| Activity Type | type.id | |
4 optional fields▸ show
| Activity Date | activity_date |
| Slack Message Permalink | details |
| Slack Channel Name | details |
| Slack Username | details |
Step-by-Step Setup
Zapier Dashboard > Create Zap > Trigger > Search Apps
Create a new Zap and connect Slack
Log into Zapier at zapier.com and click the orange 'Create Zap' button in the left sidebar. You'll land in the Zap editor. In the Trigger box, search for 'Slack' and select it from the results. Zapier will prompt you to choose a Slack account — click 'Sign in to Slack' and authorize through the OAuth popup. Make sure you authorize the workspace that contains your customer channels.
- 1Click 'Create Zap' in the left sidebar
- 2Click the Trigger box labeled 'Search for an app'
- 3Type 'Slack' and select it from the dropdown
- 4Click 'Sign in to Slack' and complete the OAuth flow
- 5Click 'Continue' after the green Connected badge appears
Zap Editor > Trigger > Event dropdown
Choose the Slack trigger event
With Slack selected, click the 'Event' dropdown under 'Trigger Event.' Choose 'New Message Posted to Channel' — this fires instantly via webhook every time a new message lands in the channel you'll configure next. Do not choose 'New Mention' unless you specifically only want @-mention messages logged; that will miss most conversation messages.
- 1Click the 'Event' dropdown
- 2Select 'New Message Posted to Channel'
- 3Click 'Continue'
Zap Editor > Trigger > Configure > Channel
Select the customer Slack channel
In the 'Channel' dropdown, select the specific Slack channel you want to monitor — for example, #acme-corp or a general #customer-comms channel. If you manage multiple customer channels, you'll need to create separate Zaps per channel or use a naming convention that a single channel catches (some teams funnel all customer messages into one #customer-log channel via a Slack workflow). Click 'Continue' after selecting the channel.
- 1Click the 'Channel' dropdown
- 2Search for or scroll to your target channel (e.g. #acme-corp)
- 3Select the channel
- 4Click 'Continue'
channel: {{channel}}
ts: {{ts}}
Zap Editor > Trigger > Test Trigger
Test the Slack trigger
Click 'Test Trigger' — Zapier pulls the 3 most recent messages from the selected channel. Pick one that looks like a real customer conversation (not a bot notification). This sample will be used throughout the rest of the Zap setup for field mapping. If Zapier returns 'No results found,' post a test message to the channel first, then re-run the test.
- 1Click 'Test Trigger'
- 2Review the 3 sample messages Zapier returns
- 3Select the most representative message sample
- 4Click 'Continue with Selected Record'
Zap Editor > + (between steps) > Filter by Zapier
Add a Filter to exclude bot and automated messages
Click the '+' icon between the trigger and your next action. Select 'Filter by Zapier.' Set the condition to: 'User' does not contain 'bot' AND 'Text' is not empty. This prevents Slack app notifications, CI/CD alerts, and blank system messages from creating junk Activity records in Copper. Without this filter, your Copper contact timelines will fill with noise within days.
- 1Click the '+' button between the trigger and the next action step
- 2Select 'Filter by Zapier' from the app list
- 3Set Filter Condition 1: 'User' — 'Does not contain' — 'bot'
- 4Click '+ AND' to add a second condition
- 5Set Filter Condition 2: 'Text' — 'Exists' (is not empty)
- 6Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action > Search Apps > Copper > Sign In
Add a Copper action and connect your account
Click the '+' button after your filter step and search for 'Copper' in the app list. Select it. Zapier will ask you to choose a Copper account — click 'Sign in to Copper.' You'll need your Copper API key, which lives in Copper under Settings > Integrations > API Keys. Copy that key, paste it into Zapier, then enter the email address associated with your Copper account.
- 1Click '+' to add an action step
- 2Search for 'Copper' and select it
- 3Click 'Sign in to Copper'
- 4In Copper, navigate to Settings > Integrations > API Keys and copy your key
- 5Paste the API key and your Copper email into the Zapier connection modal
- 6Click 'Yes, Continue to Copper'
Zap Editor > Action > Copper > Event dropdown
Choose the Copper action event
With Copper connected, select the action event from the dropdown. Choose 'Create Activity.' This creates a timestamped log entry attached to a Copper contact or lead record — exactly what you want for communication history. Do not choose 'Update Contact' here; that would overwrite contact fields rather than append a new interaction to the timeline.
- 1Click the 'Event' dropdown under Copper
- 2Select 'Create Activity'
- 3Click 'Continue'
Zap Editor > Action > Copper > Configure
Map Slack message data to Copper Activity fields
This is the critical mapping step. Set 'Parent Type' to 'Person' (or 'Lead' if you're logging pre-sales conversations). For 'Parent ID,' you'll need the Copper contact ID — see the warning below for how to handle this. Set 'Activity Type' to 'Note' or a custom type you've created in Copper for Slack messages. In the 'Details' field, map the Slack 'Text' field from the trigger. Also include the Slack 'Permalink' and 'Timestamp' so the full context is one click away from Copper.
- 1Set 'Parent Type' to 'Person'
- 2Set 'Parent ID' to the Copper contact ID (see warning about lookup step)
- 3Set 'Activity Type' to 'Note' or your custom Slack activity type
- 4Click the 'Details' field and insert the Slack 'Text' variable
- 5Append the Slack 'Permalink' and formatted 'Timestamp' to the Details field
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > + (before Create Activity) > Copper > Find Person
Add a 'Find Person in Copper' step (if needed)
If you don't have the Copper contact ID available from Slack data, insert a Copper 'Find Person' action before Step 8. Set the search to match by email address. This requires the customer's email to exist somewhere in your Slack data — common approaches are: (1) the channel topic contains the email, (2) a Slack custom field stores it, or (3) your team includes the email in a specific message format. Once found, use the returned 'ID' field in the Parent ID mapping back in the Create Activity step.
- 1Click '+' to insert a step before 'Create Activity'
- 2Select 'Copper' and choose 'Find Person'
- 3Map the email field from your Slack data source to the search field
- 4Enable 'Create Copper record if not found' only if you want auto-creation
- 5Click 'Test Step' to confirm a matching contact is returned
Zap Editor > Action > Copper > Test Step
Test the full Zap end-to-end
Click 'Test Step' on the Copper Create Activity action. Zapier sends the mapped data to Copper using the sample Slack message from Step 4. After the test completes, open Copper, navigate to the contact record you expected to be updated, and check the Activity tab. You should see a new Note entry with the Slack message text, timestamp, and permalink. If the activity doesn't appear, check the Zapier task log for the error detail.
- 1Click 'Test Step' in the Copper action panel
- 2Wait for the green 'Test was successful' confirmation
- 3Open Copper and navigate to the test contact record
- 4Click the 'Activity' tab on the contact
- 5Confirm the new Note entry shows the Slack message text and permalink
Zap Editor > Name field (top) > Publish Zap button
Name and publish the Zap
Give your Zap a clear name like 'Slack #acme-corp → Copper Activity Log' so it's identifiable in your Zap dashboard later. Click 'Publish Zap' in the top right. The Zap switches to 'On' status and begins listening for new Slack messages immediately via webhook. Test it live by posting a message to the monitored channel and confirming the activity appears in Copper within 2 minutes.
- 1Click the Zap name field at the top of the editor and type a descriptive name
- 2Click 'Publish Zap' in the upper right corner
- 3Confirm the Zap status shows 'On' in green
- 4Post a real test message to the monitored Slack channel
- 5Check Copper after 60-90 seconds to confirm the Activity was created
Paste this into a 'Code by Zapier' step inserted between the Slack trigger and the Copper action. It formats the raw Slack Unix timestamp into a readable date, builds a clean Details string that includes the channel name, sender, message body, and permalink — and truncates messages over 2000 characters to stay within Copper's activity field limit. Configure inputData with the Slack fields from your trigger step.
JavaScript — Code Step// Code by Zapier — Slack message formatter for Copper Activity▸ Show code
// Code by Zapier — Slack message formatter for Copper Activity // Maps to: inputData.text, inputData.username, inputData.channel, inputData.timestamp, inputData.permalink const rawText = inputData.text || '';
... expand to see full code
// Code by Zapier — Slack message formatter for Copper Activity
// Maps to: inputData.text, inputData.username, inputData.channel, inputData.timestamp, inputData.permalink
const rawText = inputData.text || '';
const username = inputData.username || 'Unknown user';
const channel = inputData.channel || 'Unknown channel';
const permalink = inputData.permalink || '';
const unixTimestamp = parseFloat(inputData.timestamp) || Date.now() / 1000;
// Convert Unix timestamp to readable date (YYYY-MM-DD for Copper)
const messageDate = new Date(unixTimestamp * 1000);
const activityDate = messageDate.toISOString().split('T')[0]; // e.g. 2023-12-01
// Truncate message body to 1800 chars to leave room for metadata
const MAX_BODY_LENGTH = 1800;
const truncatedText = rawText.length > MAX_BODY_LENGTH
? rawText.substring(0, MAX_BODY_LENGTH) + '... [truncated]'
: rawText;
// Build the full Details string for the Copper Activity
const details = [
`Slack message from ${username} in #${channel}`,
`Sent: ${messageDate.toUTCString()}`,
'',
truncatedText,
'',
permalink ? `View original message: ${permalink}` : ''
].join('\n').trim();
return {
formattedDetails: details,
activityDate: activityDate,
senderUsername: username
};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 team is non-technical, already on a Zapier plan for other Zaps, and monitors fewer than 5 dedicated customer channels. Setup takes about 25 minutes including the Find Person lookup step. The Zap fires within 60-90 seconds of a new Slack message, which is fast enough for async sales communication. If you're on Make already or you need to monitor 10+ channels dynamically, skip Zapier and build this in Make — the router module handles multi-channel matching in a single scenario without duplicating setup.
The cost math is straightforward. Each Slack message that passes the filter costs 3 Zapier tasks: Filter, Find Person, Create Activity. At 100 customer messages per month across your monitored channels, that's 300 tasks/month. Zapier's Starter plan includes 750 tasks/month at $19.99/month — you have headroom. At 300 messages/month (900 tasks), you're pushing against the limit and the next tier is $49/month for 2,000 tasks. Make's equivalent scenario runs at 3 operations per message too, but Make's free tier includes 1,000 operations/month and the Core plan ($9/month) gives you 10,000 — meaning Make handles 3x the volume at half the cost.
Make is better for multi-channel setups because its Router module can match incoming Slack messages to different Copper contacts based on channel name without building separate scenarios. n8n is better if you self-host and want zero per-task cost — the workflow is 5 nodes and runs in under 500ms. Power Automate is the right call if your company is Microsoft 365 heavy and already has Dataverse or Dynamics CRM; it connects natively without per-task billing. Pipedream is better if you want to enrich the Slack message with additional context (e.g. pull the company's Clearbit data) before logging to Copper — async steps and built-in HTTP requests make that 15 lines of code. Zapier is still right if you want to hand this setup to a sales ops person who has never written a line of code and needs it working this afternoon.
Three things you'll hit after going live. First, Copper's Activity API requires a numeric contact ID — not a name, not an email. If your Find Person lookup fails (wrong email, duplicate records, typo in the channel topic), the Create Activity step errors silently unless you have notifications turned on. Second, Slack's 'New Message Posted to Channel' trigger can fire for edited messages in some configurations, which creates duplicate or updated Activity entries in Copper — the Unix timestamp in the Slack payload changes on edit, so add a filter checking that the 'Subtype' field is empty (edits have a subtype of 'message_changed'). Third, Copper has a rate limit of 600 API requests per minute — you're extremely unlikely to hit it with this workflow, but if you ever try to replay 200 failed Zap tasks at once from the task history, you will get 429 errors and the replays will partially fail.
Ideas for what to build next
- →Log emoji-reacted messages only — Instead of logging every message, modify the trigger to use Slack's 'New Reaction Added' event and only log messages that receive a specific emoji (e.g. :copper: or :log:). This gives your team manual control over what gets logged and eliminates noise.
- →Create a Copper Opportunity when a deal keyword appears — Add a second Zap that watches the same Slack channel for keywords like 'proposal,' 'contract,' or 'pricing' and creates or updates a Copper Opportunity record when those words appear. Pairs with this Zap to give you both activity history and pipeline tracking from one channel.
- →Send a Slack confirmation when the Copper log is created — Add a final action step that posts a threaded reply in Slack confirming the message was logged to Copper — include a direct link to the Copper contact record. This closes the loop for your team so they know the CRM is being updated in real time.
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