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

How to Send Notion Database Alerts to Slack with Make

Polls a Notion database on a schedule and sends a formatted Slack message whenever a new item is added or an existing item is updated.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Project teams managing work in Notion who need the rest of the team informed in Slack without anyone manually posting updates.

Not ideal for

Teams that need sub-30-second alert latency — Notion has no native webhook for database changes, so all approaches poll on a schedule.

Sync type

scheduled

Use case type

notification

Real-World Example

💡

A 12-person product team tracks feature requests in a Notion database. Before this automation, designers and engineers checked the database manually a few times a day and regularly missed new entries or status changes for 4-6 hours. Now Make polls every 5 minutes and posts a message to #product-updates in Slack the moment a row is added or its Status property changes — no manual checks required.

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.

Notion account with admin or editor access to the database you want to monitor — viewer access is not enough to authorize Make via OAuth
Notion integration permissions: Make needs 'Read content' scope on the target database, granted during the OAuth step
Slack account with permission to post to the target channel — if it is a private channel, you must be a member before authorizing Make
Slack OAuth scopes required: chat:write and channels:read (or groups:read for private channels)

Optional

Make account with at least the Core plan for 5-minute polling intervals (free tier is limited to 15-minute minimum)

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Record Title
Created Time
Last Edited Time
Page URL
Slack Channel Target
5 optional fields▸ show
Status
Created By (name)
Assignee
Priority
Due Date

Step-by-Step Setup

1

Make Dashboard > Scenarios > Create a new scenario

Create a new Make scenario

Log in to Make at make.com. Click the blue 'Create a new scenario' button in the top right of the Scenarios dashboard. You will land on the visual editor — a blank canvas with a large circle in the center. This is where you will place your trigger module. Do not click the clock icon yet; that controls scheduling and you will set it last.

  1. 1Log in at make.com
  2. 2Click 'Create a new scenario' in the top right
  3. 3When prompted to choose an app, type 'Notion' in the search box
  4. 4Select 'Notion' from the results
What you should see: You should see the Notion module list appear on the right side of the screen, showing all available triggers and actions.
Common mistake — Make auto-saves scenarios as drafts. If you close the tab before activating, the scenario will still exist but won't run — you have to manually toggle it on in the final step.
2

Scenario Editor > Notion > Watch Database Items

Configure the Notion trigger

From the Notion module list, select 'Watch Database Items' — this is the polling trigger that checks for new and updated rows. You will be prompted to connect your Notion account if you haven't already. Make uses OAuth, so clicking 'Add' opens a Notion authorization window where you select which pages and databases to share with Make. Only databases you explicitly share here will be accessible.

  1. 1Select 'Watch Database Items' from the Notion trigger list
  2. 2Click 'Add' next to the Connection field to authenticate
  3. 3In the Notion OAuth window, click 'Select pages' and choose the workspace databases you want to monitor
  4. 4Click 'Allow access' to complete authentication
  5. 5Return to Make — the Connection field should now show your account name
What you should see: The Connection field shows your Notion account name in blue. A green checkmark appears next to it confirming the connection is active.
Common mistake — Notion's OAuth is database-specific. If you connect Make now but later create a new database you want to monitor, you must return to Settings > Connected apps > Notion in Make and re-authorize to grant access to the new database.
Make
+
click +
search apps
Slack
SL
Slack
Configure the Notion trigger
Slack
SL
module added
3

Notion Trigger Module > Database ID > Watch > Limit

Select your target database

With the connection confirmed, the 'Database ID' field will now show a dropdown of every Notion database you granted access to. Select the specific database you want to monitor. Below that, set 'Watch' to 'New and Updated Items' so the trigger fires on both new rows and edits to existing ones. The 'Limit' field controls how many records Make fetches per polling cycle — set this to 10 unless your database receives extremely high traffic.

  1. 1Click the 'Database ID' dropdown and select your target database
  2. 2Set 'Watch' to 'New and Updated Items'
  3. 3Set 'Limit' to 10
  4. 4Click 'OK' to save the module configuration
What you should see: The Notion trigger module on the canvas shows the name of your selected database beneath the Notion logo.
4

Scenario Editor > Run once (bottom toolbar)

Run the trigger once to load sample data

Before adding the Slack module, you need Make to pull in a sample record from Notion so you can map real fields later. Click 'Run once' at the bottom left of the scenario editor. Make will execute one polling cycle and pull the most recent item from your database. You should see a small bubble appear on the Notion module showing how many records were returned. Click that bubble to inspect the data structure.

  1. 1Click the 'Run once' button in the bottom toolbar
  2. 2Wait 5-10 seconds for Make to poll Notion
  3. 3Click the number bubble that appears on the Notion module
  4. 4Inspect the output to confirm your database fields are visible (title, status, assignee, etc.)
What you should see: You see a panel showing the raw Notion record with all properties listed — Title, Status, Assignee, Created time, Last edited time, and any custom fields you have added to your database.
Common mistake — If the bubble shows '0 records', your database has no items yet. Add a test row directly in Notion, then click 'Run once' again. Make will not pull records that existed before the first run unless you manually set the 'Since' date parameter.
Make
▶ Run once
executed
Slack
Notion
Notion
🔔 notification
received
5

Notion Module > Right-click or wrench icon > Add a router

Add a Router for new vs. updated items

Because you are watching both new and updated items, you likely want different Slack messages for each case. Click the small wrench icon on the right edge of the Notion module and select 'Add a router'. A Router module splits the execution into two parallel paths. You will configure a filter on each path — one for new items and one for updates — so Slack receives a tailored message per event type.

  1. 1Hover over the Notion trigger module to reveal the small dots on its right edge
  2. 2Click the rightmost dot and drag to an empty area — this opens the module picker
  3. 3Type 'Router' and select the Router module
  4. 4You will see two output paths appear from the Router — Path 1 and Path 2
What you should see: The canvas shows the Notion module connected to a Router module, with two unlabeled paths extending to the right.
Common mistake — If you skip the Router and send all events to a single Slack message, you cannot distinguish new rows from edits. Teams find this confusing within a day of going live.
6

Router > Path filter icon > Condition builder

Set filters on each Router path

Click the filter icon (a small funnel) on Path 1. Set the condition: 'Created time' equals 'Last edited time'. This identifies new rows — when a record is created, both timestamps match. On Path 2, set the condition: 'Created time' does not equal 'Last edited time'. This catches updates. Label Path 1 'New Item' and Path 2 'Updated Item' by clicking the path label to rename it.

  1. 1Click the funnel icon on Path 1
  2. 2Set field to 'Created time', operator to 'Equal to', value to '{{1.created_time}}'... actually map it as: field 'Created time' equals field 'Last edited time' using the variable picker
  3. 3Click OK to save Path 1 filter
  4. 4Click the funnel icon on Path 2
  5. 5Set field to 'Created time', operator to 'Not equal to', value mapped to 'Last edited time'
  6. 6Click OK to save Path 2 filter
What you should see: Each path shows a filter label beneath it. When you run a test, records route to the correct path based on whether they are new or edited.
Common mistake — Notion timestamps are in ISO 8601 format with milliseconds. Make compares them as strings, which works correctly here — but if you ever format these timestamps with formatDate() before the filter, the comparison will break because formatting strips the milliseconds.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Notion
NO
notified
7

Path 1 > + Module > Slack > Create a Message

Add a Slack module to Path 1 (new item alert)

Click the empty circle at the end of Path 1 and search for 'Slack'. Select the 'Create a Message' action. Connect your Slack account via OAuth — Make will open a Slack authorization page where you approve access to your workspace. Once connected, set the 'Channel' field to the Slack channel where new-item alerts should go (e.g., #project-updates). Then compose the message text using Notion fields from the variable panel on the right.

  1. 1Click the empty circle at the end of Path 1
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Create a Message'
  4. 4Click 'Add' next to Connection and authorize Slack via OAuth
  5. 5Set the Channel field to your target Slack channel
  6. 6In the Text field, compose your message using the variable picker to insert Notion fields
What you should see: The Slack module appears on the canvas connected to Path 1. The configuration panel shows your chosen channel name in the Channel field.
8

Slack Module > Text field

Compose the Slack message for new items

In the Slack 'Text' field, write the message body using Make's variable picker to pull in Notion data. A clear format for new-item alerts is: the item title, who created it, the status, and a direct link back to the Notion page. Use Slack's mrkdwn syntax — *bold* for the title, and angle brackets for the URL. The Notion module outputs a 'URL' field that links directly to the record — always include this so recipients can click through.

  1. 1Click inside the 'Text' field of the Slack module
  2. 2Type '*New item added:* ' then click the variable icon and select 'Name' (or 'Title') from the Notion output
  3. 3Press Enter and type 'Status: ' then map the Status property from Notion
  4. 4Press Enter and type 'Created by: ' then map the Created by field
  5. 5Press Enter and type the URL using format: '<{{1.url}}|View in Notion>'
What you should see: The Text field shows a mix of static text and orange variable pills representing Notion fields. It should read something like: *New item added:* [Title pill] — Status: [Status pill] — <[URL pill]|View in Notion>
Common mistake — Notion's 'Created by' field returns a user object with an ID and name nested inside it. Map it as '{{1.created_by.name}}' not '{{1.created_by}}' — otherwise Slack will display '[object Object]' in your message.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

Path 2 > + Module > Slack > Create a Message

Add and configure the Slack module for Path 2 (update alert)

Repeat the same Slack module setup on Path 2, but change the message text to indicate this is an update, not a new item. Include the Last edited time field so recipients know when the change happened. If your Notion database has a 'Status' property, include it prominently — status changes are usually the reason teams want update alerts. Use a different emoji or prefix (e.g., ✏️ Updated:) so recipients can visually distinguish update messages from new-item messages at a glance.

  1. 1Click the empty circle at the end of Path 2
  2. 2Search for Slack and select 'Create a Message'
  3. 3Reuse the existing Slack connection — no need to re-authenticate
  4. 4Set the Channel field (can be same or different channel than Path 1)
  5. 5Compose the update message: '✏️ *Updated:* [Title] — Status: [Status] — Last edited: [Last edited time] — <[URL]|View in Notion>'
What you should see: The canvas now shows two Slack modules — one on each Router path. Both are connected and show green connection indicators.
Common mistake — If you want update alerts in a different Slack channel than new-item alerts, set the Channel field separately on each module. Make does not share configuration between modules even if they use the same Slack connection.
10

Scenario Editor > Clock icon (bottom left) > Scheduling panel

Set the polling schedule

Click the clock icon in the bottom left of the scenario editor — this opens the scheduling panel. Set the interval to every 5 minutes for near-real-time alerting. Make's free tier runs scenarios every 15 minutes; the Core plan ($9/month) unlocks 1-minute intervals. For most project teams, 5 minutes is the right balance between freshness and operation consumption. Each polling cycle that finds records consumes one operation per record processed.

  1. 1Click the clock icon in the bottom toolbar
  2. 2Set 'Run scenario' to 'At regular intervals'
  3. 3Set the interval to 5 minutes
  4. 4Click 'OK' to confirm
What you should see: The clock icon now shows '5m' beneath it, indicating the scenario will poll every 5 minutes when active.
Common mistake — Make counts every operation each time the scenario runs — not just when it finds a record. A 5-minute schedule means 288 runs per day. If each run processes 0 records, it still consumes 1 operation. At 500 Notion updates/month, you are spending roughly 14,400 idle operations plus 500 processing operations — factor this into your plan limit math.
11

Scenario Editor > Active toggle (top right)

Activate the scenario and verify

Toggle the 'Active' switch in the top right of the scenario editor from grey (off) to blue (on). Make will now poll Notion on your chosen schedule automatically. To verify it works end-to-end, add a new row to your Notion database and wait up to 5 minutes. Check your Slack channel for the notification. If it arrives with correctly formatted data, you are done. Check the scenario's execution history under Scenario > History to see every run and any errors.

  1. 1Click the grey 'Active' toggle in the top right — it turns blue
  2. 2Add a test row to your Notion database
  3. 3Wait up to 5 minutes
  4. 4Check your Slack channel for the notification message
  5. 5Go to Scenario > History to confirm the run completed without errors
What you should see: Your Slack channel receives a formatted message with the correct Notion row title, status, and a working link back to the record. The History tab shows a green checkmark on the most recent run.

Paste this into a Make 'Set Variable' module placed between the Notion trigger and the Router. It formats the due date, resolves the status to an emoji, and constructs a clean Slack message string — so your Slack modules just reference the {{variable}} instead of repeating the formatting logic on both paths.

JavaScript — Custom Function// Make formula — paste into a Set Variable module
▸ Show code
// Make formula — paste into a Set Variable module
// Module name: Format Notification Fields
// Variable 1: formatted_due_date

... expand to see full code

// Make formula — paste into a Set Variable module
// Module name: Format Notification Fields

// Variable 1: formatted_due_date
// Use in: Text field of Set Variable
formatDate({{1.properties.Due Date.date.start}}; "MMM D, YYYY")

// Variable 2: status_emoji
// Resolves Status text to an emoji prefix for Slack readability
if({{1.properties.Status.status.name}} = "Done"; "✅";
  if({{1.properties.Status.status.name}} = "In Progress"; "🔄";
    if({{1.properties.Status.status.name}} = "Blocked"; "🚫";
      "📋"
    )
  )
)

// Variable 3: assignee_name
// Safely extracts first assignee name or falls back to 'Unassigned'
if({{1.properties.Assignee.people[].name}} != ""; {{1.properties.Assignee.people[].name}}; "Unassigned")

// Variable 4: notion_url_safe
// Constructs URL from record ID as fallback if URL field is empty
if({{1.url}} != ""; {{1.url}}; "https://notion.so/" + replace({{1.id}}; "-"; ""))

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 builder and you want conditional routing built in from day one. The Router module makes it trivial to split new-item alerts from update alerts in a single scenario — something that requires extra steps in Zapier and custom code in n8n. Make also handles Notion's OAuth connection more reliably than Zapier does in practice: re-authorization prompts are rare, and the database picker is cleaner. The one scenario where you would pick something else: if you need true sub-60-second latency, Make's polling scheduler is not the right fit — Pipedream with a Notion webhook proxy gets you there.

Cost

The cost math here is straightforward. Each Make scenario run consumes a minimum of 1 operation, plus 1 operation per record processed. At a 5-minute schedule, that is 288 idle runs per day — about 8,640 idle operations per month before you process a single Notion update. Make's Core plan gives you 10,000 operations/month for $9. If your database sees 200 updates per month, total consumption is roughly 8,840 operations — just under the Core limit. At 500 updates/month, you hit 9,140 — still under Core. At 1,000 updates/month with heavy Router branching (each path adds an operation), you are looking at 12,000+ operations and need the Pro plan at $16/month. Zapier's equivalent would cost $19.99/month on the Starter plan, making Make the cheaper option at this volume.

Tradeoffs

Zapier's 'New Database Item in Notion' trigger is simpler to configure — no module concepts, no canvas — and is the right call for non-technical users who just need a basic new-item alert with no routing logic. n8n gives you full JavaScript control over message formatting and can parse complex Notion property types (like relation fields that Notion returns as arrays of page IDs) without workarounds — but you need to self-host or pay for n8n Cloud. Power Automate has a Notion connector, but it is a premium connector requiring a Power Automate Per User plan ($15/user/month), which makes it the most expensive option for this specific use case. Pipedream's Notion source triggers via webhook proxy and delivers near-real-time notifications — the best latency of any option — but the setup is significantly more technical. Make sits in the right spot: visual enough for a project manager to maintain, flexible enough to handle routing logic, and cheaper than Zapier at anything above 100 events/month.

Three things you will hit after the scenario goes live. First, Notion's 'Last edited time' updates on system-level touches, not just human edits — if you have any automation (Zapier, another Make scenario, an API integration) writing to the same database, every automated write triggers a Slack notification. Teams discover this fast when their #updates channel fills up with bot-generated noise. Fix it by filtering out changes where the 'Last edited by' user is a bot/integration account. Second, multi-select and relation properties from Notion come back as arrays — Make renders them as comma-separated strings by default, which looks fine until a record has five tags and the Slack message wraps awkwardly. Use Make's 'join' function to control the separator. Third, the Notion API rate limit is 3 requests per second. Make's polling trigger makes one request per run, well under the limit — but if you chain multiple Notion lookup modules to resolve relation fields, a single scenario execution can hit 5-6 API calls and you will see occasional 429 errors during peak hours. Add a 'Sleep' module set to 1 second between Notion API calls to stay safe.

Ideas for what to build next

  • Add a daily Slack digestInstead of (or alongside) instant notifications, build a second Make scenario that runs once per day, fetches all Notion items modified in the last 24 hours, and posts a single digest message to Slack. This reduces notification noise for teams that find per-item alerts too frequent.
  • Route alerts by priority or teamAdd more Router paths to send high-priority items to a separate Slack channel (e.g., #urgent-tasks) while normal items go to the standard project channel. Map a Notion 'Priority' or 'Team' select property to control the routing condition.
  • Write Slack replies back to NotionExtend the workflow by adding a second Make scenario that watches for emoji reactions on the Slack notification messages and writes a comment or status update back to the originating Notion record — creating a two-way feedback loop without leaving Slack.

Related guides

Was this guide helpful?
Slack + Notion overviewMake profile →