

How to Create Notion Tasks from Slack with Power Automate
Automatically creates a Notion database entry whenever a Slack message is reacted to with a specific emoji or contains a trigger keyword, capturing the message text, sender, channel, and timestamp as task fields.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams already inside the Microsoft 365 ecosystem who want to capture Slack action items in Notion without leaving their existing tooling.
Not ideal for
Teams that need two-way sync between Slack and Notion — this flow only writes to Notion and never updates the original Slack message.
Sync type
real-timeUse case type
routingReal-World Example
A 12-person product team at a B2B SaaS company uses this to turn emoji-flagged Slack messages into Notion tickets. Before the flow, action items buried in #product-feedback got forgotten within hours — team members copy-pasted manually maybe 30% of the time. Now, anyone reacting with :ticket: on a message instantly creates a Notion page with the message text, sender name, and a link back to the original Slack thread.
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 | ||
| Task Title | ||
| Reported By | ||
| Source URL | ||
| Status | ||
| Created Date | ||
3 optional fields▸ show
| Channel Name | |
| Slack Message Timestamp | |
| Emoji Used |
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' in the top left. Select 'Automated cloud flow' from the dropdown. Give your flow a name like 'Slack Reaction to Notion Task'. You'll be prompted to choose a trigger — type 'Slack' in the search box.
- 1Click 'My flows' in the left sidebar
- 2Click '+ New flow' in the top left corner
- 3Select 'Automated cloud flow' from the dropdown menu
- 4Name the flow 'Slack Reaction to Notion Task'
- 5In the trigger search box, type 'Slack' and press Enter
Flow editor > Trigger picker > Slack > When a reaction is added to a message
Set the Slack trigger to 'When a reaction is added to a message'
From the Slack trigger list, select 'When a reaction is added to a message'. This fires every time any user adds an emoji reaction in any channel your Slack bot has access to. You'll filter it to a specific emoji in a later step. Click 'Create' to confirm the trigger and open the flow editor.
- 1Scroll through the Slack trigger list or search for 'reaction'
- 2Select 'When a reaction is added to a message'
- 3Click 'Create' to open the flow canvas with this trigger at the top
channel: {{channel}}
ts: {{ts}}
Flow canvas > Slack trigger block > Sign in
Connect your Slack workspace
Click the Slack trigger block. Power Automate will ask you to sign in to Slack. Click 'Sign in' and complete the OAuth flow in the popup window. You must authorize with an account that has access to the channels you want to monitor. After authorization, the trigger block will show your Slack workspace name next to a green checkmark.
- 1Click the Slack trigger block to expand it
- 2Click the 'Sign in' button that appears
- 3Complete the Slack OAuth flow in the popup window
- 4Grant Power Automate the requested permissions including reactions:read and channels:history
- 5Return to the flow canvas — the trigger should now show your workspace name
Flow canvas > + New step > Control > Condition
Add a Condition to filter for your specific emoji
Click '+ New step' below the trigger. Search for 'Condition' and select the 'Condition' Control action. In the left value field, click inside and select 'Reaction' from the dynamic content panel — this is the emoji name that fired the trigger (without colons, e.g., 'ticket'). Set the operator to 'is equal to'. Type your chosen emoji name in the right value field, e.g., 'ticket'. This prevents the flow from creating a Notion entry for every single reaction in your workspace.
- 1Click '+ New step'
- 2Search for 'Condition' and select it from the Control category
- 3Click the left value field in the Condition block
- 4Select 'Reaction' from the dynamic content panel on the right
- 5Set the operator dropdown to 'is equal to'
- 6Type your emoji name in the right value field, e.g., 'ticket' (no colons)
Flow canvas > Condition > If yes > + Add an action > Slack > Get message
Fetch the original Slack message text
Inside the 'If yes' branch of the Condition, click '+ Add an action'. Search for 'Slack' and select 'Get message'. This action retrieves the full message text using the Channel ID and Message Timestamp from the trigger. Both fields are available in the dynamic content panel from the trigger. You need this step because the reaction trigger does not include the original message body — only the reaction name and message reference.
- 1Click '+ Add an action' inside the 'If yes' branch
- 2Search for 'Slack' in the action picker
- 3Select 'Get message' from the Slack connector
- 4In the 'Channel' field, select 'Channel ID' from the dynamic content panel
- 5In the 'Message Timestamp' field, select 'Message Timestamp' from the dynamic content panel
Flow canvas > + Add an action > Data Operation > Parse JSON
Add a Parse JSON action to extract message fields
After the 'Get message' step, click '+ Add an action' and search for 'Parse JSON'. Select the 'Parse JSON' Data Operation action. In the Content field, insert the 'Body' output from the 'Get message' step using dynamic content. You need a schema — click 'Generate from sample' and paste in a sample Slack message payload. This makes individual fields like 'text', 'user', and 'ts' available as clean dynamic content tokens in subsequent steps.
- 1Click '+ Add an action' after the 'Get message' block
- 2Search for 'Parse JSON' and select it from Data Operation
- 3In the 'Content' field, click the dynamic content panel and select 'Body' from the 'Get message' step
- 4Click 'Generate from sample'
- 5Paste a sample Slack message JSON payload and click 'Done'
Flow canvas > + Add an action > Slack > Get user
Resolve the Slack user ID to a display name
Click '+ Add an action' and search for 'Slack', then select 'Get user'. In the 'User' field, insert the 'user' token from the Parse JSON output. This call returns the user's profile including 'display_name' and 'real_name'. You'll use 'real_name' in the Notion task so reviewers know who flagged the message without decoding a user ID.
- 1Click '+ Add an action' after the Parse JSON block
- 2Search for 'Slack' and select 'Get user'
- 3In the 'User' field, select the 'user' token from the Parse JSON dynamic content
Paste this expression into the 'Task Title' field of the Notion 'Create database item' action instead of the raw 'text' token. It trims whitespace, strips any leading emoji characters that Slack sometimes prepends, and truncates the title at 200 characters so Notion's title field doesn't overflow. Switch to the Expression tab in the dynamic content panel and replace the current value with this formula.
JavaScript — Code Stepif(▸ Show code
if(
greater(length(trim(body('Parse_JSON')?['text'])), 200),
concat(... expand to see full code
if(
greater(length(trim(body('Parse_JSON')?['text'])), 200),
concat(
substring(
trim(body('Parse_JSON')?['text']),
0,
200
),
'...'
),
trim(body('Parse_JSON')?['text'])
)Flow canvas > + Add an action > Notion > Create database item
Connect your Notion workspace
Click '+ Add an action' and search for 'Notion'. Select 'Create database item'. Click 'Sign in' to connect your Notion account via OAuth. You must be an admin or have full access to the target Notion database. After sign-in, the action will prompt you to select a Database — choose the Notion database where tasks should land.
- 1Click '+ Add an action'
- 2Search for 'Notion' and select 'Create database item'
- 3Click 'Sign in' and complete the Notion OAuth flow in the popup
- 4In the 'Database' dropdown, select your task tracking database
Flow canvas > Notion > Create database item > property fields
Map Slack data to Notion database fields
With the Notion 'Create database item' action open, map each Notion property to the corresponding Slack data. Set the Name/Title field to the 'text' token from Parse JSON. Set an Assignee or Reported By text field to 'real_name' from the 'Get user' step. Set a Source URL field to the Slack message permalink. Set a Status field to a default value like 'To Do'. Set a Created Date field using the expression 'utcNow()'. All tokens are available in the dynamic content panel.
- 1Click the Title/Name field and select 'text' from the Parse JSON dynamic content
- 2Click the Reported By field and select 'real_name' from the Get user dynamic content
- 3Click the Source URL field and select 'permalink' from the Parse JSON dynamic content
- 4Click the Status field and type 'To Do' as a static value
- 5Click the Created Date field, switch to Expression tab, and type utcNow()
Flow canvas > + Add an action > Slack > Post message
Add a Slack reply to confirm task creation
After the Notion step, click '+ Add an action' and search for 'Slack', then select 'Post message'. Set the Channel field to the Channel ID from the trigger. In the Message Text field, compose a confirmation like: 'Task created in Notion: ' followed by the Notion page URL from the 'Create database item' output. Set Thread Timestamp to the Message Timestamp from the trigger so the reply threads under the original message instead of posting to the channel.
- 1Click '+ Add an action' after the Notion step
- 2Search for 'Slack' and select 'Post message'
- 3Set Channel to 'Channel ID' from the trigger dynamic content
- 4In Message Text, type 'Task created: ' then insert the Notion page URL from the Create database item output
- 5Set Thread Timestamp to 'Message Timestamp' from the trigger to thread the reply
Flow canvas > Save > Test > Manually
Test and enable the flow
Click 'Save' in the top right, then click 'Test' and select 'Manually'. Go to Slack, find any message, and react to it with your chosen emoji. Switch back to Power Automate — the test run should appear within 60-90 seconds. Expand each action to confirm green checkmarks and review the outputs. Check Notion to verify a new database entry was created with the correct fields. If everything looks right, click 'Turn on' to activate the flow for production.
- 1Click 'Save' in the top right corner
- 2Click 'Test' and choose 'Manually'
- 3Go to Slack and react to any message with your trigger emoji
- 4Return to Power Automate and wait for the test run to appear (up to 90 seconds)
- 5Expand each action block and confirm green checkmarks, then check Notion for the new entry
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 organization is already inside Microsoft 365 and your IT department controls app approvals. Power Automate's Slack and Notion connectors are pre-approved in most enterprise Microsoft environments, which means no security review, no shadow IT concerns, and no new vendor relationship to manage. It also makes sense if your team uses other Microsoft services like Teams, SharePoint, or Azure — you can chain this flow into those systems without leaving the platform. If your team is small, runs on Google Workspace, or doesn't have a Microsoft 365 subscription, pick Make instead. Make handles this same workflow for less money and with a cleaner multi-step UI.
Both the Slack and Notion connectors in Power Automate are premium, which means you need at least the Per User plan at $15/user/month, or the Per Flow plan at $100/flow/month. Each flow run consumes API call credits: this specific flow uses 3 API calls per triggered message (Get message, Get user, Create database item), plus 1 for the Slack confirmation reply — 4 total. At 200 flagged messages per month, that's 800 API calls. The Per User plan includes 40,000 API calls/month, so volume isn't the concern — the flat $15/user seat cost is. Make's Team plan at $9/month covers 10,000 operations, handles the same 200 messages for $1.80 in operations, and requires no per-seat fee. Power Automate costs 8x more for this specific use case unless you're already paying for it as part of a Microsoft 365 bundle.
Zapier has a cleaner trigger for this — 'New Reaction Added to Message' fires reliably and the Notion 'Create Database Item' action requires zero JSON parsing because Zapier pre-processes the Slack payload. Setup is 15 minutes versus 40 minutes on Power Automate. Make gives you a visual data transformer where you can manipulate the message text, strip formatting, and apply conditional routing across multiple Notion databases — all in one module using Make's formula syntax, no separate Parse JSON step needed. n8n lets you self-host the entire thing for zero recurring cost, and its Slack node handles both reaction and keyword triggers in a single node configuration. Pipedream is fastest for developers — you get the raw Slack event object in Node.js and can write the Notion API call directly in 20 lines. Power Automate is still the right call specifically when your company's IT team has locked down third-party automation tools and Power Automate is the only approved option — that's a real constraint in regulated industries and large enterprises, and it's a legitimate reason to pick it over cheaper alternatives.
Three things you'll hit after launch. First, Slack's reaction event includes the reacting user's ID but not the message author's ID — you have to call 'Get message' separately, which adds a step most people don't anticipate and can fail on private channels. Second, Power Automate's Notion connector maps database properties by name at design time, so if someone renames a Notion column after the flow is built, the field silently stops receiving data with no error thrown. Set up run monitoring and check Notion entries weekly for blank fields in the first month. Third, if multiple team members react with the trigger emoji on the same message in quick succession, you'll get duplicate Notion entries within seconds of each other — Power Automate has no built-in deduplication for this pattern and you need to build it manually using a Notion query-before-create guard.
Ideas for what to build next
- →Add Notion task assignment based on channel — Extend the flow with a Switch action that maps specific Slack channels to Notion assignees or project tags — messages from #design go to the design project, #engineering go to the engineering board, all automatically.
- →Post a daily digest of unresolved tasks back to Slack — Build a second Scheduled cloud flow that queries your Notion database each morning for tasks with Status = 'To Do' and posts a summary list to your team's Slack channel, closing the loop without anyone opening Notion manually.
- →Sync Notion task status changes back to Slack — Add a Notion-triggered flow that watches for status changes on the same database and posts a Slack thread reply when a task moves to 'Done', so the original requester sees resolution without leaving Slack.
Related guides
How to Create Notion Tasks from Slack with Pipedream
~15 min setup
How to Create Notion Tasks from Slack with n8n
~20 min setup
How to Create Notion Tasks from Slack Messages with Zapier
~8 min setup
How to Create Notion Tasks from Slack Messages with Make
~12 min setup
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