Beginner~12 min setupCommunication & ProductivityVerified April 2026
Slack logo
Notion logo

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

Use case type

routing

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

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

Slack account with channels:history and reactions:read OAuth scopes — granted automatically when you connect Slack to Make
Make account on any plan — Free tier includes 1,000 operations/month which covers ~500 tasks created
Notion account with a database already created that has at minimum a Title property, a Status property, and a Date property
Notion integration shared with your task database — open the database in Notion, click Share, and add the Make connection before setting up the scenario
Admin or member role in Slack — guest accounts cannot add reactions in all channel types, which would cause the trigger to miss events

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Log in at make.com
  2. 2Click 'Create a new scenario' in the top right
  3. 3Click the empty circle in the center of the canvas to open app search
What you should see: The app search panel opens on the right side showing a search bar and a grid of app icons.
Common mistake — Make auto-saves scenarios in draft state even if you don't click Save. If you accidentally close the tab mid-setup, return to Scenarios and look for an untitled draft.
2

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.

  1. 1Type 'Slack' in the search bar
  2. 2Click the Slack app icon
  3. 3Scroll to the Triggers section and click 'Watch Reactions'
  4. 4Click 'Add' to place it on the canvas
What you should see: A Slack module appears on the canvas labeled 'Watch Reactions' with a clock icon indicating it is the trigger.
Common mistake — Do not select 'Watch Messages' here — it fires on every single message in the channel, not just flagged ones, and will create thousands of unwanted Notion tasks.
Make
+
click +
search apps
Slack
SL
Slack
Add the Slack 'Watch Reactio…
Slack
SL
module added
3

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.

  1. 1Click the 'Watch Reactions' module to open its settings panel
  2. 2Click 'Add' next to the Connection dropdown
  3. 3Click 'Sign in with Slack' in the popup
  4. 4Select your workspace and click 'Allow'
  5. 5Close the popup — Make returns you to the module settings
What you should see: The Connection dropdown shows your Slack workspace name with a green dot. No error messages appear.
Common mistake — If you're on a Slack Enterprise Grid plan, you may need a Slack admin to approve the Make OAuth app before the authorization completes.
Make settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
4

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.

  1. 1In the 'Reaction' field, type the emoji name without colons — e.g. 'white_check_mark'
  2. 2Click the 'Channel' field and select or type the channel name (e.g. #engineering)
  3. 3Leave Limit set to 1
  4. 4Click OK to save the module settings
What you should see: The module shows 'white_check_mark' in the Reaction field and your selected channel name below it.
5

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.

  1. 1Click the '+' button on the right edge of the Watch Reactions module
  2. 2Search 'Slack' and click the app icon
  3. 3Click 'Get a Message' under Actions
  4. 4Click 'Add' to place it on the canvas
What you should see: A second Slack module labeled 'Get a Message' appears connected to the Watch Reactions module by a line.
Common mistake — Use the same Slack connection you created in Step 3. Creating a second connection creates a duplicate OAuth entry and makes credential management harder later.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
6

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.

  1. 1Click the 'Get a Message' module to open settings
  2. 2Click inside the 'Channel ID' field — a blue mapping panel opens
  3. 3Select '1. Watch Reactions > Channel ID' from the variable list
  4. 4Click inside the 'Message ID' field
  5. 5Select '1. Watch Reactions > Item Timestamp' from the variable list
  6. 6Click OK
What you should see: Both fields show blue variable pills — Channel ID and Item Timestamp — pulled from the upstream Watch Reactions module.
Common mistake — Slack's 'Message ID' field in Make expects the raw timestamp string like '1712345678.123456' — do not format or convert it before mapping.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
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

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.

  1. 1Click the line between 'Get a Message' and the Notion module
  2. 2Click 'Set up a filter' in the popup
  3. 3Label the filter 'First reaction only'
  4. 4Set Condition A to '2. Get a Message > Reactions > Count'
  5. 5Set the operator to 'Equal to'
  6. 6Set the value to '1'
  7. 7Click OK
What you should see: A small funnel icon appears on the connecting line between the two modules, indicating an active filter.
Common mistake — Reaction Count in the Slack API returns the total number of that specific emoji on the message, not total reactions. If your team tends to pile on the same emoji, set the threshold to 1 to fire only once.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Notion
NO
notified
8

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.

  1. 1Click the '+' on the canvas after the Get a Message module
  2. 2Search 'Notion' and click the app icon
  3. 3Click 'Create a Database Item' under Actions
  4. 4Click 'Add' next to Connection and authorize your Notion account
  5. 5In the 'Database ID' field, click the dropdown and select your task database
What you should see: The Notion module shows your database name in the Database ID field and the column headers from that database appear below as mappable fields.
Common mistake — Notion's Make integration only shows databases that were explicitly shared with the Make integration during authorization. If your database is missing from the dropdown, go to Notion, open the database, click Share, and add the Make connection.
9

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.

  1. 1Click the 'Name' or 'Task' title field and map '2. Get a Message > Text'
  2. 2Click the 'Assignee' field and map '2. Get a Message > User'
  3. 3Click the 'Status' field and type or select 'To Do'
  4. 4Click the 'Source Channel' field and map '2. Get a Message > Channel'
  5. 5Click the 'Created Date' field and map '1. Watch Reactions > Event Date'
  6. 6Click the 'Slack Link' URL field and map '2. Get a Message > Permalink'
  7. 7Click OK
What you should see: All mapped fields show blue variable pills from the upstream Slack modules. The Status field shows the static text 'To Do'.
Common mistake — Notion's 'People' property type requires a Notion user ID, not a Slack user ID. You cannot directly map a Slack user to a Notion people field unless you maintain a lookup table. Map assignee to a plain Text property instead, or skip it and set it manually in Notion.
10

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.

  1. 1Click 'Run once' in the bottom left toolbar
  2. 2Switch to Slack and add a ✅ reaction to any message in the configured channel
  3. 3Return to Make — watch for the green execution bubbles to appear on each module
  4. 4Click each module bubble to review the input and output data
  5. 5Open Notion and confirm the new database entry appeared
What you should see: Each module shows a green bubble with '1' indicating one record processed. The Notion database has a new row with the message text, user, channel, and date populated.
Make
▶ Run once
executed
Slack
Notion
Notion
🔔 notification
received
11

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.

  1. 1Click the gray toggle labeled 'Scheduling' in the bottom toolbar
  2. 2In the scheduling popup, select 'Immediately'
  3. 3Click 'Save' in the bottom toolbar
  4. 4Confirm the scenario name and click 'Save' again
What you should see: The scheduling toggle turns blue/green. The scenario status in your Scenarios list shows 'Active' with a green indicator.
Common mistake — Confirm your workflow timezone matches your business timezone — n8n uses the instance timezone by default. Also verify the workflow is saved and set to Active, since Schedule Triggers won't fire on inactive workflows.

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,
        "<@",
        "@"
      ),
      ">",
      ""
    ),
    "<#",
    "#"
  ),
  "&amp;",
  "&"
)}}

// 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 &amp; 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

VerdictWhy Make for this workflow

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.

Cost

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.

Tradeoffs

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 replyAppend 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 databasesAdd 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 taggingInsert 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

Was this guide helpful?
Slack + Notion overviewMake profile →