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

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

Use case type

notification

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

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

Copper account with API access enabled — go to Copper Settings > Integrations > API Keys and generate a key before starting
Copper user account must have CRM Admin role or at minimum read access to all pipelines you want to monitor
Slack workspace admin or the ability to install apps — Zapier needs OAuth permission to post messages on behalf of a bot in your workspace
Access to the target Slack channel — the Zapier bot must be invited to any private channels you want to post to
Zapier account on Starter plan or higher — the Copper trigger uses multi-step Zaps, which are not available on the free tier

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Opportunity Namename
Pipeline Stage Namepipeline_stage_id
Assignee Nameassignee_id
5 optional fields▸ show
Monetary Valuemonetary_value
Close Dateclose_date
Pipeline Namepipeline_id
Company Namecompany_name
Opportunity IDid

Step-by-Step Setup

1

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.

  1. 1Click 'Create Zap' in the left sidebar
  2. 2Click 'Untitled Zap' at the top of the editor
  3. 3Type a descriptive name, e.g. 'Copper Deal Stage → Slack #pipeline'
  4. 4Press Enter to save the name
What you should see: The editor shows your new Zap name at the top and a blank trigger step labeled 'Trigger' waiting to be configured.
2

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.

  1. 1Click the 'Trigger' step box
  2. 2Type 'Copper' in the search field
  3. 3Select 'Copper' from the dropdown (confirm the blue Copper logo)
  4. 4Click the 'Event' dropdown and select 'Updated Opportunity'
What you should see: The trigger step shows 'Copper — Updated Opportunity' and a prompt to connect your Copper account.
Common mistake — Copper's Zapier trigger is labeled 'Opportunity' — that is Copper's internal term for a deal. Don't look for a trigger called 'Deal'; it doesn't exist in this integration.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Copper as the trigger app
Slack
SL
module added
3

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.

  1. 1Click 'Sign in to Copper' in the Zapier trigger panel
  2. 2In the popup, paste your Copper API key
  3. 3Enter the email address you use to log in to Copper
  4. 4Click 'Yes, Continue to Copper'
What you should see: The popup closes and Zapier displays your Copper account email with a green checkmark next to it.
Common mistake — The API key belongs to the user whose email you enter. If you use a shared service account email, make sure that account has CRM Admin permissions in Copper — otherwise the trigger won't see all pipeline stages.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

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.

  1. 1In the 'Pipeline' dropdown, select your target pipeline or leave blank for all
  2. 2Leave all other trigger fields at their defaults
  3. 3Click 'Continue'
What you should see: Zapier moves to the 'Test trigger' screen and prompts you to fetch a recent Copper opportunity to use as sample data.
Common mistake — Zapier cannot filter by 'stage changed' specifically at the trigger level — the Updated Opportunity trigger fires on ANY field change. You handle this in Step 6 with a Filter step. Don't skip it or you'll spam Slack on every tiny CRM edit.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Copper
CO
notified
5

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.

  1. 1Click 'Test trigger'
  2. 2Review the fetched sample records
  3. 3Select the record that shows a meaningful pipeline stage value
  4. 4Confirm 'Pipeline Stage Name' appears in the data fields
What you should see: You see a record with fields including 'Name', 'Pipeline Stage Name', 'Assignee Name', 'Close Date', and 'Monetary Value'. The stage name shows a human-readable label like 'Proposal Sent', not a numeric ID.
Zapier
▶ Turn on & test
executed
Slack
Copper
Copper
🔔 notification
received
6

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.

  1. 1Click the '+' button below the Copper trigger step
  2. 2Search for 'Filter' and select 'Filter by Zapier'
  3. 3Set Field to 'Pipeline Stage Name' (from the Copper trigger)
  4. 4Set Condition to 'Text — Exactly matches'
  5. 5Enter your first target stage name, e.g. 'Closed Won'
  6. 6Click '+ OR' to add additional stage conditions like 'Proposal Sent', 'Negotiation'
What you should see: The Filter step shows all your OR conditions listed. At the bottom, Zapier shows a green 'Your Zap would have continued' message when tested against the sample data.
Common mistake — Stage names in Zapier's filter must match Copper exactly — including capitalization. 'closed won' will not match 'Closed Won'. Copy-paste stage names directly from Copper's pipeline settings to avoid typos.
7

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.

  1. 1Click the '+' below the Filter step
  2. 2Search for 'Slack' and select it
  3. 3In the Event dropdown, select 'Send Channel Message'
  4. 4Click 'Continue'
What you should see: The action step shows 'Slack — Send Channel Message' and prompts you to connect your Slack workspace.
8

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.

  1. 1Click 'Sign in to Slack'
  2. 2Confirm the correct workspace name appears in the Slack authorization popup
  3. 3Click 'Allow' to grant Zapier posting permissions
  4. 4Return to the Zap editor
What you should see: Zapier shows your Slack workspace name with a green checkmark. The 'Channel' dropdown now loads your available channels.
Common mistake — Zapier's Slack bot can only post to channels it has been invited to. If you don't see your target channel in the dropdown, go to Slack, open that channel, type '/invite @Zapier', and then return to Zapier and refresh the channel list.
9

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.

  1. 1Select your target Slack channel from the 'Channel' dropdown
  2. 2Click inside the 'Message Text' field
  3. 3Type your message template and use the '+' to insert dynamic Copper fields
  4. 4Insert: Opportunity Name, Pipeline Stage Name, Assignee Name, Monetary Value, Close Date
  5. 5Set 'Bot Name' to 'Copper Bot' or your preferred name
  6. 6Set 'Send as a Bot' to 'Yes'
What you should see: The message preview in the right panel shows your template with the sample data filled in, e.g. '🏆 *Acme Corp Renewal* moved to *Closed Won* — Owner: Sarah Lin | Value: $24,000 | Close: Dec 15, 2024'.
Common mistake — Copper returns monetary values as raw numbers without currency formatting (e.g., '24000' not '$24,000'). Add the dollar sign manually in your message template — Zapier's basic Send Channel Message won't auto-format numbers.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
10

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

  1. 1Click 'Test action'
  2. 2Switch to Slack and open your target channel
  3. 3Confirm the test message arrived with correct field values
  4. 4Return to Zapier and click 'Publish Zap' if everything looks correct
What you should see: A formatted Slack message from 'Copper Bot' appears in your target channel with the deal name, stage, owner, value, and close date all populated from the Copper sample record.
11

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.

  1. 1In Copper, open a test deal and change its pipeline stage to one of your filter values
  2. 2Wait up to 2 minutes
  3. 3Open your Slack channel and confirm the message arrived
  4. 4If no message, go to zapier.com > My Zaps > Zap History and inspect the run log
What you should see: A live Slack notification arrives within 90 seconds of changing the deal stage in Copper. The Zap History shows a green 'Success' run with all steps completed.

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

VerdictWhy Zapier for this workflow

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.

Cost

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.

Tradeoffs

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 stageAdd 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 digestBuild 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 SheetAdd 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

Was this guide helpful?
Slack + Copper overviewZapier profile →