Skip to content

The moment it happens

Post Copper wins to each pipeline's Slack channel

When a deal is marked Won, the channel for its pipeline hears about it with the value and owner.

Runs
The moment it happens
Apps
Copper
AI
Not needed
Access
read (admin key)

Send this to your assistant

Create a ClickRuntime automation: when a Copper opportunity is marked Won, post the name, value and owner to Slack: #wins-enterprise for the Enterprise pipeline and #wins-smb for SMB.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Closing a deal deserves attention, yet in many Copper accounts the news stays inside the CRM. The rep marks the opportunity Won, finance and delivery teams do not hear until the next meeting, and the team that worked on the deal gets no recognition. Teams with several pipelines have a second problem: a won enterprise deal and a won small-business deal need different audiences.

When Copper reports an opportunity update, this checks whether its status is Won, fetches the opportunity's details, and posts to the Slack channel assigned to that pipeline. Each team hears about wins in its own channel.

It is especially useful for companies running separate pipelines for products, regions or customer segments. Each pipeline is paired with a Slack channel in the setup, so an enterprise win and a small-business win each reach the people who care about them, with the details of the deal attached.

What you get out of it

  • Tell delivery teams to start right away

    When a deal is won, onboarding or implementation can begin the same day. Customers feel the difference between a quick handoff and a two-week wait. Implementation can begin the same day a deal is won, and customers notice the difference between a quick handoff and a two-week wait.

  • Alert finance to invoice promptly

    Finance sees the win and can raise the invoice or contract paperwork at once. Faster billing means faster cash. Finance sees the win and can raise the invoice or paperwork at once, and faster billing means faster cash.

  • Celebrate wins in the right place

    Posting to the pipeline's own channel keeps announcements relevant. Each team celebrates its own successes without wading through other pipelines' news. Each team celebrates its own successes in its own channel, with no scrolling through news from pipelines it does not work on.

  • Keep morale high through visibility

    Seeing wins appear regularly reminds teams that their work pays off. Recognition costs nothing and encourages the effort behind the next deal. Wins appearing regularly remind teams that their work pays off, and recognition costs nothing but encourages the next deal.

  • Reduce manual announcements

    Reps no longer have to remember to tell the channel. The announcement is consistent and includes the same details for every win. Reps no longer need to remember to tell the channel, and every announcement carries the same details.

How it works

What happens, step by step

  1. Each time an opportunity's status changes in Close, Close tells ClickRuntime straight away.

  2. It checks whether the deal was marked Won and ignores other changes.

  3. It looks up the deal's name, value, owner and pipeline.

  4. A message goes to that pipeline's Slack channel, like "Won: Northwind 2027 renewal $120,000 (Morgan)".

Before it runs live

  • Connect Copper
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Post Copper wins to each pipeline's Slack channeljust nowSucceeded
Slack · #wins-enterprise:trophy: Won: *Northwind 2027 renewal* $120,000 (Morgan)

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Copper steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
opportunity_won_alert_by_pipeline.pyexample
from clickruntime import on_event, credentials, http, notify

API = "https://api.copper.com/developer_api/v1"
CHANNELS = {"Enterprise": "#wins-enterprise", "SMB": "#wins-smb"}

@on_event
def handle(event):
    body = event.json or {}
    if body.get("type") != "opportunity" or body.get("updated_attributes", {}).get("status", [None, None])[1] != "Won":
        return {"skipped": "not a win"}
    headers = {"X-PW-AccessToken": credentials.secret("COPPER_API_KEY"), "X-PW-Application": "developer_api",
               "X-PW-UserEmail": "admin@acme.example", "Content-Type": "application/json"}
    pipelines = {p["id"]: p["name"] for p in http.get(f"{API}/pipelines", headers=headers).json()}
    for opp_id in body.get("ids", []):
        opp = http.get(f"{API}/opportunities/{opp_id}", headers=headers).json()
        channel = CHANNELS.get(pipelines.get(opp["pipeline_id"]))
        if not channel:
            continue
        owner = http.get(f"{API}/users/{opp['assignee_id']}", headers=headers).json()["name"] if opp.get("assignee_id") else "-"
        notify.slack(f":trophy: Won: *{opp['name']}* ${opp.get('monetary_value') or 0:,} ({owner})", channel=channel)
    return {"ids": body.get("ids")}

FAQ

Common questions

How does it decide which channel to use?
It maps each Copper pipeline to a Slack channel in the setup. A won opportunity in the Enterprise pipeline goes to that pipeline's channel, while others go to theirs. Every Copper pipeline is mapped to a channel in the setup, so a win in the Enterprise pipeline goes to that pipeline's channel only.
What if a deal is marked Won, then changed back?
The post is sent when the status becomes Won. If the status is reverted and set to Won again, a second message can appear, so teams sometimes see a correction. The message is sent when the status becomes Won, so a deal moved back and set to Won again can appear twice.
Can the post include the deal value?
Yes, the opportunity details fetched from Copper include value when it is set. Tell your AI assistant to show or hide the amount, and approve the final message layout. The deal value comes from the opportunity record.
What permissions does it need?
read (admin key). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run for each event the app sends.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Post Copper wins to each pipeline's Slack channel” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.