

How to Archive Slack Messages to Notion with Zapier
When a Slack message is starred or posted with a specific emoji reaction, Zapier instantly creates a new Notion page in a designated 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 who want to preserve specific Slack decisions or discussions in Notion without copy-pasting manually.
Not ideal for
Teams needing to archive entire channel history in bulk — use Slack's export feature or a dedicated archival tool instead.
Sync type
real-timeUse case type
backupReal-World Example
A 12-person product team at a B2B SaaS company uses this to capture decisions made in #product-discussion. Someone reacts with a 📌 emoji and within 90 seconds the message, author, and channel appear as a new page under their 'Product Decisions' Notion database. Before this, the team lead was manually copying Slack messages into Notion every Friday — and still missing about a third of the decisions made mid-week.
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
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Page Title (Message Text) | ||
| Archive Date | ||
| Author (User Name) | ||
| Channel Name | ||
| Source URL (Permalink) | ||
3 optional fields▸ show
| Full Message Body (Content Block) | |
| Reacted By (User Name) | |
| Tags / Category |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap > Trigger
Create a new Zap and connect Slack
Log into zapier.com and click the orange 'Create Zap' button in the top left. You'll land on the Zap editor. In the trigger panel on the left, type 'Slack' into the search field and select it from the list. Zapier will show you a list of available Slack triggers — you're choosing the event that will fire every time a message gets a specific emoji reaction. Make sure you're signed into the correct Slack workspace in the browser tab you're using.
- 1Click the orange 'Create Zap' button in the top-left of the dashboard
- 2In the trigger search box, type 'Slack' and select it
- 3Under 'Event', select 'New Reaction Added'
- 4Click 'Continue'
Zap Editor > Trigger > Slack > Choose Account
Authenticate your Slack account
Click 'Sign in to Slack' in the account connection step. A popup will open asking you to authorize Zapier. Select the correct workspace from the dropdown — if you manage multiple workspaces, this is where mistakes happen. Grant the permissions Zapier requests, which include reading messages and reactions. Once authorized, you'll return to the Zap editor and see your workspace name listed under the account field.
- 1Click 'Sign in to Slack'
- 2In the popup, select your correct Slack workspace from the dropdown
- 3Click 'Allow' to grant Zapier the requested permissions
- 4Confirm the connected account appears in the 'Choose Account' dropdown
Zap Editor > Trigger > Slack > Configure > Reaction / Channel
Configure the Slack trigger settings
With 'New Reaction Added' selected, you'll now configure which reaction and which channel to watch. In the 'Reaction' field, type the emoji name without colons — for example, type 'pushpin' to watch for 📌 reactions. In the 'Channel' field, select the specific channel from the dropdown (e.g., #product-discussion) or leave it blank to watch all channels. Scoping it to specific channels prevents noise from off-topic messages being archived.
- 1In the 'Reaction' field, type the emoji name (e.g., 'pushpin') — no colons
- 2Click the 'Channel' dropdown and select your target channel
- 3Leave 'User' blank unless you only want reactions from specific people
- 4Click 'Continue'
Zap Editor > Trigger > Test Trigger
Test the Slack trigger
Click 'Test Trigger' to pull in a real sample event from Slack. Zapier will search for a recent 📌 reaction in the channel you specified. If your channel has no recent reactions with that emoji, you'll need to go into Slack, post a test message, react to it with 📌, then come back and click 'Test Trigger' again. The sample data Zapier loads will include the message text, the user who reacted, the channel ID, and a Unix timestamp — you'll map all of these to Notion in later steps.
- 1Click 'Test Trigger'
- 2If no data loads, go to Slack and react to a message with your chosen emoji
- 3Return to Zapier and click 'Test Trigger' again
- 4Confirm you can see 'Message Text', 'User', 'Channel', and 'Timestamp' in the sample data
Zap Editor > + Action > Formatter by Zapier > Date / Time > Format
Add a Formatter step to clean the timestamp
Click the '+' button below the trigger step to add a new action. Search for 'Formatter by Zapier' and select it. Choose the 'Date / Time' transform, then pick 'Format' as the action. In the 'Input' field, map the Unix timestamp from the Slack trigger. Set 'To Format' to 'YYYY-MM-DD HH:mm' and set 'From Format' to 'unix'. This converts the raw Unix timestamp into a human-readable date string that Notion will accept as a date property.
- 1Click the '+' button between trigger and any future action
- 2Search for 'Formatter by Zapier' and select it
- 3Under 'Event', choose 'Date / Time'
- 4Set 'Transform' to 'Format', map the Slack timestamp to 'Input', set From Format to 'Unix Timestamp' and To Format to 'YYYY-MM-DD HH:mm'
- 5Click 'Continue' and run the test to confirm a readable date appears
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}This Code by Zapier step handles two problems in one: it truncates the Slack message to 150 characters for a clean Notion page title, and it builds a formatted page body with author, channel, and date context. Paste this as a 'Code by Zapier' action step between your Slack trigger and the Notion action, then map 'notionTitle' to Notion's Name field and 'notionBody' to the Content field.
JavaScript — Code Step// Zapier Code by Zapier — Step: Format and truncate Slack message for Notion▸ Show code
// Zapier Code by Zapier — Step: Format and truncate Slack message for Notion // Place this as a 'Code by Zapier' step between the Slack trigger and Notion action. // Use when: message text may exceed 2000 chars (Notion title limit), or you want
... expand to see full code
// Zapier Code by Zapier — Step: Format and truncate Slack message for Notion
// Place this as a 'Code by Zapier' step between the Slack trigger and Notion action.
// Use when: message text may exceed 2000 chars (Notion title limit), or you want
// to auto-generate a clean summary title separate from the full body.
const rawText = inputData.messageText || '';
const author = inputData.userName || 'Unknown';
const channel = inputData.channelName || 'unknown-channel';
const unixTs = parseInt(inputData.timestamp, 10);
// Convert Unix seconds to ISO date string
const archiveDate = new Date(unixTs * 1000).toISOString().slice(0, 16).replace('T', ' ');
// Truncate message to 150 chars for the Notion page title
const truncatedTitle = rawText.length > 150
? rawText.slice(0, 147) + '...'
: rawText;
// Build the full page body content
const pageBody = [
`Archived from #${channel} on ${archiveDate}`,
`Author: @${author}`,
'',
rawText,
].join('\n');
output = [
{
notionTitle: truncatedTitle,
notionBody: pageBody,
formattedDate: archiveDate,
authorLabel: `@${author}`,
channelLabel: `#${channel}`,
}
];Zap Editor > + Action > Notion > Create Database Item > Choose Account
Add the Notion action and authenticate
Click '+' below the Formatter step to add the next action. Search for 'Notion' and select it. Under 'Event', choose 'Create Database Item' — this creates a new page/row inside a Notion database, which is what you want for a structured archive. Click 'Sign in to Notion' and authorize Zapier. During authorization, Notion will ask which pages and databases Zapier can access — make sure you select your archive database here, otherwise it won't appear in the next step.
- 1Click '+' and search for 'Notion'
- 2Select 'Create Database Item' as the event
- 3Click 'Sign in to Notion'
- 4In the Notion authorization popup, click the checkbox next to your target archive database
- 5Click 'Allow Access' and confirm your account appears in Zapier
Zap Editor > Notion Action > Configure > Database ID
Select your Notion archive database
In the Notion action configuration panel, click the 'Database ID' dropdown. Your authorized Notion databases will appear by name. Select the database you've designated for Slack message archival (e.g., 'Team Knowledge Archive'). Zapier will then load the properties of that database automatically — things like Name, Date, Tags, and any custom properties you've set up. This is where field mapping happens in the next step.
- 1Click the 'Database ID' dropdown
- 2Select your archive database from the list by name
- 3Wait for Zapier to load the database properties (takes 3-5 seconds)
- 4Confirm you can see your database's property fields appear below
Zap Editor > Notion Action > Configure > Field Mapping
Map Slack fields to Notion properties
Now fill in each Notion property by mapping data from the Slack trigger and Formatter step. Click into the 'Name' field and insert the Slack 'Message Text' variable — this becomes the page title. Map the Formatter output date to your 'Date' property. Map Slack's 'Channel Name' (not ID) to a text property called 'Channel'. Map 'User Name' to an 'Author' text field. If you have a 'Message URL' property, map the Slack permalink here so the team can jump back to the original conversation. Use the variable picker (the purple lightning bolt icon) to insert dynamic values.
- 1Click into the 'Name' field and select 'Message Text' from the Slack trigger via the variable picker
- 2Click into your 'Date' field and select the formatted date from the Formatter step
- 3Map 'Channel Name' from Slack to your Notion 'Channel' property
- 4Map 'User Name' from Slack to your Notion 'Author' property
- 5Map 'Message Permalink' from Slack to your Notion 'Source URL' property
Zap Editor > Notion Action > Configure > Content
Add content to the Notion page body
Below the database property fields, you'll see a 'Content' section where you can add text that goes into the body of the Notion page — not just the properties. Click into 'Content' and map the full Slack 'Message Text' here as well. This way, the page title can be truncated or descriptive, while the body holds the complete message. You can also add static text like 'Archived from Slack on' followed by the formatted date variable to give the page context at a glance.
- 1Scroll down to the 'Content' field in the Notion action
- 2Type 'Archived from Slack on ' and then insert the formatted date variable
- 3Add a line break, then insert the full Slack 'Message Text' variable
- 4Optionally add another line: 'Original message: ' followed by the Slack permalink
Zap Editor > Notion Action > Test Action
Test the full Zap end-to-end
Click 'Test Action' at the bottom of the Notion configuration panel. Zapier will fire a live request to Notion using the sample data from your Slack trigger test. Within a few seconds, a new page should appear in your Notion archive database. Go to Notion and open that database to confirm the page was created with the correct title, date, author, channel, and body content. If any fields are blank or wrong, go back to step 8 and re-check your variable mappings.
- 1Click 'Test Action' at the bottom of the Notion configuration step
- 2Wait for the success message in Zapier (usually 3-8 seconds)
- 3Open your Notion database in a separate tab
- 4Confirm the new page exists with correct title, date, channel, author, and body text
- 5Delete the test page from Notion if you don't want it cluttering your archive
Zap Editor > Zap Name (top pencil icon) > Publish
Name and publish the Zap
Click the pencil icon at the top of the Zap editor to give it a descriptive name like 'Slack 📌 Reactions → Notion Archive'. Then click the 'Publish' button in the top right corner. Zapier will confirm the Zap is live. From this point on, every time someone reacts with your chosen emoji in the configured channel, a Notion page is created within 1-2 minutes. Go back into Slack and test it with a real message to confirm the live Zap fires correctly.
- 1Click the pencil icon next to 'Untitled Zap' at the top
- 2Type a descriptive name (e.g., 'Slack 📌 → Notion Archive')
- 3Click the 'Publish' button in the top-right corner
- 4Go to Slack and react to a message with your emoji to confirm the live Zap fires
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 Zapier for this if your team is non-technical and wants a working archive in under 30 minutes without writing any code. The guided Zap builder handles Slack's webhook subscription automatically — you don't touch OAuth scopes or API endpoints directly. Zapier's Formatter step also solves the Unix timestamp problem without needing a code step. If you need to archive entire threads (not just individual messages) or want conditional logic based on message content, switch to Make — its HTTP module can call Slack's conversations.replies API and handle multi-message payloads that Zapier's trigger doesn't expose.
Each archived message costs 2 tasks in Zapier: one for the Formatter step, one for the Notion action. The Slack trigger itself doesn't count. At 100 archived messages per month, that's 200 tasks — well within Zapier's Starter plan ($19.99/month, 750 tasks). At 300 archives/month you're at 600 tasks, still on Starter. If your team is archiving more than 375 messages/month, you'll hit the 750-task ceiling and need the Professional plan at $49/month. Make's equivalent setup costs $9/month and includes 10,000 operations — at the same 300 archives/month volume, Make saves you $40/month.
Make handles the thread-fetching limitation better — its Slack 'Watch Reactions' module combined with an HTTP request to conversations.replies lets you pull an entire thread into a single Notion page. n8n does this too and is free to self-host, though setup takes 45 minutes versus 8 for Zapier. Power Automate has a Slack connector but it's shallow — the 'New Reaction' trigger is missing entirely, so you'd need a workaround involving webhook parsing that defeats the simplicity argument. Pipedream gives you full Node.js access to Slack's API, making thread archival straightforward, but you need to be comfortable writing async/await code. Zapier wins on setup speed and reliability for the single-message use case — just accept its thread limitation going in.
Three things you'll hit after go-live: First, Slack's 'Message Text' field returns empty for messages that are only file uploads or link unfurls with no typed text — your Notion page will have a blank title. Add a Formatter Default Value fallback before you launch. Second, if your team archives messages aggressively (10+ per day), your Notion database will fill up fast with pages that have no tagging or structure — build the category property into the database from day one, even if the Zap sets a default value like 'Uncategorized'. Third, Notion occasionally returns a 502 error during high-traffic periods, which causes the Zap to fail silently unless you've enabled error notifications in Zapier's settings — turn those on before you consider this production-ready.
Ideas for what to build next
- →Add a Slack confirmation reply — After the Notion page is created, add a second Notion action to get the new page URL, then add a Slack action to post a threaded reply to the original message with the Notion link — so the team sees the archive happened without leaving Slack.
- →Build a weekly digest — Add a scheduled Zap that queries your Notion archive database every Monday morning and posts a summary of last week's archived messages to a Slack channel — turning the archive into a living decision log the team actually reads.
- →Add tagging by channel — Use a Zapier Paths step to automatically tag archived Notion pages with different categories depending on which Slack channel they came from — '#product-discussion' maps to 'Product Decision', '#legal' maps to 'Compliance', and so on.
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 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