

How to Send Notion Database Updates to Slack with Zapier
Zapier polls your Notion database for new or updated rows and posts a formatted message to a Slack channel automatically.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small teams (under 20 people) who want Slack alerts on new Notion tasks or status changes without writing any code.
Not ideal for
Teams needing sub-minute alerts — Zapier polls Notion every 1-15 minutes, so time-sensitive triggers belong in Make or a custom webhook setup.
Sync type
scheduledUse case type
notificationReal-World Example
A 12-person product team tracks feature requests in a Notion database. Every time a designer marks a row 'Ready for Dev', the engineering Slack channel gets a message with the task name, assignee, and priority. Before this Zap, engineers checked Notion manually once or twice a day and work sat idle for hours between handoffs.
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 | ||
| Status | ||
| Notion Page URL | ||
5 optional fields▸ show
| Assignee Name | |
| Priority | |
| Due Date | |
| Last Edited Time | |
| Created Time |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap
Log into zapier.com and click the orange 'Create Zap' button in the left sidebar. You land on the Zap editor, which shows a two-block canvas: Trigger on the left, Action on the right. Give your Zap a name at the top — something like 'Notion DB → Slack #dev-updates' — so it's identifiable later in your dashboard. You'll configure the trigger first.
- 1Log into zapier.com
- 2Click 'Create Zap' in the left sidebar
- 3Click the name field at the top and type a descriptive name
- 4Click the Trigger block to begin configuration
Zap Editor > Trigger > App & Event > Search 'Notion'
Set Notion as the trigger app
In the trigger search bar, type 'Notion' and select it from the results. Zapier will show you a list of available Notion triggers. For new database rows, choose 'New Database Item'. For updates to existing rows (like a status change), choose 'Updated Database Item' — pick only one and stay consistent. Both triggers work via polling, so Zapier checks Notion every 1-15 minutes depending on your plan.
- 1Type 'Notion' in the trigger app search bar
- 2Click 'Notion' in the results
- 3Click 'New Database Item' for new rows OR 'Updated Database Item' for status changes
- 4Click 'Continue'
Zap Editor > Trigger > Account > Sign in to Notion
Connect your Notion account
Click 'Sign in to Notion'. A popup opens asking you to authorize Zapier. Notion requires you to explicitly select which pages or databases Zapier can access — it does not grant blanket access to your entire workspace. On the Notion authorization screen, click 'Select pages' and check the specific database you want to monitor. If you skip this, Zapier won't see the database in the next step.
- 1Click 'Sign in to Notion'
- 2In the Notion authorization popup, click 'Select pages'
- 3Check the box next to your target database
- 4Click 'Allow access'
- 5Close the popup and confirm the account appears in Zapier
Zap Editor > Trigger > Configure > Database ID
Select your Notion database
Under 'Configure', click the 'Database ID' dropdown. Zapier lists all databases your Notion account has shared with it. Find and select the database you want to monitor — for example, 'Feature Requests' or 'Sprint Board'. If you're using the 'Updated Database Item' trigger, you'll also see a 'Filter by Property' option where you can narrow alerts to only rows where a specific property changed, like Status.
- 1Click the 'Database ID' dropdown
- 2Select your target database from the list
- 3Optional: Click 'Filter by Property' and select a property like 'Status' to restrict which updates fire the trigger
- 4Click 'Continue'
Zap Editor > Trigger > Test > Test trigger
Test the Notion trigger
Click 'Test trigger'. Zapier fetches the three most recent rows from your Notion database and displays the raw field data. Look through the returned sample — you'll see every property your database has, including internal Notion IDs for relation and person fields. Make a note of which fields you want to include in your Slack message: title, status, assignee, priority, due date, and URL are the most common picks.
- 1Click 'Test trigger'
- 2Review the returned sample data
- 3Identify the fields you'll use in the Slack message
- 4Click 'Continue with selected record'
Zap Editor > Action > App & Event > Search 'Slack'
Add Slack as the action app
Click the Action block on the canvas. Search for 'Slack' and select it. For the event, choose 'Send Channel Message' — this posts to a public or private channel. If you want to DM a specific person instead, choose 'Send Direct Message', but channel messages work better for team visibility. Click 'Continue' to move to account connection.
- 1Click the Action block
- 2Type 'Slack' in the search bar and select it
- 3Choose 'Send Channel Message' as the action event
- 4Click 'Continue'
Zap Editor > Action > Account > Sign in to Slack
Connect your Slack workspace
Click 'Sign in to Slack'. A popup opens asking which Slack workspace to authorize. Select the correct workspace from the dropdown — if you're in multiple workspaces, this is easy to get wrong. Zapier requests permission to post messages and read channel lists. After authorization, your workspace name appears in the Account field.
- 1Click 'Sign in to Slack'
- 2Select the correct workspace in the Slack authorization popup
- 3Click 'Allow'
- 4Confirm the workspace name appears in Zapier's Account field
Zap Editor > Action > Configure > Channel + Message Text
Configure the Slack message
Select the Slack channel from the Channel dropdown — type a # to filter by name. Then build your message in the 'Message Text' field using dynamic data from the Notion trigger. Click inside the field and use the '+' button to insert Notion fields. A clear message format: start with a bold title using Slack markdown (*Title*), then list status, assignee, and a direct URL to the Notion page. Keep it under 4 lines so it's scannable in Slack.
- 1Click the Channel dropdown and select your target Slack channel (e.g. #dev-updates)
- 2Click inside the Message Text field
- 3Click '+' to insert dynamic fields from Notion — start with the page title
- 4Build a multi-line message using Slack markdown: *Title*, Status, Assignee, URL
- 5Set 'Send as Bot' to Yes and give it a name like 'Notion Bot'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Between Trigger and Action > + > Filter
Add a filter for status changes (optional but recommended)
If you're using the 'Updated Database Item' trigger and only want notifications when the Status property changes to a specific value (like 'In Review'), add a Filter step between trigger and action. Click the '+' icon between the two blocks and select 'Filter'. Set the condition: 'Status' (from Notion) 'Exactly matches' 'In Review'. This prevents Slack from getting flooded every time any field on any row changes.
- 1Click the '+' icon between the Notion trigger block and the Slack action block
- 2Select 'Filter'
- 3Set Field to your Status property from Notion
- 4Set Condition to 'Exactly matches'
- 5Type the status value you want to trigger on (e.g. 'In Review')
- 6Click 'Continue'
Zap Editor > Action > Test > Test action
Test the full Zap
Click 'Test action'. Zapier uses the sample Notion row from Step 5 and sends a real message to your Slack channel. Open Slack and verify the message looks correct — check that the title, status, and URL all resolved properly and aren't showing raw Notion IDs. If the format looks off, go back to Step 8 and adjust the message template before publishing.
- 1Click 'Test action'
- 2Open your Slack channel to see the test message
- 3Verify all dynamic fields resolved to readable values
- 4If anything looks wrong, click 'Back' and edit the message template
Zap Editor > Publish Zap
Publish the Zap
Click 'Publish Zap' in the top right. The Zap goes live and Zapier begins polling your Notion database. On the free plan, polling runs every 15 minutes. On the Starter plan ($19.99/month), it drops to every 2 minutes. On Professional ($49/month), it's every minute. After publishing, go to your Zap's history page and wait for the first poll to confirm it's running cleanly.
- 1Click 'Publish Zap' in the top right corner
- 2Confirm the Zap status shows 'On' in your dashboard
- 3Click 'Zap History' to monitor the first few runs
Paste this into a 'Code by Zapier' step (Python) placed between the Notion trigger and the Slack action. It formats the due date into a readable string, builds a clean Slack message with conditional priority emoji, and handles blank fields so your message never shows 'undefined'. In Zapier, add a Code step, choose 'Run Python', and map the Notion fields as input variables named title, status, assignee, priority, due_date, and url.
JavaScript — Code Step# Input variables (set these in the 'Input Data' section of Code by Zapier):▸ Show code
# Input variables (set these in the 'Input Data' section of Code by Zapier): # title, status, assignee, priority, due_date, url import datetime
... expand to see full code
# Input variables (set these in the 'Input Data' section of Code by Zapier):
# title, status, assignee, priority, due_date, url
import datetime
def format_date(raw_date):
if not raw_date:
return 'No due date'
try:
dt = datetime.datetime.strptime(raw_date[:10], '%Y-%m-%d')
return dt.strftime('%b %d, %Y')
except ValueError:
return raw_date
def priority_emoji(p):
mapping = {
'Critical': '🔴',
'High': '🟠',
'Medium': '🟡',
'Low': '🟢'
}
return mapping.get(p, '⚪')
title = input_data.get('title') or 'Untitled'
status = input_data.get('status') or 'Unknown status'
assignee = input_data.get('assignee') or 'Unassigned'
priority = input_data.get('priority') or ''
due_date = format_date(input_data.get('due_date', ''))
url = input_data.get('url') or ''
emoji = priority_emoji(priority)
priority_line = f'{emoji} {priority}' if priority else '⚪ No priority'
message = (
f'*{title}* → {status}\n'
f'Assigned to: {assignee} | {priority_line} | Due: {due_date}\n'
f'{url}'
)
output = [{'message': message}]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, everyone shares one Notion workspace, and you need something live in under 20 minutes. Zapier's guided builder handles the Notion OAuth scoping visually — you click checkboxes to grant access to specific databases, which avoids the permission confusion you get building this manually. The Filter step UI is also genuinely good for setting up status-based routing without any code. The one scenario where you'd skip Zapier: if you need sub-90-second notification latency. Zapier polls Notion on a schedule, and even the Professional plan at $49/month only gets you ~1-minute intervals. Make's polling is comparable in speed but cheaper at scale.
The cost math is simple. Each Notion update that passes your filter and posts to Slack uses one Zapier task. A team with 300 status changes per month needs 300 tasks. Zapier's free plan gives you 100 tasks/month — not enough. The Starter plan ($19.99/month) includes 750 tasks and 2-minute polling. Make's equivalent plan is $9/month for 10,000 operations with similar polling speeds. For this specific workflow, Make costs less than half as much at the same volume. Zapier is worth the premium only if your team values the no-configuration setup experience.
Make handles conditional Slack message formatting better — you can branch on multiple Notion property values in a single scenario without paying per-path like Zapier does with its Paths feature (which requires the Professional plan). n8n lets you self-host the entire workflow for free and supports Notion webhooks via a custom integration, giving you near-instant triggers — the trade-off is setup time measured in hours, not minutes. Power Automate has a Notion connector but it's a premium connector requiring a $15/user/month add-on, making it the most expensive option here for no functional gain. Pipedream can poll Notion every 15 seconds on its free tier using a scheduled source, which beats every Zapier plan on speed — but you'll write JavaScript to build the Slack payload. Zapier is still the right call when the person setting this up isn't the person who'll maintain it, because anyone on the team can read and edit a Zap without understanding code or scenario logic.
Three things you'll hit after launch. First, Notion's API treats any background edit — a linked database syncing, a formula recalculating, a comment being added — as an update to last_edited_time. Your Zap will fire on these invisible changes unless you lock it down with a Filter on a specific property value. Second, due dates come out of Notion in ISO 8601 format (2024-04-10T00:00:00.000Z). If you drop that directly into a Slack message, it's ugly and confusing. Add a Zapier Formatter step using 'Format Date' to convert it to something readable before it hits Slack. Third, if your Notion database uses relation or person properties, the raw API value is a UUID — not a name. The Zapier field picker exposes sub-properties, but you have to manually expand the field and select 'Name' yourself. It's not obvious the first time, and missing it means your Slack messages show a 36-character ID where a person's name should be.
Ideas for what to build next
- →Add a daily digest instead of per-update pings — Replace the instant Slack message with a scheduled Zap that runs once per day and posts a summary of all Notion rows updated in the last 24 hours. This cuts Slack noise significantly for busy databases.
- →Route alerts to different channels by property — Add a Zapier Paths step after the Notion trigger to send 'Critical' priority items to #incidents, 'High' to #dev-updates, and everything else to #general-tasks. Each path has its own Slack action with channel-appropriate messaging.
- →Create a Notion row from a Slack message — Build a reverse Zap triggered by a Slack slash command or emoji reaction that creates a new Notion database row. This closes the loop so teams can capture tasks directly from Slack without switching apps.
Related guides
How to Send Notion Database Alerts to Slack with Pipedream
~15 min setup
How to Send Notion Database Alerts to Slack with Power Automate
~15 min setup
How to Send Notion Database Updates to Slack with n8n
~20 min setup
How to Send Notion Database Alerts to Slack 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