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

How to Send Daily Copper Pipeline Updates to Slack with Zapier

Zapier runs on a schedule, pulls deal and activity data from Copper, and posts a formatted pipeline summary to a Slack channel — no manual reporting required.

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 people who want leadership to see a daily pipeline snapshot in Slack without anyone pulling a manual report.

Not ideal for

Teams that need real-time deal alerts the moment a stage changes — use a webhook-triggered Zap or Make for that instead.

Sync type

scheduled

Use case type

reporting

Real-World Example

💡

A 12-person B2B SaaS sales team uses this to post a 9 AM pipeline summary to their #sales-leadership channel every weekday. Before automation, the sales manager exported a Copper report manually each morning and pasted numbers into Slack — a 15-minute task that got skipped on busy days. Now leadership sees deal count, total pipeline value, and deals closing this week before the morning standup starts.

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 — found under Settings > Integrations > API Keys. Requires at least the Basic plan.
Copper user role must be Admin or have 'View All Opportunities' permission — otherwise the API returns only the authenticated user's deals.
Slack workspace where you have permission to install apps and the bot can post to the target channel.
Zapier account on the Starter plan or higher — the Free plan does not support multi-step Zaps or the Filter/Code steps this workflow requires.
The target Slack channel must exist before setup. If it is a private channel, the Zapier bot must be invited to it manually with /invite @Zapier.

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Opportunity Namename
Monetary Valuemonetary_value
Close Dateclose_date
Pipeline Stagepipeline_stage_id
Deal Statusstatus
Scheduled Date (Trigger)
4 optional fields▸ show
Assigned To (Owner)assignee_id
Pipeline IDpipeline_id
Activity Dateactivity_date
Activity Typetype

Step-by-Step Setup

1

Zapier Dashboard > Create Zap > Trigger > Schedule by Zapier

Create a new Zap and set the Schedule trigger

Log into Zapier and click the orange 'Create Zap' button in the top left. In the trigger search box, type 'Schedule' and select the native 'Schedule by Zapier' app. Choose 'Every Day' as the event. You'll see options for time of day and day-of-week filtering — set this now before moving on, because you can't easily change the schedule frequency later without rebuilding the trigger.

  1. 1Click the orange 'Create Zap' button in the top left of the Zapier dashboard
  2. 2In the trigger search field, type 'Schedule'
  3. 3Select 'Schedule by Zapier' from the results
  4. 4Choose 'Every Day' as the trigger event
  5. 5Set 'Time of Day' to your preferred send time (e.g. 8:00 AM) and select your timezone
What you should see: You should see a gray 'Schedule by Zapier' trigger card with your chosen time displayed. Zapier will show a sample trigger payload with a timestamp field — this confirms the trigger is configured.
Common mistake — Zapier runs scheduled Zaps in UTC by default unless you explicitly pick a timezone. A 9 AM Eastern send is 2 PM UTC — get this wrong and your team gets the update at 2 AM.
Zapier
+
click +
search apps
Slack
SL
Slack
Create a new Zap and set the…
Slack
SL
module added
2

Copper App > Settings > Integrations > API Keys

Connect your Copper account

Add a new action step and search for 'Copper' in the app selector. Choose the 'Find Opportunities' action — this is Copper's term for deals. Zapier will prompt you to connect a Copper account. You'll need your Copper API key and the email address tied to your Copper account. Find your API key in Copper under Settings > Integrations > API Keys.

  1. 1Click the '+' icon to add a new action step below the Schedule trigger
  2. 2Search for 'Copper' in the app selector
  3. 3Select 'Find Opportunities' as the action event
  4. 4Click 'Sign in to Copper' and enter your Copper email and API key
  5. 5Click 'Yes, Continue to Copper' to authorize
What you should see: You should see a green 'Connected' badge next to your Copper account name. The action step will expand to show configuration fields for the opportunity search.
Common mistake — The API key in Copper is tied to a specific user account. If you use a personal key and that employee leaves, the Zap breaks. Create a dedicated 'Zapier Integration' user in Copper and use that account's API key.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
3

Zapier > Copper Action > Find Opportunities > Filters

Configure the Copper opportunity search filters

In the 'Find Opportunities' action, set your filters to pull only the deals you want in the summary. At minimum, filter by pipeline stage or close date range. Use Copper's 'Close Date Start' and 'Close Date End' fields to capture deals closing this week. You can also filter by Pipeline ID if you have multiple pipelines — find the Pipeline ID in Copper under Settings > Pipelines by hovering over the pipeline name.

  1. 1In the 'Find Opportunities' configuration, locate the 'Close Date Start' field
  2. 2Map 'Close Date Start' to today's date using Zapier's built-in date formatting (use the Schedule trigger's 'Scheduled Time' field)
  3. 3Set 'Close Date End' to 7 days from today using a Formatter step (you'll add this before this step if needed)
  4. 4Optionally set 'Pipeline ID' to the specific pipeline you want to report on
  5. 5Click 'Continue' and then 'Test Step' to verify results come back
What you should see: After clicking 'Test Step', you should see a list of opportunity records returned from Copper with fields like name, value, stage, close date, and owner. If your filter is too narrow, you may see 0 results — widen the date range to confirm the connection works.
Common mistake — Copper's API returns a maximum of 200 records per search call. If your pipeline has more than 200 open deals, this step will silently truncate. For teams with large pipelines, add a stage filter to keep the count under 200.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Copper
CO
notified
4

Zapier > + Add Step > Formatter by Zapier > Numbers > Perform Math

Add a Formatter step to calculate pipeline totals

The Copper search returns individual deal records, not aggregated totals. Add a 'Formatter by Zapier' step between the Copper search and the Slack message. Use the 'Numbers' action with the 'Perform Math' event to sum deal values. You'll need to run this once for total pipeline value and optionally again for deals-closing-this-week value. This is the most tedious part of the setup — Zapier Formatter handles basic math but can't loop over multiple records natively.

  1. 1Click '+' to add a step after the Copper search
  2. 2Search for 'Formatter by Zapier' and select it
  3. 3Choose 'Numbers' as the action, then 'Perform Math' as the event
  4. 4In the formula field, manually reference deal value fields from the Copper step using the field picker (e.g. {{step2.monetary_value}} + {{step2.monetary_value__2}} + ...)
  5. 5Click 'Continue' and test the step — verify the output shows a numeric total
What you should see: The Formatter step should return a single number representing the summed deal value. You'll see this as 'Output' in the test results panel on the right side of the screen.
Common mistake — Zapier Formatter can only reference a fixed number of records from the previous step — it does not loop. If deal count varies day-to-day, the sum formula breaks on days with fewer deals than fields you've mapped. Consider using Code by Zapier (Step 5 below) instead for reliable summation.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
5

Zapier > + Add Step > Code by Zapier > JavaScript

Add Code by Zapier to sum deal values dynamically

If your deal count varies (it will), replace or supplement the Formatter step with a 'Code by Zapier' step using JavaScript. This step takes the raw Copper output and calculates totals, deal count, and average deal size — all in one pass. Set the input data to pass the line-item deal values from the Copper step. The code block runs in Zapier's sandboxed Node.js environment and returns an object with the aggregated fields your Slack message needs.

  1. 1Click '+' to add a step after the Copper search
  2. 2Search for 'Code by Zapier' and select 'Run JavaScript'
  3. 3In the 'Input Data' section, add a key called 'deals' and map it to the monetary_value field from the Copper step
  4. 4Paste the aggregation code into the 'Code' field (see pro tip below)
  5. 5Click 'Test Step' and verify the output shows totalValue, dealCount, and avgDealSize
What you should see: The code step should return three fields in the output panel: totalValue (formatted as currency), dealCount (integer), and avgDealSize (formatted as currency). These fields will be available to map into the Slack message.

Paste this into a 'Code by Zapier' (Run JavaScript) step placed after the Copper 'Find Opportunities' step. In the Input Data section, add a key named 'rawDeals' and map it to the monetary_value line-item output from the Copper step. The code handles variable deal counts, strips currency formatting, and returns four clean fields your Slack message can reference directly.

JavaScript — Code Step// Input: rawDeals — comma-separated monetary values from Copper line items
▸ Show code
// Input: rawDeals — comma-separated monetary values from Copper line items
// e.g. '48000,12000,27500'
const rawInput = inputData.rawDeals || '';

... expand to see full code

// Input: rawDeals — comma-separated monetary values from Copper line items
// e.g. '48000,12000,27500'

const rawInput = inputData.rawDeals || '';

// Split the raw input into individual values
const dealStrings = rawInput.split(',').map(s => s.trim()).filter(s => s.length > 0);

// Parse each value: strip currency symbols, commas, whitespace
const dealValues = dealStrings.map(val => {
  const cleaned = val.replace(/[^0-9.]/g, '');
  const parsed = parseFloat(cleaned);
  return isNaN(parsed) ? 0 : parsed;
});

// Calculate aggregates
const dealCount = dealValues.length;
const totalValue = dealValues.reduce((sum, val) => sum + val, 0);
const avgDealSize = dealCount > 0 ? totalValue / dealCount : 0;

// Format as USD currency strings
const formatUSD = (num) => '$' + num.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 });

// Return fields for Slack message mapping
output = [
  {
    dealCount: dealCount,
    totalValue: formatUSD(totalValue),
    avgDealSize: formatUSD(avgDealSize),
    summaryLine: `${dealCount} open deals | Total: ${formatUSD(totalValue)} | Avg: ${formatUSD(avgDealSize)}`
  }
];
6

Zapier > + Add Step > Slack > Send Channel Message

Connect your Slack account

Add the next action step and search for 'Slack'. Choose 'Send Channel Message' as the event. Click 'Sign in to Slack' — this opens an OAuth popup where you'll authorize Zapier to post on behalf of a bot. You'll select the workspace and grant permission to post messages. Make sure you authorize as a bot, not as your personal user, so messages show up as a named bot rather than your name.

  1. 1Click '+' to add a new action step
  2. 2Search for 'Slack' and select the Slack app
  3. 3Choose 'Send Channel Message' as the action event
  4. 4Click 'Sign in to Slack' and complete the OAuth flow in the popup window
  5. 5Select your workspace and click 'Allow'
What you should see: You should see a green 'Connected' badge with your Slack workspace name. The action configuration panel will expand to show fields for Channel, Message Text, Bot Name, and Bot Icon.
Common mistake — Zapier's Slack integration requires the bot to be invited to private channels before it can post. If your #sales-leadership channel is private, type /invite @Zapier in that channel first. Public channels work without this step.
7

Zapier > Slack Action > Send Channel Message > Configuration

Configure the Slack channel and message format

In the Slack action, select the target channel from the dropdown — for example, #sales-daily or #sales-leadership. Set the Bot Name to something recognizable like 'Pipeline Bot' and add an emoji for the bot icon (e.g. :bar_chart:). In the Message Text field, compose the summary using Slack's mrkdwn format. Use the field picker to pull in the calculated totals from your Code step and any deal-level fields from the Copper step.

  1. 1Click the 'Channel' dropdown and select your target Slack channel
  2. 2Set 'Bot Name' to 'Pipeline Bot' (or your preferred name)
  3. 3Set 'Bot Icon' to an emoji like ':bar_chart:'
  4. 4In the 'Message Text' field, build your summary using Slack mrkdwn — bold headers use *text*, sections use line breaks
  5. 5Use the field picker (the blue '+' icon) to insert values from the Code step and Copper step
What you should see: The Message Text field should show a mix of static text and dynamic field tags. It will look something like: *Daily Pipeline Summary — {{date}}*\nOpen Deals: {{dealCount}}\nTotal Value: {{totalValue}}\nClosing This Week: {{closingThisWeek}}
Common mistake — Slack's mrkdwn in Zapier only renders correctly if you turn ON the 'Send as Bot' toggle. If you leave it off, Slack treats the message as plain text and your bold headers appear as raw asterisks.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
8

Zapier > + Add Step > Copper > Find Activities

Add a second Copper search for activity data

If you want to include activity counts (calls logged, emails sent) in the summary, add another 'Find Activities' action from the Copper app. Set the date range to the previous 24 hours using the Schedule trigger's timestamp. This step runs in parallel with your deal search — it is a separate Copper API call that returns activity records. You can then reference the activity count in your Slack message.

  1. 1Click '+' to add a new step after the Code step but before the Slack step
  2. 2Search for 'Copper' and select 'Find Activities'
  3. 3Set the 'Date Start' filter to the Schedule trigger's timestamp minus 24 hours (use a Formatter step to subtract time if needed)
  4. 4Set 'Activity Type' filter if you want only calls or emails — leave blank for all activity types
  5. 5Click 'Test Step' and confirm activity records are returned
What you should see: You should see a list of activity records from the past 24 hours. Each record includes type, date, and the associated opportunity or person. If you see 0 results, widen the date range to confirm the connection works before narrowing it.
Common mistake — Copper's activity API does not return a pre-aggregated count — it returns individual records. You'll need a second Code by Zapier step or a Formatter to count them. Plan for this before building your message template.
9

Zapier > + Add Step > Filter by Zapier

Set day-of-week filtering to skip weekends

The 'Every Day' schedule trigger fires on weekends too. Add a 'Filter by Zapier' step immediately after the Schedule trigger to stop the Zap from running on Saturdays and Sundays. Use the condition: 'Scheduled Day of Week' does not contain 'Saturday' AND does not contain 'Sunday'. Without this, your team gets pipeline updates on Saturday morning.

  1. 1Click '+' to add a step directly after the Schedule trigger (before the Copper steps)
  2. 2Search for 'Filter by Zapier' and select it
  3. 3In the first condition, select 'Scheduled Day of Week' from the field picker
  4. 4Set the condition to 'Does not contain' and type 'Saturday'
  5. 5Click '+ AND' to add a second condition: 'Does not contain' 'Sunday', then click 'Continue'
What you should see: The Filter step shows a summary of your conditions. When you test it on a weekday, it should say 'Zap would continue'. If you test on a weekend, it will say 'Zap would not continue' — that is the correct behavior.
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.
10

Zapier Editor > Test Zap button (bottom right)

Test the full Zap end-to-end

Click 'Test Zap' from the Zapier editor to run all steps in sequence with real data. Watch each step turn green one by one. Check the Slack channel immediately after — the message should appear within 30-60 seconds. Verify the numbers in the message match what you see in Copper's own pipeline view. If the totals look off, go back to the Code step and check which deal value fields were passed in as input data.

  1. 1Click the 'Test Zap' button at the bottom right of the editor
  2. 2Watch each step card — a green checkmark means it passed, a red X means it failed
  3. 3Open your Slack channel and confirm the pipeline summary message appeared
  4. 4Compare the deal count and total value in the Slack message against Copper's pipeline view
  5. 5If numbers match, click 'Publish Zap' in the top right
What you should see: Every step shows a green checkmark. The Slack channel shows a formatted pipeline summary with the current date, deal count, total value, and any activity metrics you configured. The message is posted by 'Pipeline Bot' with the bar chart icon.
Common mistake — Zapier's test run uses real data from Copper but also sends a real Slack message to the real channel. Tell your team to expect a test message so they're not confused by an out-of-schedule update.
Zapier
▶ Turn on & test
executed
Slack
Copper
Copper
🔔 notification
received
11

Zapier Dashboard > Your Zaps > [Zap Name] > Task History

Turn on the Zap and confirm the first scheduled run

Click the toggle in the top right of the Zap editor to turn it on. Zapier will confirm the Zap is live and show the next scheduled run time. Check back the following morning at your configured send time and verify the message posted. Look at the Zap's 'Task History' (left sidebar > Task History) to confirm it ran and all steps show green. If any step fails silently, Zapier sends an email to the Zap owner — make sure the owner email is monitored.

  1. 1Click the toggle switch in the top right of the Zap editor to activate the Zap
  2. 2Confirm the 'Next run' timestamp shown by Zapier matches your intended send time and timezone
  3. 3The following morning, open Task History from the left sidebar of the Zapier dashboard
  4. 4Click on the most recent run and verify all steps show green checkmarks
  5. 5Confirm the Slack message appeared in the correct channel at the correct time
What you should see: Task History shows a successful run at the scheduled time. Each step (Schedule, Filter, Copper Search, Code, Activity Search, Slack) shows a green checkmark and a non-zero task count. The Slack message is live in the channel.
Common mistake — Confirm your workflow timezone matches your business timezone — n8n uses the instance timezone by default. Also verify the workflow is saved and set to Active, since Schedule Triggers won't fire on inactive workflows.

Scaling Beyond 200+ open deals in Copper+ Records

If your volume exceeds 200+ open deals in Copper records, apply these adjustments.

1

Split searches by pipeline stage

Copper's API caps responses at 200 records per call. If you have 200+ open deals, run separate 'Find Opportunities' steps filtered by stage (e.g. one for 'Proposal Sent', one for 'Negotiation'). Sum the results in the Code step. This keeps each API call under the limit.

2

Summarize instead of listing individual deals

Slack messages have a 4,000-character limit. A pipeline with 200 deals listed individually will exceed it and the message will be silently truncated. Design the Slack message to show aggregated totals and stage counts only — reserve deal-level lists for teams with fewer than 20 active deals.

3

Consider switching to Make for large pipelines

Make's Copper module supports iterator modules that loop over every record natively — no need to manually map line items. For pipelines over 200 deals, Make handles pagination automatically and can aggregate in a single aggregator module. The same workflow in Make costs less per run at high volume.

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 this running by end of day. The Schedule trigger, Filter, Code, and Slack steps are all available in Zapier's guided builder — no JSON, no scripting environment to configure, no self-hosting. Setup from scratch takes about 45 minutes. The one scenario where you'd skip Zapier: if you need deal-level rows for more than 200 active opportunities, or if you want the summary to loop over every individual record and format them into a table. Zapier's line-item handling is clunky for that — Make handles it cleaner with its aggregator module.

Cost

The math is straightforward. This Zap uses 5-6 tasks per run: one for the Schedule trigger, one for the Filter, one for the Copper opportunity search, one for the Code step, one for the activity search, one for the Slack post. Running weekdays only = 22 runs per month = roughly 110-132 tasks per month. Zapier's Starter plan includes 750 tasks/month at $19.99/month. You'll stay well under the limit unless you add more Zaps. Make would run the same workflow for $9/month on its Core plan with 10,000 operations included — about half the cost. If budget matters more than setup speed, Make wins here.

Tradeoffs

Make's iterator and aggregator modules handle the 'sum all deal values' problem natively — no Code step needed, no manual line-item mapping. That's a genuine advantage. n8n can do the same with a Function node and runs free if self-hosted, but you're managing infrastructure. Power Automate has a Copper connector but it's a premium connector requiring a per-user plan on top of your Microsoft 365 subscription — the cost math gets ugly fast for a small sales team. Pipedream handles this well in code and costs less at scale, but requires a developer to maintain it. Zapier is still the right call if you want a non-technical team member to own the Zap, edit the message template, or troubleshoot it without filing an IT ticket.

Three things you'll hit after launch. First: Copper returns assignee_id as a number, not a name. Your Slack message will show '4521893' where 'Sarah Okonkwo' should be — build in a lookup step or use Copper's 'Find User' action to resolve IDs before they hit the message template. Second: the Code step breaks if Copper returns only one deal, because Zapier formats single-record results differently than multi-record line items — test with exactly one deal in your filter results before going live. Third: Slack's mrkdwn formatting does not render in Zapier's message preview panel — the message looks like broken plain text in the editor but posts correctly in Slack. Don't let the ugly preview fool you into stripping out the formatting.

Ideas for what to build next

  • Add a Weekly Digest VariantCreate a second Zap on a 'Every Week' schedule that posts a deeper Friday summary — include won/lost deal counts for the week alongside the open pipeline. This gives leadership both daily pulse checks and a weekly wrap-up without any manual work.
  • Trigger Deal-Level Alerts on Stage ChangesAdd a separate Zap that fires immediately when a Copper deal moves to 'Negotiation' or 'Proposal Sent' — post to a different Slack channel with the deal name, value, and owner. This pairs with the daily summary: broad picture every morning, instant alerts for key moments.
  • Route Summaries to Individual Rep DMsExtend the workflow to send each sales rep a personalized DM in Slack showing only their own deals — use Zapier's 'Send Direct Message' action in Slack and filter the Copper results by assignee. Reps get personal accountability without seeing each other's numbers.

Related guides

Was this guide helpful?
Slack + Copper overviewZapier profile →