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

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

scheduled

Use case type

notification

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

/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

Before You Start

Make sure you have everything ready.

Notion account with at least one database containing real rows — empty databases return no sample data during testing
Zapier account — free tier works for setup, but limits polling to every 15 minutes and 100 tasks/month
Slack workspace where you have permission to add apps and post to the target channel
Notion integration permissions: Zapier needs 'Read content' access to the specific database you're monitoring
Slack bot permissions: Zapier needs 'chat:write' and 'channels:read' scopes — these are granted automatically during OAuth

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Log into zapier.com
  2. 2Click 'Create Zap' in the left sidebar
  3. 3Click the name field at the top and type a descriptive name
  4. 4Click the Trigger block to begin configuration
What you should see: The Zap editor opens with an empty Trigger block selected and a search bar prompting you to choose an app.
2

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.

  1. 1Type 'Notion' in the trigger app search bar
  2. 2Click 'Notion' in the results
  3. 3Click 'New Database Item' for new rows OR 'Updated Database Item' for status changes
  4. 4Click 'Continue'
What you should see: You see the trigger event confirmed as either 'New Database Item' or 'Updated Database Item' with a 'Connect Notion' prompt below.
Common mistake — You cannot combine both triggers in a single Zap. If you need alerts for both new rows AND updates, build two separate Zaps — one per trigger type.
Zapier
+
click +
search apps
Slack
SL
Slack
Set Notion as the trigger app
Slack
SL
module added
3

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.

  1. 1Click 'Sign in to Notion'
  2. 2In the Notion authorization popup, click 'Select pages'
  3. 3Check the box next to your target database
  4. 4Click 'Allow access'
  5. 5Close the popup and confirm the account appears in Zapier
What you should see: Your Notion workspace name appears in the Account dropdown with a green checkmark.
Common mistake — Zapier only sees databases you explicitly granted access to during OAuth. If your database is missing in the next step, come back here, click 'Reconnect', and re-authorize with the correct database checked.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
4

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.

  1. 1Click the 'Database ID' dropdown
  2. 2Select your target database from the list
  3. 3Optional: Click 'Filter by Property' and select a property like 'Status' to restrict which updates fire the trigger
  4. 4Click 'Continue'
What you should see: The database name appears selected in the Database ID field. If you set a filter, it shows the property name below.
Common mistake — Notion inline databases (databases embedded inside a page rather than created as standalone) sometimes don't appear in this list. Move the database to a top-level page in Notion and re-authorize to fix this.
5

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.

  1. 1Click 'Test trigger'
  2. 2Review the returned sample data
  3. 3Identify the fields you'll use in the Slack message
  4. 4Click 'Continue with selected record'
What you should see: Zapier shows a table of field names and values pulled from your Notion database. You should see at least 3 sample rows to choose from.
Common mistake — Person and relation fields return a Notion internal ID string like '9a3f...', not a readable name. Map the 'Name' sub-property of that field instead — expand the field in the sample data panel to find it.
Zapier
▶ Turn on & test
executed
Slack
Notion
Notion
🔔 notification
received
6

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.

  1. 1Click the Action block
  2. 2Type 'Slack' in the search bar and select it
  3. 3Choose 'Send Channel Message' as the action event
  4. 4Click 'Continue'
What you should see: The Slack action block shows 'Send Channel Message' as the selected event and prompts you to connect an account.
7

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.

  1. 1Click 'Sign in to Slack'
  2. 2Select the correct workspace in the Slack authorization popup
  3. 3Click 'Allow'
  4. 4Confirm the workspace name appears in Zapier's Account field
What you should see: Your Slack workspace name shows in the Account dropdown with a green checkmark.
Common mistake — If you're a Slack admin and your workspace has restricted app installs, Zapier may need admin approval before it can post. Check your Slack admin panel under Manage > Apps if authorization appears to succeed but messages don't send.
8

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.

  1. 1Click the Channel dropdown and select your target Slack channel (e.g. #dev-updates)
  2. 2Click inside the Message Text field
  3. 3Click '+' to insert dynamic fields from Notion — start with the page title
  4. 4Build a multi-line message using Slack markdown: *Title*, Status, Assignee, URL
  5. 5Set 'Send as Bot' to Yes and give it a name like 'Notion Bot'
What you should see: The Message Text field shows a mix of static text and blue dynamic tokens representing Notion fields.
Common mistake — Slack's message field in Zapier does not support Block Kit formatting — you get plain mrkdwn only. If you want buttons or rich cards, you need to use Slack's 'Send Message with Blocks' action instead, which requires JSON.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

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.

  1. 1Click the '+' icon between the Notion trigger block and the Slack action block
  2. 2Select 'Filter'
  3. 3Set Field to your Status property from Notion
  4. 4Set Condition to 'Exactly matches'
  5. 5Type the status value you want to trigger on (e.g. 'In Review')
  6. 6Click 'Continue'
What you should see: A gray Filter block appears between the trigger and action. It shows the condition logic you configured.
Common mistake — Notion property values are case-sensitive in Zapier filters. 'In Review' and 'in review' are treated as different values. Check your Notion database to copy the exact casing.
Slack
SL
trigger
filter
Status
matches criteria?
yes — passes through
no — skipped
Notion
NO
notified
10

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.

  1. 1Click 'Test action'
  2. 2Open your Slack channel to see the test message
  3. 3Verify all dynamic fields resolved to readable values
  4. 4If anything looks wrong, click 'Back' and edit the message template
What you should see: A Slack message appears in your target channel with the Notion row's real data — title, status, assignee, and a clickable Notion URL.
11

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.

  1. 1Click 'Publish Zap' in the top right corner
  2. 2Confirm the Zap status shows 'On' in your dashboard
  3. 3Click 'Zap History' to monitor the first few runs
What you should see: Your Zap appears in the dashboard with a green 'On' toggle. The Zap History tab shows a pending or successful run within your plan's polling interval.

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

VerdictWhy Zapier for this workflow

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.

Cost

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.

Tradeoffs

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 pingsReplace 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 propertyAdd 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 messageBuild 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

Was this guide helpful?
Slack + Notion overviewZapier profile →