Intermediate~15 min setupCommunication & ProductivityVerified April 2026
Slack logo
Notion logo

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-time

Use case type

routing

Real-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.

/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.

Slack account with reactions:read, channels:history, users:read, and chat:write OAuth scopes available for the connecting user
Notion account with admin or full-access permissions to the target task database, and a Power Automate integration added to that database
Power Automate account at the Per User or Per Flow plan — the free/seeded Microsoft 365 plan does not include premium connectors, and both the Slack and Notion connectors are premium
An existing Notion database with at minimum a Title property, a text property for the reporter name, a URL property for the Slack link, and a date property for creation timestamp
Agreement on which emoji (e.g., :ticket:, :action:) the team will use to flag messages — communicate this to the team before enabling the flow

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Click 'My flows' in the left sidebar
  2. 2Click '+ New flow' in the top left corner
  3. 3Select 'Automated cloud flow' from the dropdown menu
  4. 4Name the flow 'Slack Reaction to Notion Task'
  5. 5In the trigger search box, type 'Slack' and press Enter
What you should see: You should see a dialog titled 'Build an automated cloud flow' with a list of Slack triggers below the search bar.
Common mistake — Do NOT select 'Instant cloud flow' or 'Scheduled cloud flow' — those won't fire on Slack events. You need 'Automated cloud flow' to use event-based triggers.
2

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.

  1. 1Scroll through the Slack trigger list or search for 'reaction'
  2. 2Select 'When a reaction is added to a message'
  3. 3Click 'Create' to open the flow canvas with this trigger at the top
What you should see: The flow canvas opens with the Slack trigger block at the top showing 'When a reaction is added to a message'.
Common mistake — Power Automate's Slack connector does not natively support keyword-based triggers. If your team uses keywords instead of reactions, you will need to use the 'When a new message is posted to a channel' trigger and add a Condition action to check the message text — which adds latency of up to 1-2 minutes.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
3

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.

  1. 1Click the Slack trigger block to expand it
  2. 2Click the 'Sign in' button that appears
  3. 3Complete the Slack OAuth flow in the popup window
  4. 4Grant Power Automate the requested permissions including reactions:read and channels:history
  5. 5Return to the flow canvas — the trigger should now show your workspace name
What you should see: The Slack trigger block shows your workspace name (e.g., 'acme-corp.slack.com') and a green connection indicator. No 'Sign in' button is visible.
Common mistake — Power Automate creates the Slack connection under your personal account. If you leave the company, the flow will break. Create the connection using a dedicated service account or a shared team Slack login to avoid this.
Power Automate settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Power Automate
popup window
Connected
green checkmark
4

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.

  1. 1Click '+ New step'
  2. 2Search for 'Condition' and select it from the Control category
  3. 3Click the left value field in the Condition block
  4. 4Select 'Reaction' from the dynamic content panel on the right
  5. 5Set the operator dropdown to 'is equal to'
  6. 6Type your emoji name in the right value field, e.g., 'ticket' (no colons)
What you should see: The Condition block shows: [Reaction] [is equal to] [ticket] — with 'Reaction' appearing as a blue dynamic content chip.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Notion
NO
notified
5

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.

  1. 1Click '+ Add an action' inside the 'If yes' branch
  2. 2Search for 'Slack' in the action picker
  3. 3Select 'Get message' from the Slack connector
  4. 4In the 'Channel' field, select 'Channel ID' from the dynamic content panel
  5. 5In the 'Message Timestamp' field, select 'Message Timestamp' from the dynamic content panel
What you should see: The 'Get message' action block shows Channel ID and Message Timestamp populated with blue dynamic content chips from the trigger.
Common mistake — The 'Get message' Slack action requires your connected Slack account to be a member of the channel where the reaction occurred. Private channels that the account hasn't joined will return a 'channel_not_found' error.
6

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.

  1. 1Click '+ Add an action' after the 'Get message' block
  2. 2Search for 'Parse JSON' and select it from Data Operation
  3. 3In the 'Content' field, click the dynamic content panel and select 'Body' from the 'Get message' step
  4. 4Click 'Generate from sample'
  5. 5Paste a sample Slack message JSON payload and click 'Done'
What you should see: The Parse JSON block shows a generated schema with properties including 'text', 'user', 'ts', 'channel', and 'permalink'. These fields now appear as tokens in the dynamic content panel.
Common mistake — Slack's message 'user' field returns a user ID like 'U04AB12XYZ', not a display name. If you want a human-readable name in Notion, add a 'Get user' Slack action after this step and map the display name from that response.
Slack fields
text
user
channel
ts
thread_ts
available as variables:
1.props.text
1.props.user
1.props.channel
1.props.ts
1.props.thread_ts
7

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.

  1. 1Click '+ Add an action' after the Parse JSON block
  2. 2Search for 'Slack' and select 'Get user'
  3. 3In the 'User' field, select the 'user' token from the Parse JSON dynamic content
What you should see: The 'Get user' block is populated with the 'user' dynamic content chip. No errors shown — the action is ready to resolve user IDs at runtime.

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'])
)
8

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.

  1. 1Click '+ Add an action'
  2. 2Search for 'Notion' and select 'Create database item'
  3. 3Click 'Sign in' and complete the Notion OAuth flow in the popup
  4. 4In the 'Database' dropdown, select your task tracking database
What you should see: The Notion 'Create database item' block shows your database name in the Database field and displays the database's properties as fillable fields below.
Common mistake — Power Automate's Notion connector only shows databases that the connected Notion integration has been explicitly granted access to. If your target database is missing from the dropdown, go to Notion > open the database > click '...' > Add connections > select your Power Automate integration.
9

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.

  1. 1Click the Title/Name field and select 'text' from the Parse JSON dynamic content
  2. 2Click the Reported By field and select 'real_name' from the Get user dynamic content
  3. 3Click the Source URL field and select 'permalink' from the Parse JSON dynamic content
  4. 4Click the Status field and type 'To Do' as a static value
  5. 5Click the Created Date field, switch to Expression tab, and type utcNow()
What you should see: Each mapped Notion field shows a blue dynamic content chip or a static value. The action block has no empty required fields.
Common mistake — Notion property names in Power Automate are case-sensitive and must match your database exactly. If your Notion column is called 'Task Name' but you type 'task name', the field will be ignored and the Notion entry will have a blank title.
10

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.

  1. 1Click '+ Add an action' after the Notion step
  2. 2Search for 'Slack' and select 'Post message'
  3. 3Set Channel to 'Channel ID' from the trigger dynamic content
  4. 4In Message Text, type 'Task created: ' then insert the Notion page URL from the Create database item output
  5. 5Set Thread Timestamp to 'Message Timestamp' from the trigger to thread the reply
What you should see: The Post message action is configured with a channel, message body containing the Notion URL, and a thread timestamp. The flow canvas shows all steps connected without errors.
11

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.

  1. 1Click 'Save' in the top right corner
  2. 2Click 'Test' and choose 'Manually'
  3. 3Go to Slack and react to any message with your trigger emoji
  4. 4Return to Power Automate and wait for the test run to appear (up to 90 seconds)
  5. 5Expand each action block and confirm green checkmarks, then check Notion for the new entry
What you should see: Every action in the test run shows a green checkmark. A new page appears in your Notion database with the message text, sender name, Slack permalink, status 'To Do', and today's date.
Power Automate
▶ Test flow
executed
Slack
Notion
Notion
🔔 notification
received

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 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.

Cost

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.

Tradeoffs

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 channelExtend 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 SlackBuild 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 SlackAdd 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

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