Intermediate~15 min setupCommunication & CRMVerified April 2026
Slack logo
Pipedrive logo

How to Send Pipedrive Deal Stage Alerts to Slack with Power Automate

Automatically posts a Slack channel message whenever a deal moves to a new pipeline stage in Pipedrive, including deal name, owner, value, and new stage.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Microsoft 365 sales teams who already use Power Automate and need deal stage alerts in Slack without buying another automation tool.

Not ideal for

Teams that need sub-60-second alert latency — Power Automate polls Pipedrive every 1-5 minutes, so use Make or Zapier if speed is critical.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 20-person B2B SaaS sales team routes deal stage changes to stage-specific Slack channels: #deals-qualified, #deals-proposal, and #deals-closed-won. Before this flow, reps updated a shared Google Sheet manually and managers checked Pipedrive twice a day — stage changes sat unnoticed for 3-4 hours on average. After setup, the Slack message fires within 3 minutes of a stage change and tags the deal owner by name.

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

Skip the setup

Import this workflow directly into Power Automate

Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Pipedrive account with API access enabled and your personal API token available under Settings > Personal preferences > API
Slack workspace admin or channel manager permissions to invite a bot to the target channel(s)
Microsoft 365 account with Power Automate access — the free Power Automate plan supports this flow, but polling frequency is capped at 5-minute intervals on the free tier vs. 1-minute on paid
Pipedrive pipeline stages finalized and named consistently — stage names must match exactly when using Switch-based channel routing
Target Slack channels created in advance with the Power Automate bot already invited (/invite @Power Automate) before configuring the flow

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Deal IDid
Deal Titletitle
Stage Namestage_name
Previous Stage IDprevious_stage_id
Deal Owner Nameowner_name.name
5 optional fields▸ show
Deal Valuevalue
Currencycurrency
Pipeline Namepipeline_name
Expected Close Dateexpected_close_date
Deal Update Timeupdate_time

Step-by-Step Setup

1

make.powerautomate.com > My flows > + New flow > Automated cloud flow

Open Power Automate and create a new Automated cloud flow

Go to make.powerautomate.com and sign in with your Microsoft 365 account. In the left sidebar click 'My flows', then click '+ New flow' at the top. Select 'Automated cloud flow' from the dropdown — this is the flow type that fires on an external event rather than a schedule. Give the flow a clear name like 'Pipedrive Stage Change → Slack'.

  1. 1Click 'My flows' in the left sidebar
  2. 2Click '+ New flow' in the top-left area
  3. 3Select 'Automated cloud flow'
  4. 4Type a flow name: 'Pipedrive Stage Change → Slack'
  5. 5Click 'Skip' on the trigger picker — you'll set it manually in the next step
What you should see: You should see the flow canvas open with an empty trigger block labeled 'Choose a trigger'.
Common mistake — Don't select 'Instant cloud flow' or 'Scheduled cloud flow' — those require manual runs or a timer. You need Automated so the Pipedrive connector can push events.
2

Flow canvas > Trigger block > Search: Pipedrive > When a deal is updated

Add the Pipedrive 'Watch Deals' trigger

Click the empty trigger block on the canvas. In the search bar type 'Pipedrive' and select the Pipedrive connector from the results. Choose the trigger named 'When a deal is updated' — this fires whenever any field on a deal changes, including stage. Power Automate will poll Pipedrive every 1-5 minutes depending on your plan.

  1. 1Click the empty trigger block
  2. 2Type 'Pipedrive' in the connector search bar
  3. 3Click the Pipedrive connector icon
  4. 4Select 'When a deal is updated' from the trigger list
What you should see: The trigger block should expand and show a 'Connection' dropdown prompting you to sign in to Pipedrive.
Common mistake — The Pipedrive connector in Power Automate does not support filtering by field at the trigger level — every deal update fires the trigger. You'll filter for stage changes in Step 5 using a Condition action.
Power Automate
+
click +
search apps
Slack
SL
Slack
Add the Pipedrive 'Watch Dea…
Slack
SL
module added
3

Trigger block > Connection > + Add new connection

Authenticate the Pipedrive connection

In the trigger block's Connection dropdown, click '+ Add new connection'. A sign-in window will open asking for your Pipedrive API token. Find your token in Pipedrive under Settings > Personal preferences > API. Paste it into the Power Automate prompt and click 'Create'. The connection will appear in the dropdown by the email address tied to your Pipedrive account.

  1. 1Click the 'Connection' dropdown inside the trigger block
  2. 2Click '+ Add new connection'
  3. 3In Pipedrive, go to Settings > Personal preferences > API and copy your API token
  4. 4Paste the token into the Power Automate authentication prompt
  5. 5Click 'Create' to save the connection
What you should see: The Connection dropdown should now show your Pipedrive account name or email, and the trigger block should show no error banners.
Common mistake — Pipedrive API tokens are tied to individual user accounts. If you use a personal token, all API calls count against that user's rate limit (100 requests per 2 seconds). Use a dedicated service account token in production to avoid disrupting individual users.
4

Flow canvas > + New step > Search: Pipedrive > Get a deal

Add a 'Get a deal' action to fetch full deal details

The 'When a deal is updated' trigger payload contains the deal ID and updated fields, but it does not always return the human-readable stage name — just the stage ID integer. Add a Pipedrive 'Get a deal' action immediately after the trigger to pull the full deal record by ID. This gives you access to the stage name, owner name, deal value, currency, and pipeline name for use in the Slack message.

  1. 1Click '+ New step' below the trigger block
  2. 2Search for 'Pipedrive' in the action search bar
  3. 3Select 'Get a deal'
  4. 4In the 'Deal ID' field, click inside the input box and select 'id' from the dynamic content panel on the right
What you should see: The 'Get a deal' action block should show 'id' as a dynamic token in the Deal ID field, displayed as a blue pill labeled 'id'.
5

Flow canvas > + New step > Control > Condition

Add a Condition to filter only stage changes

Because the trigger fires on any deal update, you need a Condition action to check whether the stage actually changed. Click '+ New step' and search for 'Condition'. In the left value field, insert the dynamic content field 'stage_id' from the trigger output. Set the operator to 'is not equal to' and in the right field insert the expression triggerOutputs()?['body/previous_stage_id'] — this compares the new stage ID against the stage before the update. Only the 'If yes' branch will proceed to send the Slack message.

  1. 1Click '+ New step'
  2. 2Search for 'Condition' and select it from the Control category
  3. 3Click the left value field and select 'stage_id' from dynamic content (trigger output)
  4. 4Set the middle dropdown to 'is not equal to'
  5. 5Click the right value field, switch to 'Expression' tab, and enter: triggerOutputs()?['body/previous_stage_id']
  6. 6Click 'OK' to save the expression
What you should see: You should see a Condition block with two branches: 'If yes' and 'If no'. The condition line should read: 'stage_id is not equal to [expression]'.
Common mistake — The `previous_stage_id` field is only present in the trigger payload when a stage change occurred. If the deal was updated for a different reason (e.g., title rename), this field may be null — the 'is not equal to' comparison will still evaluate correctly and route to 'If no', so no duplicate messages fire.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Pipedrive
PI
notified
6

Condition > If yes > Add an action > Search: Slack > + Add new connection

Authenticate the Slack connection

Inside the 'If yes' branch of the Condition, click 'Add an action'. Search for 'Slack' and select the Slack connector. You'll be prompted to create a new Slack connection — click '+ Add new connection' and sign in with your Slack workspace credentials. Power Automate uses OAuth for Slack, so a browser popup will open asking you to authorize the bot. Make sure you authorize it on the correct workspace.

  1. 1Click 'Add an action' inside the 'If yes' branch
  2. 2Search for 'Slack' in the action search bar
  3. 3Select the Slack connector
  4. 4Click '+ Add new connection'
  5. 5Sign in via the OAuth popup and select the correct Slack workspace
  6. 6Click 'Allow' to grant Power Automate posting permissions
What you should see: The Slack connection dropdown should show your workspace name (e.g., 'Acme Corp Slack') and the action picker should appear below it.
Common mistake — The Power Automate Slack connector posts as a bot user, not as you personally. The message will appear from 'Power Automate' unless you configure a custom bot name in your Slack app settings. Warn your team before first run so the message source doesn't look suspicious.
7

If yes branch > Post message (Slack) > Channel + Message Text

Configure the 'Post message' Slack action

Select the 'Post message' action from the Slack connector. In the 'Channel' dropdown, choose the Slack channel where stage notifications should appear (e.g., #deals-pipeline). In the 'Message Text' field, compose the notification using dynamic content from the 'Get a deal' action. Build a message like: '🏆 Deal update: [title] moved to [stage_name] | Owner: [owner_name.name] | Value: [value] [currency]'. Keep the message under 300 characters so it renders cleanly on mobile.

  1. 1Select 'Post message' from the Slack action list
  2. 2Click the 'Channel' dropdown and pick your target Slack channel (e.g., #deals-pipeline)
  3. 3Click inside 'Message Text' and type the message template
  4. 4Use the dynamic content panel to insert: 'title', 'stage_name', 'owner_name.name', 'value', 'currency' from the 'Get a deal' output
  5. 5Optionally add a link: append 'View deal: https://app.pipedrive.com/deal/' followed by the dynamic 'id' field
What you should see: The Message Text field should contain a mix of static text and blue dynamic content pills. No red error banners should appear on the action block.
Common mistake — The Slack connector's 'Channel' dropdown only lists channels the bot has already joined. If your target channel is missing from the list, go to Slack, open the channel, type /invite @Power Automate, then return to Power Automate and refresh the dropdown.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
8

If yes branch > Add an action > Control > Switch

Add stage-based channel routing with a Switch action (optional but recommended)

If you want different pipeline stages to post to different Slack channels — for example, 'Qualified' posts to #deals-qualified and 'Closed Won' posts to #wins — replace the single Slack action with a Switch control action. Set the Switch's 'On' value to the dynamic 'stage_name' field from the 'Get a deal' output. Add a Case for each stage name (exact string match) and put a separate 'Post message' action inside each case pointing to the correct channel.

  1. 1Delete the single 'Post message' action if you already added it
  2. 2Click 'Add an action' inside the 'If yes' branch
  3. 3Search for 'Switch' and select it from the Control category
  4. 4In the 'On' field, insert the dynamic 'stage_name' value from 'Get a deal'
  5. 5Click '+ Add Case' and type the exact stage name (e.g., 'Qualified')
  6. 6Add a 'Post message' Slack action inside each case targeting the correct channel
What you should see: You should see a Switch block with multiple labeled Case branches, each containing a Slack 'Post message' action targeting a different channel.
Common mistake — Stage name matching in the Switch is case-sensitive. If your Pipedrive stage is named 'closed won' (lowercase) and you type 'Closed Won' in the Case, the branch will never match. Copy stage names exactly from Pipedrive Settings > Pipeline.
9

Flow canvas > Save > Test > Manually

Test the flow with a live deal update

Click 'Save' in the top-right of the canvas, then click 'Test' (also top-right) and select 'Manually' to run a test. Go to Pipedrive and move an existing deal to a different stage. Return to Power Automate and wait up to 5 minutes for the polling interval to pick up the change. The test panel will show each action turning green as it succeeds. Check your Slack channel to confirm the message arrived with the correct deal details.

  1. 1Click 'Save' in the top-right toolbar
  2. 2Click 'Test' and choose 'Manually'
  3. 3Go to Pipedrive and move a deal from one stage to another
  4. 4Return to Power Automate and wait up to 5 minutes
  5. 5Click 'Refresh' in the test panel to see run results
What you should see: All action blocks in the run history should show green checkmarks. The Slack channel should contain a new message with the deal name, stage, owner, and value.
Common mistake — If you test by editing a field other than stage (e.g., changing the deal title), the Condition in Step 5 will route to 'If no' and no Slack message will fire. Always test by moving a deal between actual pipeline stages.
Power Automate
▶ Test flow
executed
Slack
Pipedrive
Pipedrive
🔔 notification
received
10

My flows > [Flow name] > Run history

Review the run history and enable the flow for production

After a successful test, go to 'My flows' and confirm the flow status shows 'On'. Click into the flow's detail page and check 'Run history' to see the last 28 days of executions. Each row shows a timestamp, duration, and status (Succeeded/Failed). Set up an alert by clicking 'Edit' on the flow and adding a 'Send an email notification' action in the 'If no' branch or inside a Scope action with 'Configure run after' set to 'has failed'.

  1. 1Navigate to My flows in the left sidebar
  2. 2Confirm the toggle next to your flow is set to 'On'
  3. 3Click the flow name to open its detail page
  4. 4Click 'Run history' to review past executions
  5. 5Optionally add a failure alert: edit the flow and add an email action with 'Configure run after' > 'has failed'
What you should see: The flow detail page should show status 'On' and at least one 'Succeeded' entry in Run history from your test.

Paste this expression into the 'Message Text' field of the Slack 'Post message' action using the Expression tab in Power Automate. It formats the deal value with a currency symbol, converts the close date to a readable format, and builds the full Pipedrive deal URL dynamically — replacing three separate dynamic content insertions with one clean expression block.

JavaScript — Code Stepconcat(
▸ Show code
concat(
  '📋 Deal moved: ',
  triggerOutputs()?['body/title'],

... expand to see full code

concat(
  '📋 Deal moved: ',
  triggerOutputs()?['body/title'],
  ' → ',
  body('Get_a_deal')?['data']?['stage_name'],
  ' | Owner: ',
  body('Get_a_deal')?['data']?['owner_name']?['name'],
  ' | Value: $',
  string(body('Get_a_deal')?['data']?['value']),
  ' ',
  body('Get_a_deal')?['data']?['currency'],
  ' | Close: ',
  formatDateTime(body('Get_a_deal')?['data']?['expected_close_date'], 'MMM d yyyy'),
  ' | View: https://app.pipedrive.com/deal/',
  string(triggerOutputs()?['body/id'])
)

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 n8n for this workflow

Use Power Automate for this if your team already pays for Microsoft 365 — the Pipedrive and Slack connectors are included at no extra cost, and setup takes about 30 minutes. It's also the right call if your IT department mandates staying inside the Microsoft ecosystem for compliance reasons. The one scenario where you'd pick something else: if your sales team moves more than 50 deals per day and needs alerts in under 60 seconds, Power Automate's polling model will frustrate you — Make or Zapier both support Pipedrive webhooks that fire in under 15 seconds.

Cost

On cost: the Power Automate free plan gives you 750 flow runs per month. Each deal update that triggers the flow counts as one run — so at 25 deal updates per day you'll hit the ceiling in 30 days and the flow suspends. The per-user paid plan is $15/month and removes the run cap for most teams. For comparison, Zapier's Starter plan at $19.99/month gives you 750 tasks — roughly the same price for the same volume, except Zapier's Pipedrive trigger is webhook-based, not polling. Make's Core plan at $9/month handles the same workflow with 10,000 operations per month, making it cheaper by $6/month for higher-volume teams.

Tradeoffs

Here's where the alternatives have an edge on this specific use case. Zapier has a dedicated 'Deal Stage Changed' trigger for Pipedrive — you don't need to write a Condition filter to detect stage changes, it's built in. Make lets you branch by stage inside the router module using visual filters, which is faster to configure than Power Automate's Switch action. n8n gives you full JavaScript inside a Function node if you want to build complex message formatting or conditional logic. Pipedream lets you write async/await code against the Pipedrive and Slack APIs directly, skipping connectors entirely. Power Automate is still the right call if you're in a Microsoft shop — you're not paying for a separate automation tool, and the flow handles a 10-20 person sales team's deal volume without breaking a sweat.

Three things you'll hit after setup. First, Pipedrive stage names are case-sensitive in the Switch routing — if someone renames a stage in Pipedrive from 'Proposal' to 'Proposal Sent', your Switch Case silently stops matching and messages vanish. Build a Slack alert into the Default case so you know when routing breaks. Second, the Power Automate Slack connector posts as a generic 'Power Automate' bot — your team will see an unfamiliar sender name on the first alert and may ignore or report it as spam. Pre-announce the integration in Slack before go-live. Third, the 'Get a deal' action adds a second API call per flow run. At 100 deals updated per day, you're making 200 Pipedrive API calls daily — well within Pipedrive's 100-per-2-second rate limit under normal conditions, but if a bulk import or CSV update touches hundreds of deals simultaneously, you'll see 429 errors in your run history and need to add a Delay action.

Ideas for what to build next

  • Add a daily deal velocity digest to SlackBuild a second Scheduled cloud flow that runs every morning at 8am, queries Pipedrive for all deals updated in the past 24 hours, and posts a summary table to #sales-leadership — so managers get a daily pulse without checking Pipedrive manually.
  • Trigger a congratulatory message thread for Closed Won dealsAdd a separate Case in the Switch for 'Closed Won' that posts to #wins with a celebratory message, tags the deal owner's Slack handle using a lookup table, and starts a thread asking them to log lessons learned in Notion or Confluence.
  • Write deal stage changes back to a SharePoint or Excel trackerAfter the Slack action, add a SharePoint 'Update item' or Excel 'Update a row' action that logs each stage change with a timestamp — giving managers a searchable audit trail of how long deals spend in each stage without any manual reporting.

Related guides

Was this guide helpful?
Slack + Pipedrive overviewPower Automate profile →