

How to Create Notion Tasks from Slack Messages with Make
Watches for a specific emoji reaction or keyword in Slack and instantly creates a structured task in a Notion database with the message text, sender, channel, and timestamp.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that surface action items in Slack chat and need them tracked in Notion without copy-pasting or switching apps.
Not ideal for
Teams who need two-way sync so Notion task updates flow back into Slack — that requires a separate reverse scenario.
Sync type
real-timeUse case type
routingReal-World Example
A 12-person product team at a SaaS company uses this to convert action items from their #engineering Slack channel into Notion sprint tasks. Before automation, someone had to manually copy messages into Notion at the end of standups — things slipped through constantly. Now, anyone adds a ✅ reaction to a message and a Notion task appears within 30 seconds, assigned to the person who sent the original 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 Make
Copy the pre-built Make blueprint and paste it straight into Make. 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 Name | ||
| Status | ||
6 optional fields▸ show
| Source Channel | |
| Requested By | |
| Flagged By | |
| Created Date | |
| Slack Message Link | |
| Priority |
Step-by-Step Setup
make.com > Scenarios > Create a new scenario
Create a new Make scenario
Log into make.com and click the blue 'Create a new scenario' button in the top right. You'll land on the visual scenario canvas — a dark background with a single empty circle in the center. This circle is your trigger module. Click it to open the app search panel on the right side of the screen.
- 1Log in at make.com
- 2Click 'Create a new scenario' in the top right
- 3Click the empty circle in the center of the canvas to open app search
Scenario Canvas > App Search > Slack > Watch Reactions
Add the Slack 'Watch Reactions' trigger
Type 'Slack' in the app search bar and select it. Make will show you all available Slack triggers and actions. For this workflow, select 'Watch Reactions' — this fires every time a user adds an emoji reaction to any message in a channel you specify. This is the most reliable trigger for this use case because users can react to any message retroactively, not just new ones.
- 1Type 'Slack' in the search bar
- 2Click the Slack app icon
- 3Scroll to the Triggers section and click 'Watch Reactions'
- 4Click 'Add' to place it on the canvas
Watch Reactions Module > Connection > Add > Authorize Slack
Connect your Slack workspace
Click the 'Watch Reactions' module and select 'Add' next to the Connection field. A popup opens asking you to authorize Make's Slack app. Sign in with the Slack account that has access to the target channel. Make needs the channels:history and reactions:read OAuth scopes — both are granted automatically during the standard authorization flow.
- 1Click the 'Watch Reactions' module to open its settings panel
- 2Click 'Add' next to the Connection dropdown
- 3Click 'Sign in with Slack' in the popup
- 4Select your workspace and click 'Allow'
- 5Close the popup — Make returns you to the module settings
Watch Reactions Module > Reaction / Channel / Limit fields
Configure the reaction trigger settings
With the connection set, configure three fields in the Watch Reactions panel. Set 'Reaction' to the emoji name you want to use — type it without colons, e.g. 'white_check_mark' for ✅. Set 'Channel' to the Slack channel ID or name where tasks originate. Leave 'Limit' at 1 — this trigger processes one reaction event per run, which is correct for real-time task creation.
- 1In the 'Reaction' field, type the emoji name without colons — e.g. 'white_check_mark'
- 2Click the 'Channel' field and select or type the channel name (e.g. #engineering)
- 3Leave Limit set to 1
- 4Click OK to save the module settings
Scenario Canvas > + > Slack > Get a Message
Add a Slack 'Get a Message' module to fetch message text
The Watch Reactions trigger gives you the reaction event but NOT the full message text — only a message timestamp and channel ID. You need a second Slack module to fetch the actual message content. Click the '+' icon to the right of the Watch Reactions module on the canvas, search for Slack, and add the 'Get a Message' action.
- 1Click the '+' button on the right edge of the Watch Reactions module
- 2Search 'Slack' and click the app icon
- 3Click 'Get a Message' under Actions
- 4Click 'Add' to place it on the canvas
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Get a Message Module > Channel ID / Message ID fields
Map the message timestamp and channel into 'Get a Message'
Open the 'Get a Message' module settings. The two required fields are 'Channel ID' and 'Message ID' (which is actually the message timestamp in Slack's API). Click into the Channel ID field and select the 'Channel ID' variable from the Watch Reactions module in the mapping panel. Then click into Message ID and map 'Item Timestamp' from the Watch Reactions output.
- 1Click the 'Get a Message' module to open settings
- 2Click inside the 'Channel ID' field — a blue mapping panel opens
- 3Select '1. Watch Reactions > Channel ID' from the variable list
- 4Click inside the 'Message ID' field
- 5Select '1. Watch Reactions > Item Timestamp' from the variable list
- 6Click OK
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Scenario Canvas > Line between modules > Add a filter (wrench icon)
Add a filter to block duplicate reactions
If two people react with ✅ to the same message, you'll get two Notion tasks. Add a filter between 'Get a Message' and the next module to prevent this. Click the line connecting 'Get a Message' to the next module (you'll add the Notion module in the next step, so add this filter after you place the Notion module). Set the filter condition: 'Reaction Count' from the Get a Message output must equal 1. This passes only the first reaction on any given message.
- 1Click the line between 'Get a Message' and the Notion module
- 2Click 'Set up a filter' in the popup
- 3Label the filter 'First reaction only'
- 4Set Condition A to '2. Get a Message > Reactions > Count'
- 5Set the operator to 'Equal to'
- 6Set the value to '1'
- 7Click OK
Scenario Canvas > + > Notion > Create a Database Item
Add the Notion 'Create a Database Item' module
Click the '+' after the Get a Message module (or after the filter if you've placed it). Search for Notion and add the 'Create a Database Item' action. This is the module that writes a new row to your Notion task database. You'll need to connect your Notion account and select the specific database to write into.
- 1Click the '+' on the canvas after the Get a Message module
- 2Search 'Notion' and click the app icon
- 3Click 'Create a Database Item' under Actions
- 4Click 'Add' next to Connection and authorize your Notion account
- 5In the 'Database ID' field, click the dropdown and select your task database
Create a Database Item Module > Property fields
Map Slack data to Notion database fields
With the Notion module open, you'll see all your database properties listed as fields. Map each Slack variable to the correct Notion property. The task name should pull from '2. Get a Message > Text'. Assignee maps from '1. Watch Reactions > Event User ID' (this is the reactor's ID — you may want to map sender instead via '2. Get a Message > User'). Set Status to a fixed value like 'To Do'. Map the Slack permalink to a URL field if your database has one.
- 1Click the 'Name' or 'Task' title field and map '2. Get a Message > Text'
- 2Click the 'Assignee' field and map '2. Get a Message > User'
- 3Click the 'Status' field and type or select 'To Do'
- 4Click the 'Source Channel' field and map '2. Get a Message > Channel'
- 5Click the 'Created Date' field and map '1. Watch Reactions > Event Date'
- 6Click the 'Slack Link' URL field and map '2. Get a Message > Permalink'
- 7Click OK
Scenario Canvas > Run once button (bottom toolbar)
Test the scenario end-to-end
Click 'Run once' in the bottom left of the canvas. This puts Make into listen mode — it's waiting for one real trigger event. Go to your Slack channel and add a ✅ reaction to any message. Return to Make within 60 seconds. The scenario should execute and show green checkmarks on each module. Click each module to inspect the data that flowed through it and verify the Notion record was created.
- 1Click 'Run once' in the bottom left toolbar
- 2Switch to Slack and add a ✅ reaction to any message in the configured channel
- 3Return to Make — watch for the green execution bubbles to appear on each module
- 4Click each module bubble to review the input and output data
- 5Open Notion and confirm the new database entry appeared
Scenario Canvas > Scheduling toggle > Immediately > Save
Activate and schedule the scenario
Click the 'Scheduling' toggle in the bottom toolbar — it's currently OFF (gray). Turn it ON. Make will prompt you to set how often the scenario checks for new triggers. Since this uses a webhook-based trigger (Slack's Events API under the hood), select 'Immediately' — this means Make processes events as soon as Slack sends them, typically within 5-15 seconds of the reaction being added. Click Save.
- 1Click the gray toggle labeled 'Scheduling' in the bottom toolbar
- 2In the scheduling popup, select 'Immediately'
- 3Click 'Save' in the bottom toolbar
- 4Confirm the scenario name and click 'Save' again
Paste this formula into a Make 'Set Variable' module placed between 'Get a Message' and 'Create a Database Item'. It cleans raw Slack message text by stripping user mention tags like <@U02KJLMN3> and replacing them with a plain '@username' format, so your Notion task titles are readable without Slack-specific markup. Add the Set Variable module, name the variable 'clean_text', and paste the formula into the Value field.
JavaScript — Custom Function{{replace(▸ Show code
{{replace(
replace(
replace(... expand to see full code
{{replace(
replace(
replace(
replace(
2.text,
"<@",
"@"
),
">",
""
),
"<#",
"#"
),
"&",
"&"
)}}
// Then in your Notion module, map the 'Task Name' field to
// the 'clean_text' variable instead of '2. Get a Message > Text'
// This handles: user mentions (@U02KJLMN3 → @U02KJLMN3 stripped),
// channel references (#C04XR8M → #channel-name stripped),
// and HTML entity & decoded back to &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 Make for this if your team is comfortable with a visual, modular setup and you need conditional logic built in — specifically the Router or filter that separates high-priority messages from noise. Make's canvas makes it obvious what data flows where, which matters when you're chaining three Slack and Notion modules together and need to see which variable maps to which field. You'll also appreciate Make's formula editor for cleaning Slack's raw message markup before it lands in Notion. The one scenario where you'd skip Make: if your team already runs everything in Zapier and this is a one-off workflow with no special logic. Zapier's two-step version (reaction → Notion) is faster to set up if you don't need filtering or text transformation.
The math is straightforward. Each scenario run costs 3 operations: Watch Reactions (1) + Get a Message (1) + Create a Database Item (1). Make's free tier gives you 1,000 operations per month, so you get roughly 333 task creations per month at zero cost. At the Core plan ($9/month), you get 10,000 operations — enough for 3,333 tasks. Zapier's equivalent would cost $19.99/month for 750 tasks on their Starter plan, and you'd still hit limits faster. If you're creating more than 300 tasks per month from Slack, Make's Core plan at $9 covers you. Zapier's comparable tier costs more than double that.
Zapier has one real advantage here: its Slack 'New Reaction Added' trigger is more stable than Make's equivalent for teams on Slack's free plan, because Zapier's polling-based approach works even when Slack's Events API has intermittent issues. n8n lets you self-host the whole thing and write JavaScript directly in the workflow to handle complex Slack Block Kit payloads — useful if your Slack messages include structured data like form submissions. Power Automate is the better call if your team is already in Microsoft 365, because it has a native Notion connector and tighter Teams integration for the confirmation reply step. Pipedream gives you the most control — you can write async Node.js to handle Slack's OAuth signature verification yourself — but that's overkill unless you're building a product on top of this. Make wins here because the visual approach to the three-module chain is genuinely faster to debug than YAML or JSON-based configs, and the formula editor handles Slack text cleanup without needing code.
Three things you'll hit after going live. First, Slack's reaction events occasionally arrive out of order during high-traffic moments — if your channel is busy, two reactions added seconds apart may reach Make in reverse order, causing the Count = 1 filter to block a valid first reaction. Monitor your scenario history for unexpectedly filtered runs in the first week. Second, Notion's API rate limit is 3 requests per second per integration. If your team has a spike of reactions (end of a big meeting, for example) and 10 people react within a second, some Notion API calls will fail with a 429 error — Make will retry automatically, but tasks may appear in Notion 30-60 seconds later than expected. Third, Slack truncates very long messages in the API response at 4,000 characters, and it doesn't tell you the message was truncated — you'll notice it in Notion when task descriptions end mid-sentence. There's no workaround other than educating your team to keep action-item messages concise.
Ideas for what to build next
- →Add a Slack confirmation reply — Append a Slack 'Reply to a Message' module at the end of the scenario. Post a message in the original thread with the Notion task URL so the team has immediate confirmation and a direct link to the created task.
- →Route tasks by channel to different Notion databases — Add a Router module after 'Get a Message' with separate paths for each Slack channel. #engineering reactions write to your Engineering database, #product reactions write to the Product Roadmap database — without building separate scenarios.
- →Add keyword-based priority tagging — Insert a Make 'Set Variable' module that checks if the message text contains words like 'urgent', 'ASAP', or 'blocker' using the contains() formula, then maps High/Medium/Low to the Notion Priority field automatically instead of using a fixed default.
Related guides
How to Create Notion Tasks from Slack with Pipedream
~15 min setup
How to Create Notion Tasks from Slack with Power Automate
~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 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