

How to Share Close Prospects to Slack with Power Automate
When a Close opportunity reaches a target stage, Power Automate fires a webhook, pulls deal and contact details, and posts a formatted research brief to a Slack channel so the team can comment before the call.
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 of 5-20 reps who already live in Microsoft 365 and want pre-call research threads in Slack without leaving their existing tools.
Not ideal for
Teams that need two-way sync — replies in Slack should write back to Close — because that requires a second flow and custom middleware.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS sales team uses this to post a research brief to #prospect-research every time a Close deal moves to 'Demo Scheduled.' The brief includes company name, ARR opportunity size, conversation history summary, and a direct link back to the Close lead. Before this flow, reps Slacked deal details manually — copy-pasting from Close — which took 4-5 minutes per deal and often skipped conversation history entirely.
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 (Company) | display_name | |
| Opportunity Value | value | |
| Opportunity Status Label | status_label | |
| Close Lead URL | url | |
| Primary Contact Name | contacts[0].name | |
5 optional fields▸ show
| Primary Contact Email | contacts[0].emails[0].email |
| Primary Contact Phone | contacts[0].phones[0].phone |
| Opportunity Note | note |
| Assigned User ID | user_id |
| Expected Close Date | date_won |
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. In the left sidebar click 'My flows', then click '+ New flow' at the top and select 'Automated cloud flow' from the dropdown. Name the flow something like 'Close → Slack Prospect Research'. For the trigger, type 'HTTP' in the search box and select 'When a HTTP request is received' — this gives you a webhook URL that Close will call. Click Create.
- 1Click 'My flows' in the left sidebar
- 2Click '+ New flow' and select 'Automated cloud flow'
- 3Name the flow 'Close → Slack Prospect Research'
- 4Search 'HTTP' in the trigger picker and select 'When a HTTP request is received'
- 5Click 'Create'
Flow canvas > Trigger card > HTTP POST URL
Save the flow to generate the webhook URL
Click 'Save' in the top right of the canvas. Power Automate will generate a unique POST URL in the trigger card. Click the trigger card to expand it and copy the full URL — it will look like https://prod-xx.westus.logic.azure.com:443/workflows/.... Keep this tab open; you need this URL in the next step when configuring Close.
- 1Click 'Save' in the top right corner
- 2Click the 'When a HTTP request is received' trigger card to expand it
- 3Copy the full 'HTTP POST URL' value
Close > Settings > Integrations > Webhooks > Add Webhook
Configure a Close webhook to call Power Automate
In Close, go to Settings > Integrations > Webhooks and click 'Add Webhook'. Paste the Power Automate POST URL into the URL field. Under 'Events', select 'lead.updated' and 'opportunity.updated' — both fire when a deal's status changes. Set the 'Status' filter if you want to trigger only on specific opportunity statuses like 'Active' or a custom stage name. Click Save.
- 1In Close, click 'Settings' in the bottom left
- 2Click 'Integrations', then 'Webhooks'
- 3Click 'Add Webhook'
- 4Paste the Power Automate POST URL into the URL field
- 5Select 'opportunity.updated' as the event type and click Save
Flow canvas > + New step > Data Operation > Parse JSON
Define the JSON schema so Power Automate parses the Close payload
Back in Power Automate, click '+ New step' and search for 'Parse JSON'. Select the 'Parse JSON' action under 'Data Operation'. In the 'Content' field, click inside and select 'Body' from the dynamic content panel — this is the raw JSON Close sent. For the Schema, click 'Generate from sample', paste in a real Close webhook payload, and click Done. Power Automate will generate the schema automatically.
- 1Click '+ New step' below the trigger
- 2Search 'Parse JSON' and select it under 'Data Operation'
- 3In the 'Content' field, select 'Body' from dynamic content
- 4Click 'Generate from sample'
- 5Paste a real Close opportunity.updated webhook payload and click Done
Flow canvas > + New step > Control > Condition
Add a condition to filter for your target deal stage
Click '+ New step' and search 'Condition'. Add a Condition action. In the left field, select the 'status_label' token from the Parse JSON output. Set the operator to 'is equal to'. In the right field, type the exact stage name you care about — for example, 'Demo Scheduled'. Everything in the 'Yes' branch will run only when a deal enters that stage. Leave the 'No' branch empty.
- 1Click '+ New step' and search 'Condition' under Control
- 2In the left value field, select 'status_label' from the Parse JSON dynamic content
- 3Set the middle dropdown to 'is equal to'
- 4Type your exact stage name in the right field (e.g., 'Demo Scheduled')
- 5Leave the 'No' branch empty — it terminates silently
Flow canvas > Yes branch > Add an action > HTTP
Fetch full lead details from Close via HTTP action
Inside the 'Yes' branch, click 'Add an action'. Search 'HTTP' and select the 'HTTP' action (not the trigger). Set Method to GET. For the URI, use the expression: concat('https://api.close.com/api/v1/lead/', body('Parse_JSON')?['data']?['lead_id']). In Headers, add 'Authorization' with value 'Basic ' followed by your Base64-encoded Close API key. This call returns the full lead record including company name, contacts, and custom fields.
- 1Inside the Yes branch, click 'Add an action'
- 2Search 'HTTP' and select the HTTP action
- 3Set Method to 'GET'
- 4Set URI to: concat('https://api.close.com/api/v1/lead/', body('Parse_JSON')?['data']?['lead_id'])
- 5Add Authorization header: 'Basic ' + your Base64-encoded API key
Flow canvas > Yes branch > Add an action > Data Operation > Parse JSON
Parse the lead response and extract contact details
Add another 'Parse JSON' action after the HTTP step. Set Content to 'Body' from the HTTP action's output. Generate a new schema from a real lead API response — you can get one by calling https://api.close.com/api/v1/lead/{id} in Postman with your API key. This unlocks tokens like 'display_name', 'contacts[0].emails[0].email', 'contacts[0].name', and any custom fields you've added to the lead.
- 1Click 'Add an action' below the HTTP step
- 2Search 'Parse JSON' and select it
- 3Set Content to 'Body' from the previous HTTP action
- 4Click 'Generate from sample' and paste a real Close lead API response
- 5Click Done
Flow canvas > Yes branch > Add an action > Slack > Post message (V2)
Connect to Slack via a new Connection
Click 'Add an action' and search 'Slack'. Select 'Post message (V2)' from the Slack connector. If you haven't connected Slack before, Power Automate will prompt you to sign in — click 'Sign in' and authorize the Power Automate app in your Slack workspace. Make sure you authorize it for the correct workspace if you're in multiple. The connection is saved in Connections in the left sidebar for reuse.
- 1Click 'Add an action' and search 'Slack'
- 2Select 'Post message (V2)'
- 3Click 'Sign in' to create a new Slack Connection
- 4Authorize the Power Automate app in your Slack workspace
- 5Return to the flow canvas — the connection will be pre-selected
Flow canvas > Slack action > Channel + Text fields
Build the Slack message with prospect details
In the Channel field, type the name of your target channel — for example, #prospect-research. In the Text field, build the message using dynamic tokens from earlier Parse JSON steps. Include company name, deal value, status label, contact name, email, and a direct link to the Close lead. Format the message with line breaks using the expression concat() or use Slack's mrkdwn format with *bold* for headers. See the pro tip for a pre-built expression that formats all fields cleanly.
- 1In the Channel field, type the exact channel name (e.g., #prospect-research)
- 2Click into the Text field
- 3Use dynamic content tokens to insert: Lead Name, Deal Value, Status Label, Contact Name, Contact Email, and Lead URL
- 4Use concat() expressions to join tokens with labels and line breaks
- 5Optionally add a *Research Thread* header using Slack mrkdwn syntax
make.powerautomate.com > My flows > [Flow Name] > Run history
Test the flow end-to-end with a live Close deal
Save the flow. In Close, find a test deal and manually change its status to your target stage (e.g., 'Demo Scheduled'). Wait 5-15 seconds, then check Power Automate's 'Run history' under My flows. Click the most recent run to see each step's input and output. Confirm the Parse JSON steps resolved correctly and the Slack step shows Status: 200. Then check your Slack channel — the message should appear within 20-30 seconds of the Close status change.
- 1Click 'Save' in Power Automate
- 2In Close, change a test deal's status to 'Demo Scheduled'
- 3Wait 15 seconds, then go to My flows in Power Automate
- 4Click the flow name, then click 'Run history'
- 5Click the most recent run and verify each step shows a green checkmark
My flows > [Flow Name] > Edit > Settings
Turn the flow on and set error notification preferences
If the flow is in draft state, click the toggle on the flow detail page to turn it On. Then go to My flows > select the flow > Edit > Settings (gear icon in the top toolbar) and enable 'Send me an email when this flow fails'. Set the frequency to 'Immediately' so you know within minutes if Close stops reaching the webhook or the Slack token expires. This takes 60 seconds and saves hours of debugging a silent failure.
- 1Click the flow name in My flows
- 2Click 'Turn on' if the flow is still in draft state
- 3Click 'Edit', then click the gear icon (Settings) in the top toolbar
- 4Enable 'Send me an email when this flow fails'
- 5Set frequency to 'Immediately' and click Save
Paste this into a 'Compose' action after your second Parse JSON step. It builds the complete Slack mrkdwn message string in one expression, handling the cents-to-dollars conversion, date formatting, and null-safe contact fields. Reference the Compose output in the Slack 'Text' field instead of building the message inline — this makes the expression editable without touching the Slack action.
JavaScript — Code Stepconcat(▸ Show code
concat(
'*🔍 Research Needed: ', body('Parse_Lead_JSON')?['display_name'], '*', decodeUriComponent('%0A'),
'*Stage:* ', body('Parse_Webhook_JSON')?['data']?['status_label'], decodeUriComponent('%0A'),... expand to see full code
concat(
'*🔍 Research Needed: ', body('Parse_Lead_JSON')?['display_name'], '*', decodeUriComponent('%0A'),
'*Stage:* ', body('Parse_Webhook_JSON')?['data']?['status_label'], decodeUriComponent('%0A'),
'*Deal Value:* ', formatNumber(div(float(body('Parse_Webhook_JSON')?['data']?['value']), 100), 'C2', 'en-US'), decodeUriComponent('%0A'),
'*Contact:* ', coalesce(body('Parse_Lead_JSON')?['contacts']?[0]?['name'], 'No contact listed'), ' (', coalesce(body('Parse_Lead_JSON')?['contacts']?[0]?['emails']?[0]?['email'], 'no email'), ')', decodeUriComponent('%0A'),
'*Last Note:* ', coalesce(body('Parse_Webhook_JSON')?['data']?['note'], 'No note recorded'), decodeUriComponent('%0A'),
'*Expected Close:* ', if(equals(body('Parse_Webhook_JSON')?['data']?['date_won'], null), 'Not set', formatDateTime(body('Parse_Webhook_JSON')?['data']?['date_won'], 'MMMM dd, yyyy')), decodeUriComponent('%0A'),
decodeUriComponent('%0A'),
'🔗 <', body('Parse_Lead_JSON')?['url'], '|Open in Close>'
)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 is already inside Microsoft 365 and your IT department controls app approvals. Power Automate's HTTP connector handles Close webhooks without any third-party bridge, and the Slack connector is pre-built and maintained by Microsoft. If you're a startup with no Microsoft 365 dependency and your team codes, skip Power Automate — n8n self-hosted or Pipedream will give you more control over the message format and cost you nothing at this volume.
Power Automate's pricing here is simple: the HTTP action is a premium connector, so you need at least the Power Automate Premium plan at $15/user/month. Each flow run consumes roughly 3-4 action runs (webhook receive, two Parse JSON, one HTTP GET, one Slack post). At 200 deals/month moving to a tracked stage, you're looking at ~800 action runs — well within the 40,000 monthly run limit on Premium. Compare that to Zapier: the same workflow on Zapier Professional runs $49/month and counts as a 3-step Zap, hitting task limits at 2,000 tasks/month. If you're already paying for Power Automate Premium for other flows, this one is effectively free. If you're buying it only for this workflow, Zapier is $34 cheaper per month.
Make handles the same workflow for $9/month on the Core plan and gives you a visual data mapping interface that's faster to configure than Power Automate's dynamic content picker — especially for nested JSON like Close's contacts array. Zapier's Close trigger is a polling connector that checks every 5-15 minutes, so it can't match the real-time webhook approach here. n8n's HTTP Request node plus the Slack node does this in 6 nodes on a self-hosted instance for $0, and you get full JavaScript for message formatting. Pipedream has a native Close trigger that fires on webhooks with zero setup — no JSON schema step required. Power Automate is still the right call when your IT team needs to audit integrations in a single platform and your apps are already behind Azure AD.
Three things you'll hit after setup. First, Close webhooks fire for every field update on an opportunity — including internal system updates — not just status changes. Without the status_label filter, expect 5-10x the Slack posts you actually want. Second, the Power Automate Slack connector doesn't support Block Kit, so your message is limited to mrkdwn text. If your team wants structured cards with buttons to 'Claim Research' or 'Log a Note', you need the HTTP action calling Slack's API directly with a blocks payload. Third, Close returns deal value in cents as an integer. A $12,000 deal comes through as 1200000. Build the division and formatNumber() expression from day one — debugging why your Slack posts say '$1,200,000' instead of '$12,000' is a time-waster that trips up nearly every first implementation.
Ideas for what to build next
- →Write team comments back to Close as notes — Set up a second flow triggered by new Slack messages in #prospect-research that detects replies to the bot's post and writes them back to the Close lead as activity notes. This keeps research context in the CRM, not buried in Slack threads.
- →Add a daily digest for upcoming demos — Create a Scheduled cloud flow that runs every morning at 8am, queries Close for all deals with 'Demo Scheduled' status in the next 48 hours, and posts a single digest message to Slack. This gives the team a daily briefing without per-deal noise.
- →Pull LinkedIn and company data via Clearbit enrichment — Add an HTTP action between the Close lead fetch and the Slack post that calls the Clearbit Enrichment API with the contact's email. Append company size, industry, and LinkedIn URL to the Slack message so teammates have external context, not just what's in Close.
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