

How to Send Close Deal Alerts to Slack with Power Automate
Triggers a Slack message to your sales channel the moment a deal in Close changes stage or crosses a value threshold, using a Close webhook and Power Automate to format and route the alert.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Inside sales teams already in the Microsoft 365 ecosystem who want deal-stage alerts in Slack without buying another automation tool.
Not ideal for
Teams not on Microsoft 365 — Make runs the same flow for free under 1,000 ops/month and has a native Close trigger.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS sales team runs all pipeline management in Close and communicates in Slack. Before this flow, reps refreshed the Close pipeline view manually and big wins sat unannounced for hours. Now, every deal moved to 'Won' or above $25,000 posts immediately to #deals with the rep name, company, and value — the team sees it before the rep even sends a message.
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
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Lead Name | lead_name | |
| Opportunity Status Label | opportunity_status_label | |
| Opportunity Value | value | |
| Assigned User Name | assigned_to_name | |
4 optional fields▸ show
| Opportunity ID | opportunity_id |
| Lead ID | lead_id |
| Date Updated | date_updated |
| Pipeline Name | pipeline_name |
Step-by-Step Setup
make.powerautomate.com > My flows > + New flow > Automated cloud flow
Create a new Automated cloud flow in Power Automate
Go to make.powerautomate.com and sign in with your Microsoft 365 account. In the left sidebar, click 'My flows', then click '+ New flow' in the top bar. Select 'Automated cloud flow' from the dropdown — this is the correct flow type because Close will push events to Power Automate via webhook, not the other way around. Give the flow a name like 'Close Deal Alert to Slack'. In the trigger search box that appears, type 'HTTP' and select 'When a HTTP request is received' from the results.
- 1Click 'My flows' in the left sidebar
- 2Click '+ New flow' at the top of the page
- 3Select 'Automated cloud flow'
- 4Name the flow 'Close Deal Alert to Slack'
- 5Search 'HTTP' in the trigger picker and select 'When a HTTP request is received'
Flow canvas > When a HTTP request is received > Request Body JSON Schema
Configure the HTTP trigger and copy the webhook URL
Click the 'When a HTTP request is received' trigger card to expand it. In the 'Request Body JSON Schema' field, paste the JSON schema so Power Automate can parse Close's payload automatically — this unlocks dynamic content tokens for later steps. Leave the method as POST. Click 'Save' at the top right of the flow. After saving, the 'HTTP POST URL' field will populate with a unique URL — copy this URL now, you'll need it in Close.
- 1Click the trigger card to expand it
- 2Paste the Close deal webhook JSON schema into 'Request Body JSON Schema'
- 3Leave HTTP method as POST
- 4Click 'Save' in the top-right corner
- 5Copy the generated HTTP POST URL
Close > Settings > Integrations > Webhooks > Add Webhook
Register the webhook URL in Close
Open Close in a new tab and go to Settings > Integrations > Webhooks. Click 'Add Webhook'. Paste the Power Automate HTTP POST URL into the 'Endpoint URL' field. Under 'Events', check 'lead.updated' — this fires when a deal (opportunity) on a lead changes stage or value. Optionally add a signing secret, but Power Automate's HTTP trigger does not natively verify HMAC signatures without extra steps, so leave it blank for now unless you plan to add signature verification later.
- 1In Close, navigate to Settings > Integrations > Webhooks
- 2Click 'Add Webhook'
- 3Paste the Power Automate HTTP POST URL into 'Endpoint URL'
- 4Check the 'lead.updated' event
- 5Click 'Save'
Flow canvas > + New step > Data Operation > Parse JSON
Add a Parse JSON action to extract deal fields
Back in Power Automate, click '+ New step' below the trigger card. Search for 'Parse JSON' and select the 'Data Operation – Parse JSON' action. In the 'Content' field, click inside it, then select 'Body' from the dynamic content panel on the right — this is the raw webhook payload from Close. In the 'Schema' field, paste a schema that includes the fields you care about: opportunity status, value, lead name, assigned user, and pipeline. This step converts the raw JSON string into usable dynamic tokens.
- 1Click '+ New step'
- 2Search 'Parse JSON' and select 'Data Operation – Parse JSON'
- 3Click in the 'Content' field and select 'Body' from dynamic content
- 4Paste the Close webhook schema into the 'Schema' field
- 5Click 'Save'
Flow canvas > + New step > Condition
Add a Condition to filter deal-stage and value changes
Click '+ New step' and search for 'Condition'. Add a Condition action. In the left field of the condition, select 'opportunity_status_label' from the Parse JSON dynamic content. Set the operator to 'is not equal to' and the right field to an empty string — this ensures you only proceed when an opportunity status is actually present in the payload. For a value filter, click 'Add' > 'Add row' and add a second condition: 'value' is 'greater than or equal to' your threshold, e.g. 25000. Set the group to 'OR' if you want either condition to trigger the alert.
- 1Click '+ New step' and search 'Condition'
- 2In the left field, select 'opportunity_status_label' from dynamic content
- 3Set operator to 'is not equal to' and right field to empty string
- 4Click 'Add' > 'Add row' for a second condition
- 5Set second condition: 'value' greater than or equal to 25000
- 6Set group logic to 'OR'
Flow canvas > Yes branch > + Add an action > Slack > Post message
Connect your Slack account as a Connection
Inside the 'Yes' branch, click '+ Add an action'. Search for 'Slack' in the action picker. Select 'Post message' from the Slack connector results. A sign-in prompt will appear inline. Click 'Sign in' and authenticate with the Slack account that has permission to post in your target channel. Power Automate stores this as a named Connection. If your workspace requires admin approval for third-party apps, get that done before this step — otherwise the OAuth flow will fail silently.
- 1Click '+ Add an action' inside the 'Yes' branch
- 2Search 'Slack' in the action picker
- 3Select 'Post message (V2)' from the results
- 4Click 'Sign in' in the connection prompt
- 5Complete the Slack OAuth flow and return to Power Automate
Flow canvas > Yes branch > Slack: Post message > Channel + Message Text
Configure the Slack message with Close deal fields
In the 'Channel' field, type the channel name exactly as it appears in Slack, e.g. '#deals' or '#sales-wins'. In the 'Message Text' field, build your alert using dynamic content tokens from the Parse JSON step. A clear message format tells the team everything they need: who owns the deal, what company, what stage, and what value. Click into the field and mix static text with dynamic tokens — for example: '🏆 Deal Update: [lead_name] moved to [opportunity_status_label] | Value: $[value] | Owner: [assigned_to_name]'.
- 1Type the target channel name in the 'Channel' field (e.g. #deals)
- 2Click into the 'Message Text' field
- 3Type your static label text (e.g. '🏆 Deal Update:')
- 4Click 'Add dynamic content' and insert 'lead_name' from Parse JSON
- 5Continue building the message with 'opportunity_status_label', 'value', and 'assigned_to_name'
Flow canvas > Yes branch > Slack: Post message > Message Text > Expression editor
Add an expression to format deal value as currency
Click into the 'Message Text' field where you placed the value token. Delete the raw 'value' token. Click 'Expression' tab in the dynamic content panel instead of 'Dynamic content'. Type the expression: formatNumber(div(float(outputs('Parse_JSON')?['body/value']), 100), 'C2', 'en-US'). Click OK. This converts the raw integer from Close into a formatted dollar string like '$25,000.00'. If Close sends value already as a decimal float (depends on your Close plan's API response), use formatNumber(float(outputs('Parse_JSON')?['body/value']), 'C2', 'en-US') instead.
- 1Click inside the Message Text field where the value token sits
- 2Delete the raw 'value' dynamic content token
- 3Click the 'Expression' tab in the dynamic content panel
- 4Type: formatNumber(div(float(outputs('Parse_JSON')?['body/value']), 100), 'C2', 'en-US')
- 5Click 'OK' to insert the expression
make.powerautomate.com > My flows > [Flow name] > Run history
Test the flow with a live deal change in Close
Save the flow by clicking 'Save' in the top right. In Close, open any active lead with an opportunity and manually move the opportunity to a new stage (e.g., drag it to 'Won'). Return to Power Automate, click 'My flows', find your flow, and click the flow name to open its detail page. Scroll to 'Run history' at the bottom. You should see a run appear within 5-15 seconds of the stage change. Click the run to inspect each action — green checkmarks mean success, red X means a step failed.
- 1Save the flow
- 2In Close, open a lead and change an opportunity stage
- 3Return to Power Automate and open the flow detail page
- 4Scroll to 'Run history' and wait up to 15 seconds for a new entry
- 5Click the run entry and inspect each step for green checkmarks
make.powerautomate.com > My flows > [Flow name] > (three-dot menu) > Edit
Turn on the flow and set error notifications
If the test passed, the flow is already live — Power Automate flows start running as soon as they are saved and enabled. Confirm the flow status shows 'On' on the flow detail page (toggle is in the top right). To catch failures silently, go to the flow detail page, click the three-dot menu next to your flow in 'My flows', and select 'Edit'. Add a Scope action around your steps and use 'Configure run after' on a final notification step set to run only on failure — this sends you an email if the Slack post fails.
- 1Confirm the flow status toggle shows 'On' on the detail page
- 2Go to My flows, click the three-dot menu on your flow
- 3Select 'Edit'
- 4Add a 'Send an email' action after the Slack step
- 5Click 'Configure run after' on the email action and check 'has failed' only
Paste this into a 'Compose' action immediately after Parse JSON. It builds a formatted Slack Block Kit message payload as a JSON string, replacing the plain-text message with a structured card that includes a header, deal details in two columns, and a clickable 'View in Close' button. Add a second Compose action referencing the output of this one, then use 'Send an HTTP request to Slack' with the Slack API's chat.postMessage endpoint — pass your bot token in the header and the output of this Compose as the 'blocks' body parameter.
JavaScript — Code Step{▸ Show code
{
"blocks": [
{... expand to see full code
{
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "@{if(equals(outputs('Parse_JSON')?['body/opportunity_status_label'], 'Won'), '🏆 Deal Won!', '📋 Deal Update')}"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Company*\n@{outputs('Parse_JSON')?['body/lead_name']}"
},
{
"type": "mrkdwn",
"text": "*Stage*\n@{outputs('Parse_JSON')?['body/opportunity_status_label']}"
},
{
"type": "mrkdwn",
"text": "*Value*\n@{formatNumber(div(float(outputs('Parse_JSON')?['body/value']), 100), 'C2', 'en-US')}"
},
{
"type": "mrkdwn",
"text": "*Owner*\n@{outputs('Parse_JSON')?['body/assigned_to_name']}"
}
]
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "View in Close"
},
"url": "https://app.close.com/lead/@{outputs('Parse_JSON')?['body/lead_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
Use Power Automate for this if your team already runs on Microsoft 365 and you want one less tool to pay for. The HTTP trigger in Power Automate handles webhook ingestion natively, the Slack connector is built-in, and you can use Power Fx expressions to format currency and build conditional messages without writing code. The one scenario where you'd pick something else: if your team uses Google Workspace instead of Microsoft 365, Power Automate requires a standalone license and the value proposition disappears — use Make instead.
Cost math: Power Automate's free plan includes 750 flow runs per month. Each Close webhook event = 1 run. A 10-person sales team moving 3-5 deals per day generates roughly 20-35 runs/day, or 600-1,050 runs/month. You'll hit the free cap on a busy month. The Power Automate per-user plan costs $15/month and gives you 5,000 runs — enough for any realistic sales team. Make's free tier gives you 1,000 operations/month and the same flow costs 2-3 operations per run, so Make handles moderate volume free where Power Automate charges $15/month.
Make beats Power Automate here on trigger reliability — Make has a native Close module with a 'New/Updated Opportunity' trigger that doesn't require webhook setup on your end. Zapier also has a Close integration with a 'New Opportunity' trigger, but Zapier polls every 15 minutes on lower plans, which kills the 'real-time' promise. n8n gives you a webhook trigger and full JavaScript for message formatting, better than Power Automate's expression syntax for complex logic, but requires self-hosting or n8n Cloud at $20/month. Pipedream has a Close webhook source and a Slack action with Block Kit support out of the box, and it's free up to 10,000 invocations/month — cheapest option for high-volume teams. Power Automate still wins for Microsoft shops: the SSO, the Connections model, and the integration with Teams/SharePoint for logging wins make it the right default.
Three things you'll hit after setup: First, the Close 'lead.updated' webhook fires for everything — email address changes, custom field updates, note additions. Without a tight Condition filter on 'opportunity_status_label' and 'changed_fields', your #deals channel will be unreadable within a week. Second, the 'value' field arrives as an integer in cents (4750000 = $47,500), not a decimal. Every team that skips the formatNumber expression ends up with a confused sales floor. Third, Power Automate's Slack connector posts as the authenticated user, not a bot — if that person's Slack account is deactivated or they leave the company, the flow silently fails. Pin the connection to a service account or use the HTTP + Slack API approach with a bot token to avoid this breaking at the worst possible time.
Ideas for what to build next
- →Route alerts to different channels by deal size — Add a Switch action after the Condition to post $100k+ deals to #enterprise-wins, $10k-$99k to #deals, and sub-$10k to #small-biz. Takes 10 minutes to configure and keeps channel noise low.
- →Add a daily digest of pipeline movement — Build a second Scheduled flow in Power Automate that queries the Close API every morning at 8am, aggregates all deals that changed stage in the last 24 hours, and posts a summary table to Slack — this pairs with real-time alerts so the team has both instant and daily context.
- →Write closed-won deals back to a SharePoint list — Extend the Yes branch with a 'Create item' action pointing to a SharePoint list — log deal name, value, rep, and close date for quarterly reporting without manual data entry. Power Automate's SharePoint connector is native and free.
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