

How to Send Copper Deal Stage Alerts to Slack with Zapier
Automatically posts a Slack channel message whenever a deal moves to a new pipeline stage in Copper, giving your sales team instant visibility into every win, stall, and progression.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Sales teams of 5–30 reps who live in Slack and want instant pipeline visibility without logging into Copper repeatedly.
Not ideal for
Teams that need bidirectional updates — this is read-only from Copper, so use a dedicated CRM sync tool if you need Slack replies to update deal stages.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS sales team pipes every Copper deal stage change into their #pipeline Slack channel. Before this, reps refreshed Copper manually 2–3 times a day and routinely missed when deals stalled in Proposal for 10+ days. Now, the moment a deal moves to Closed Won, the whole team sees it in Slack within 90 seconds — and when a deal drops back to Needs Follow-Up, the manager can jump in before the next business day.
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 | ||
| Opportunity Name | name | |
| Pipeline Stage Name | pipeline_stage_id | |
| Assignee Name | assignee_id | |
5 optional fields▸ show
| Monetary Value | monetary_value |
| Close Date | close_date |
| Pipeline Name | pipeline_id |
| Company Name | company_name |
| Opportunity ID | id |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap and name it
Log in to zapier.com and click the orange 'Create Zap' button in the left sidebar. Zapier opens the Zap editor with a blank canvas. At the top of the editor, click 'Untitled Zap' and rename it something like 'Copper Deal Stage → Slack'. Naming it now saves confusion when you have a dozen Zaps later.
- 1Click 'Create Zap' in the left sidebar
- 2Click 'Untitled Zap' at the top of the editor
- 3Type a descriptive name, e.g. 'Copper Deal Stage → Slack #pipeline'
- 4Press Enter to save the name
Zap Editor > Trigger > Search Apps
Set Copper as the trigger app
Click the 'Trigger' box in the Zap editor. A search panel opens on the right side. Type 'Copper' and select it from the results — it shows the Copper CRM logo. You'll then be prompted to choose a trigger event. Copper's Zapier integration uses webhooks, so deal stage changes fire in near real-time rather than on a polling schedule.
- 1Click the 'Trigger' step box
- 2Type 'Copper' in the search field
- 3Select 'Copper' from the dropdown (confirm the blue Copper logo)
- 4Click the 'Event' dropdown and select 'Updated Opportunity'
Copper > Settings > Integrations > API Keys
Connect your Copper account
Click 'Sign in to Copper'. A popup opens asking for your Copper API key and your registered Copper email address. Find your API key in Copper under Settings > Integrations > API Keys — it's a long alphanumeric string. Paste it into Zapier along with the email tied to your Copper account. Zapier verifies the connection immediately.
- 1Click 'Sign in to Copper' in the Zapier trigger panel
- 2In the popup, paste your Copper API key
- 3Enter the email address you use to log in to Copper
- 4Click 'Yes, Continue to Copper'
Zap Editor > Trigger > Configure
Configure the trigger filter for stage changes
After connecting, Zapier asks if you want to filter by a specific pipeline. If your Copper account has multiple pipelines, select the one you want to monitor. If you want to catch all pipelines, leave this blank. At this point, do not add a Zapier Filter step yet — first complete the trigger setup, then you'll add the stage-change filter in Step 6. Click 'Continue' to proceed.
- 1In the 'Pipeline' dropdown, select your target pipeline or leave blank for all
- 2Leave all other trigger fields at their defaults
- 3Click 'Continue'
Zap Editor > Trigger > Test Trigger
Test the trigger and verify sample data
Click 'Test trigger'. Zapier fetches the 3 most recently updated Copper opportunities. Pick one that has a realistic stage value — ideally one you manually moved to a different stage just before testing. Confirm the sample data includes the fields 'Pipeline Stage', 'Opportunity Name', 'Close Date', and 'Assignee' — you'll map these into the Slack message. If the sample is missing pipeline stage, go to Copper and manually change a deal's stage, then re-test.
- 1Click 'Test trigger'
- 2Review the fetched sample records
- 3Select the record that shows a meaningful pipeline stage value
- 4Confirm 'Pipeline Stage Name' appears in the data fields
Zap Editor > + Add Step > Filter by Zapier
Add a Filter step to catch only stage changes
Click the '+' button below the trigger step to add a new step. Search for 'Filter' and select 'Filter by Zapier'. This is a built-in Zapier tool — no extra app connection needed. Set the condition to: 'Pipeline Stage Name' > 'Text' > 'Is not exactly' > leave the value blank. This alone isn't enough — you need to also consider only running when the stage actually changed. The most reliable approach here is to filter on specific stage names you care about using 'Pipeline Stage Name' > 'Exactly matches' > 'Closed Won' (or whichever stages matter). Add multiple OR conditions for each stage you want to notify on.
- 1Click the '+' button below the Copper trigger step
- 2Search for 'Filter' and select 'Filter by Zapier'
- 3Set Field to 'Pipeline Stage Name' (from the Copper trigger)
- 4Set Condition to 'Text — Exactly matches'
- 5Enter your first target stage name, e.g. 'Closed Won'
- 6Click '+ OR' to add additional stage conditions like 'Proposal Sent', 'Negotiation'
Zap Editor > + Add Step > Slack > Send Channel Message
Add Slack as the action app
Click '+' below the Filter step to add the next step. Search for 'Slack' and select it. For the event, choose 'Send Channel Message' — this posts a message to a public or private Slack channel your bot is a member of. Don't choose 'Send Direct Message' unless you want to notify a single person rather than the whole team.
- 1Click the '+' below the Filter step
- 2Search for 'Slack' and select it
- 3In the Event dropdown, select 'Send Channel Message'
- 4Click 'Continue'
Zap Editor > Slack Action > Sign in to Slack
Connect your Slack workspace
Click 'Sign in to Slack'. A browser popup opens and asks you to authorize Zapier to post messages in your workspace. Make sure you're logged into the correct Slack workspace before clicking Authorize — if you're in the wrong workspace, the dropdown won't show your intended channels. After authorization, the popup closes and Zapier lists the account as connected.
- 1Click 'Sign in to Slack'
- 2Confirm the correct workspace name appears in the Slack authorization popup
- 3Click 'Allow' to grant Zapier posting permissions
- 4Return to the Zap editor
Zap Editor > Slack Action > Configure
Configure the Slack message
Select your target channel from the 'Channel' dropdown — for example, #pipeline or #sales-wins. In the 'Message Text' field, build your notification using the dynamic data from the Copper trigger. Write a template like: '🏆 *{{Opportunity Name}}* moved to *{{Pipeline Stage Name}}*\nOwner: {{Assignee Name}} | Value: ${{Monetary Value}} | Close: {{Close Date}}'. Click the '+' icon in the text field to insert dynamic fields from the Copper sample data. Set 'Bot Name' to something like 'Copper Bot' and optionally add a bot icon emoji.
- 1Select your target Slack channel from the 'Channel' dropdown
- 2Click inside the 'Message Text' field
- 3Type your message template and use the '+' to insert dynamic Copper fields
- 4Insert: Opportunity Name, Pipeline Stage Name, Assignee Name, Monetary Value, Close Date
- 5Set 'Bot Name' to 'Copper Bot' or your preferred name
- 6Set 'Send as a Bot' to 'Yes'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Slack Action > Test Action
Test the full Zap
Click 'Test action' at the bottom of the Slack configuration panel. Zapier sends a test message to your selected Slack channel using the sample Copper data. Open Slack and confirm the message appeared in the correct channel with the right fields populated. Check that the stage name, owner, and deal value all display correctly. If the message looks right, click 'Publish Zap'.
- 1Click 'Test action'
- 2Switch to Slack and open your target channel
- 3Confirm the test message arrived with correct field values
- 4Return to Zapier and click 'Publish Zap' if everything looks correct
zapier.com > My Zaps > [Your Zap] > Zap History
Turn on the Zap and verify live behavior
After publishing, the Zap is active. Go to Copper and manually move a deal to one of your filtered stage names. Wait up to 2 minutes — Zapier's Copper webhook is near-instant but can take up to 90 seconds in practice. Confirm the Slack message arrives in the right channel. If it doesn't arrive within 3 minutes, check the Zap History tab in Zapier (left sidebar) to see if the trigger fired and whether the Filter step stopped it.
- 1In Copper, open a test deal and change its pipeline stage to one of your filter values
- 2Wait up to 2 minutes
- 3Open your Slack channel and confirm the message arrived
- 4If no message, go to zapier.com > My Zaps > Zap History and inspect the run log
This Code by Zapier step runs between your Filter and Slack action steps. It formats the raw monetary value from Copper into '$42,000' (Copper sends it as '42000'), picks an emoji based on the stage name, and builds a clickable deep-link URL directly to the deal in Copper. In the Slack message step, reference the outputs as 'emoji', 'formatted_value', 'deep_link', and 'formatted_close_date'. Set the 'Input Data' section in the Code step to map: stage_name → Pipeline Stage Name, monetary_value → Monetary Value, opportunity_id → Opportunity ID, close_date → Close Date.
JavaScript — Code Step// Zapier Code by Zapier (JavaScript) — Step between Filter and Slack action▸ Show code
// Zapier Code by Zapier (JavaScript) — Step between Filter and Slack action // Purpose: Format monetary value with commas and dollar sign, // build a deep-link URL to the Copper deal, and pick a stage emoji.
... expand to see full code
// Zapier Code by Zapier (JavaScript) — Step between Filter and Slack action
// Purpose: Format monetary value with commas and dollar sign,
// build a deep-link URL to the Copper deal, and pick a stage emoji.
// Paste this in a 'Code by Zapier' step. Input data: set inputData fields
// in the step's 'Input Data' section mapping Zapier fields to these keys.
const stageEmojis = {
'Closed Won': '🏆',
'Closed Lost': '❌',
'Proposal Sent': '📄',
'Negotiation': '🤝',
'Qualified': '✅',
'Needs Follow-Up': '⏰'
};
const stageName = inputData.stage_name || 'Unknown Stage';
const emoji = stageEmojis[stageName] || '🔄';
const rawValue = parseFloat(inputData.monetary_value) || 0;
const formattedValue = rawValue.toLocaleString('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0
});
const opportunityId = inputData.opportunity_id;
const deepLink = opportunityId
? `https://app.copper.com/companies#opportunities/${opportunityId}`
: null;
const closeDate = inputData.close_date
? new Date(inputData.close_date).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
: 'No date set';
output = [{
emoji: emoji,
formatted_value: formattedValue,
deep_link: deepLink,
formatted_close_date: closeDate,
stage_name: stageName
}];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 has no technical resources and needs the pipeline alert running today. The Copper trigger in Zapier is one of the few CRM integrations that uses webhooks natively — you get sub-2-minute delivery without paying for a premium polling interval. The guided Zap builder also makes it easy for a sales ops manager to own this without engineering support. The one scenario where you'd pick something else: if you need conditional routing (Closed Won → #wins, Closed Lost → #postmortem, Stalled → manager DM), Zapier's Paths feature works but gets expensive fast — Make handles multi-branch logic for less money.
The cost math is straightforward. This Zap uses 2 tasks per run: 1 for the Copper trigger, 1 for the Slack action. A team with 50 stage changes per month uses 100 tasks — well within Zapier's Starter plan at $19.99/month for 750 tasks. At 200 stage changes/month (400 tasks), you're still under the limit. Add the Code by Zapier step from the pro tip and it becomes 3 tasks per run, so 200 stage changes = 600 tasks. That's still Starter territory. The Zap only gets expensive if you're running dozens of other Zaps on the same account eating into the task pool.
Make handles this workflow for about $9/month (Core plan, 10,000 operations) and gives you a visual scenario builder that's easier to debug than Zapier's linear editor — plus real multi-branch routing without per-path charges. n8n does it free if self-hosted and lets you write full JavaScript transformations directly in the node, which is cleaner than Code by Zapier. Power Automate connects to Copper only via HTTP Request (no native connector), so setup is significantly harder. Pipedream is the best choice if you want to add custom logic like previous-stage tracking, since you can store state between runs using Pipedream's built-in data stores. Zapier is still the right call here for most teams because the Copper connector is maintained, the setup takes under 20 minutes, and the Filter + Code combination covers 80% of what people actually need.
Three things you'll hit after go-live. First: Copper fires the 'Updated Opportunity' webhook on every field save, not just stage changes. Without the Filter step, you'll get Slack spam every time a rep edits a note. Second: Copper's API returns monetary values as integers with no currency symbol and no comma formatting — '$42000' becomes '42000' in your Slack message unless you add the Code step to format it. Third: if your Copper admin rotates API keys as part of a security policy, the Zap will silently stop triggering. Zapier marks the Zap as 'off' but doesn't always send an alert immediately. Check Zap History weekly for the first month and set up Zapier's error email notifications before you consider this fully in production.
Ideas for what to build next
- →Route notifications to different channels by stage — Add a Paths by Zapier step after the Filter to send Closed Won alerts to #wins, stalled deals to #needs-attention, and proposals to #active-pipeline. Each path gets its own Slack action with a custom message tone.
- →Add a weekly pipeline digest — Build a second Zap using a Schedule trigger that runs every Monday morning, queries Copper for all open deals by stage, and posts a summary table to Slack — so the team gets both real-time alerts and a weekly snapshot without manual reporting.
- →Log stage changes to a Google Sheet — Add a Google Sheets action after the Slack step in the same Zap to append each stage change to a tracking sheet. After 90 days, you have a full history of pipeline velocity — how long deals sit in each stage — without buying a BI tool.
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