

How to Archive Slack Messages to Notion with Make
Automatically saves a starred or emoji-reacted Slack message — including sender, timestamp, and thread content — as a new Notion database entry the moment it's flagged.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that make decisions in Slack and need those decisions captured in a Notion knowledge base without copy-pasting.
Not ideal for
Teams needing full channel export or bulk historical archival — use Slack's native export or a dedicated backup tool instead.
Sync type
real-timeUse case type
backupReal-World Example
A 22-person product team uses this to capture every Slack message reacted with a 📌 pin emoji into a Notion database called 'Decision Log'. Before this, engineers would post decisions in #product-decisions and they'd get buried within 48 hours. Now every pinned message shows up in Notion within 90 seconds, tagged with the author and source channel.
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 | ||
| Message Text | ||
| Author Name | ||
| Channel Name | ||
| Archived At | ||
| Permalink | ||
3 optional fields▸ show
| Archived By | |
| Thread Reply Count | |
| Source Channel ID |
Step-by-Step Setup
make.com > Scenarios > Create a new scenario
Create a new Make scenario
Log into Make at make.com and click the blue 'Create a new scenario' button in the top right of the Scenarios dashboard. You'll land on the visual scenario canvas — a dark grid where you'll drag and connect modules. The canvas starts empty with a single prompt circle in the center labeled 'Add a module'. This is your starting point for the trigger.
- 1Log into make.com
- 2Click 'Create a new scenario' in the top right
- 3Wait for the visual canvas to load
- 4Click the large circle with a question mark in the center of the canvas
Canvas > Add module > Slack > Watch Reactions
Add the Slack trigger module
In the module search panel, type 'Slack' and select it from the results. Make will show you a list of Slack trigger options. Choose 'Watch Reactions' — this fires every time a specific emoji reaction is added to any message in your workspace. This approach is more reliable than watching starred messages because the Slack Stars API was deprecated in early 2023 for some plans.
- 1Type 'Slack' in the module search bar
- 2Click the Slack app icon
- 3Scroll to the 'Triggers' section
- 4Select 'Watch Reactions'
Slack module > Connection > Add > Slack OAuth
Connect your Slack account
Click 'Add' next to the Connection field to create a new Slack connection. Make will open a popup window that redirects to Slack's OAuth screen. Select the correct Slack workspace from the dropdown in the top right of that popup, then click 'Allow'. After authorization, Make returns you to the module config panel with your workspace name showing in the Connection field.
- 1Click the 'Add' button next to the Connection field
- 2In the Slack OAuth popup, confirm the correct workspace is selected in the top-right dropdown
- 3Click 'Allow' to grant Make the required permissions
- 4Wait for the popup to close and return to the Make canvas
Slack module > Watch Reactions > Reaction Name / Channel / Limit
Configure the Slack trigger settings
With the connection established, fill in the trigger configuration. Set 'Reaction Name' to the emoji you want to use as the archive trigger — type it without colons, e.g., 'pushpin' for 📌. Leave 'Channel' blank to watch all channels, or enter a specific channel ID to scope it. Set 'Limit' to 1. This module outputs one message bundle per reaction event, containing the message text, sender user ID, channel ID, timestamp, and permalink.
- 1In the 'Reaction Name' field, type your chosen emoji name without colons (e.g., pushpin)
- 2Leave 'Channel' blank to catch reactions across all channels, or paste a channel ID to restrict
- 3Set 'Limit' to 1
- 4Click 'OK' to save the module
Canvas > + after Slack trigger > Slack > Get a Message
Add a Slack 'Get a Message' module to fetch full content
The Watch Reactions trigger only gives you the message's timestamp and channel — not the full message text. Click the '+' icon to the right of the Slack trigger module to add a second module. Search for Slack again and select 'Get a Message'. This module takes the channel ID and message timestamp from the trigger and fetches the complete message object, including the text body, sender display name, and any thread replies count.
- 1Click the small '+' circle on the right edge of the Slack trigger module
- 2Search 'Slack' in the module panel
- 3Select 'Get a Message' under Actions
- 4Use the same Slack connection from Step 3
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}channel: {{channel}}
ts: {{ts}}
Get a Message module > Channel ID / Message TS
Map fields in the 'Get a Message' module
In the 'Get a Message' configuration panel, click into the 'Channel ID' field and select the channel value from the Watch Reactions output — it appears in the dynamic variable picker as '1. Channel ID'. Do the same for 'Message TS', selecting '1. Item Timestamp' from the picker. These two values together uniquely identify any Slack message. Click 'OK' to save.
- 1Click into the 'Channel ID' field
- 2Click the variable picker icon (looks like a stack of coins)
- 3Select '1. Channel ID' from the Watch Reactions output
- 4Click into 'Message TS' and select '1. Item Timestamp'
- 5Click 'OK'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Canvas > + after Get a Message > Slack > Get a User
Resolve sender name with 'Get a User' module
The message object returns a user ID like U04AB3XYZ, not a display name. Add a third module — Slack 'Get a User' — to convert that ID into a readable name before writing to Notion. Connect it after 'Get a Message'. In the User ID field, map '2. User' from the Get a Message output. This gives you fields like 'Real Name' and 'Display Name' to use in Notion.
- 1Click '+' after the 'Get a Message' module
- 2Search 'Slack' and select 'Get a User'
- 3Use the same Slack connection
- 4Map 'User ID' to '2. User' from the previous module's output
- 5Click 'OK'
This formula goes in the 'Title' property field of Make's Notion module. It strips Slack's markdown link syntax (e.g., <https://example.com|label>) and user mention tags (e.g., <@U04AB3XYZ>) from the message text before writing to Notion, so your Notion entries don't contain raw Slack formatting tokens.
Copy this template{{replace(▸ Show code
{{replace(
replace(
replace(... expand to see full code
{{replace(
replace(
replace(
replace(
2.text;
"/<@[A-Z0-9]+>/g";
"[user]"
);
"/<#[A-Z0-9]+\\|([^>]+)>/g";
"#$1"
);
"/<([^|>]+)\\|([^>]+)>/g";
"$2"
);
"/<([^>]+)>/g";
"$1"
)}}Canvas > + after Get a User > Notion > Create a Database Item
Add the Notion 'Create a Database Item' module
Click '+' after 'Get a User' and search for Notion. Select 'Create a Database Item'. Connect your Notion account via OAuth — Make will open a Notion permission popup asking which pages to grant access. You must explicitly select the database you want to archive into, otherwise Make cannot see it. After connecting, use the 'Database ID' dropdown to select your archive database.
- 1Click '+' after the 'Get a User' module
- 2Search 'Notion' and select 'Create a Database Item'
- 3Click 'Add' to create a Notion connection
- 4In the Notion OAuth popup, check the box next to your archive database page
- 5Click 'Allow access', then select the database from the 'Database ID' dropdown in Make
Notion module > Create a Database Item > Property fields
Map Slack fields to Notion database properties
With the Notion module open, map each property field using values from the earlier modules. For the Title property, use '2. Text' from Get a Message (the message body). For Author, use '3. Real Name' from Get a User. For Channel, use '1. Channel ID' from Watch Reactions. For Timestamp, use formatDate({{1.item.ts}} * 1000; 'YYYY-MM-DDTHH:mm:ss') to convert the Unix timestamp to an ISO date. For Permalink, paste the message link from '2. Permalink' in Get a Message.
- 1Click the 'Title' property field and map '2. Text' from Get a Message
- 2Click the 'Author' field and map '3. Real Name' from Get a User
- 3Click the 'Channel' field and map '1. Channel Name' from Watch Reactions
- 4Click the 'Archived At' date field and enter: formatDate({{1.item.ts}} * 1000; "YYYY-MM-DDTHH:mm:ss")
- 5Click the 'Permalink' field and map '2. Permalink' from Get a Message
- 6Click 'OK'
Make canvas > Run once (bottom left)
Run a test and verify the Notion entry
Click 'Run once' at the bottom left of the Make canvas. Then go to your Slack workspace and add your chosen emoji reaction (e.g., 📌) to any message in a channel Make has access to. Within 30-90 seconds, Make should detect the event and execute all four modules. Watch the module bubbles — each one gets a green checkmark and a number indicating how many bundles were processed.
- 1Click 'Run once' in the bottom toolbar
- 2Switch to Slack and react to any message with your chosen emoji
- 3Return to Make and watch the module execution indicators
- 4Click the green checkmark bubble on the Notion module to inspect the output data
- 5Open Notion and confirm the new database entry exists with correct field values
Make canvas > Scenario toggle (bottom left) > ON
Activate the scenario
Once the test run looks correct, click the toggle switch at the bottom left of the canvas to turn the scenario ON. The toggle turns blue and the scenario status changes from 'OFF' to 'ON'. Make will now listen for the Slack webhook continuously. Check the 'History' tab after your first live run to confirm the scenario executed without errors.
- 1Confirm all modules show no red error badges
- 2Click the gray toggle switch at the bottom left — it turns blue
- 3Click 'Save' (floppy disk icon) to persist the active state
- 4Check the 'History' tab after the first real reaction to verify a successful run
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 you need conditional logic between the trigger and the Notion write — for example, routing messages from different channels into different Notion databases, or skipping messages under 20 words. Make's visual Router module handles that in 5 minutes without writing code. Also use Make if you need to chain the Slack user ID lookup (Get a User) before writing to Notion — Make handles multi-step sequential calls cleanly in a single scenario. The one case where you'd pick something else: if your team already lives in Zapier and this is the only automation you need, Zapier's Slack + Notion Zap gets you to the same endpoint with fewer configuration steps.
The math on cost is straightforward. Each message archive uses 4 Make operations. Make's Free tier gives you 1,000 ops/month — that covers 250 archived messages/month at zero cost. If your team archives 50 messages/week (200/month), you stay free. At 100/week (400/month, 1,600 ops), you need the Core plan at $9/month. Zapier's equivalent would be a single-step Zap but you still need a multi-step Zap to do the user ID lookup, which requires Zapier's Starter plan at $19.99/month. Make is $10.99 cheaper per month for the same functionality once you're past the free tier.
Zapier's Slack integration has one edge here: its 'New Starred Message' trigger still works without emoji reactions, which some teams prefer as a simpler UX. n8n lets you self-host the entire thing, which matters if you're in a regulated industry where messages can't pass through Make's EU/US servers — n8n's Slack node also handles thread fetching more gracefully with its built-in loop nodes. Power Automate has a native Slack connector but it's shallow: no reaction-based trigger, only new messages in a channel, which is too noisy for this use case. Pipedream's Slack source events are faster (sub-30 second latency vs Make's 60-90 seconds) and free for low volume. Make still wins on the visual debugging experience — when something breaks, clicking a module's execution bubble to see exactly what Slack returned is faster to troubleshoot than reading JSON logs in Pipedream or n8n.
Three things you'll hit after setup. First: Slack's permalink field from the Watch Reactions trigger points to the reaction event, not the message itself — you need the permalink from the 'Get a Message' output, which is different. Map the wrong one and your Notion links will 404. Second: Notion's API rate limit is 3 requests per second. If you somehow batch-trigger this scenario rapidly (e.g., someone adds 10 reactions in 5 seconds), Make will queue the runs but Notion will return 429 errors on some of them — enable Make's built-in retry on the Notion module. Third: Slack message text uses its own markdown dialect where bold is *text* not text and links come as <https://url|label>. Notion won't render these correctly in its Title or rich text fields unless you strip or convert them first — the formula in the pro tip above handles the most common cases.
Ideas for what to build next
- →Add Slack confirmation reply — After the Notion module succeeds, add a Slack 'Reply to a Thread' module that posts the Notion page URL back into the original message's thread. The person who reacted gets instant confirmation the message was saved, with a direct link.
- →Tag entries by channel category — Add a Make Router after the Slack trigger to branch by channel name. Messages from #product-decisions get tagged 'Product' in Notion, from #engineering-standups get tagged 'Engineering', etc. Keeps your archive database filterable without manual tagging.
- →Fetch and append thread replies — Add a Slack 'Get a Thread' module after Get a Message to pull all replies in the conversation thread. Concatenate them with the parent message text and write the full discussion into a Notion 'Content' rich text property, not just the single flagged message.
Related guides
How to Archive Slack Messages to Notion with Pipedream
~15 min setup
How to Archive Slack Messages to Notion with Power Automate
~15 min setup
How to Archive Slack Messages to Notion with n8n
~20 min setup
How to Archive Slack Messages to Notion 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