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

How to Share Notion Meeting Notes to Slack with Make

Monitors a Notion database for newly created meeting notes pages and automatically posts a formatted message with the page title, date, and link to a designated Slack channel.

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

Best for

Teams that store meeting notes in a Notion database and need a reliable way to alert Slack channels without relying on anyone to remember to share the link.

Not ideal for

Teams who need instant delivery under 1 minute — Make polls Notion on a schedule, so there is always a delay of at least 1–15 minutes depending on your plan.

Sync type

scheduled

Use case type

notification

Real-World Example

💡

A 20-person product team keeps all meeting notes in a shared Notion database. Before this automation, the meeting facilitator had to manually copy the Notion link and paste it into #product-updates after every meeting — which was skipped about 40% of the time. Now, whenever a new page is created in the Meeting Notes database, Make detects it within 5 minutes and posts a Slack message with the title, owner, and direct link. No one misses a meeting summary anymore.

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 an existing database containing meeting notes pages — not just a regular page. The trigger requires a database structure.
Notion integration connected to your workspace with 'Read content' permission on the target database. Create this at notion.so/my-integrations.
Slack account with permission to add apps to your workspace. You need 'Manage Apps' permission — check with your Slack admin if you are unsure.
Make account at make.com. The free tier (1,000 operations/month) is enough for teams creating fewer than 15 meeting notes per month.
At least one existing page in your Notion Meeting Notes database before setup, so the trigger has sample data to work with during Step 4.

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Page Title
Page URL
Created Time
5 optional fields▸ show
Meeting Date (custom property)
Owner / Author (Person property)
Status (Select property)
Meeting Type (Select property)
Attendees (Multi-select or Person property)

Step-by-Step Setup

1

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 will land on the visual canvas — an empty grid with a single gray circle in the center. This circle is your first module slot. Click it to open the app search dialog. Type 'Notion' and select it from the list.

  1. 1Click 'Create a new scenario' in the top right
  2. 2Click the gray circle on the empty canvas
  3. 3Type 'Notion' in the app search field
  4. 4Select 'Notion' from the results
What you should see: The Notion module list appears showing all available triggers and actions for Notion.
Common mistake — Make separates 'Notion' from legacy Notion modules. Make sure you select the current Notion app — not 'Notion (Legacy)' which appears lower in the list and lacks database filtering options.
2

Canvas > Notion module > Watch Database Items

Configure the Notion 'Watch Database Items' trigger

From the Notion module list, select 'Watch Database Items' — this is the polling trigger that checks for new pages in a specific database. Click 'Add' next to the Connection field to authenticate your Notion account. Make will redirect you to Notion's OAuth screen where you must grant access to the specific database you want to monitor. After connecting, use the Database ID dropdown to select your Meeting Notes database.

  1. 1Select 'Watch Database Items' from the Notion module list
  2. 2Click 'Add' next to the Connection field
  3. 3Complete the Notion OAuth flow and grant access to your Meeting Notes database
  4. 4Select your Meeting Notes database from the 'Database ID' dropdown
  5. 5Set 'Watch' to 'New Items Only'
What you should see: The module shows your database name in the Database ID field and 'New Items Only' is selected under the Watch setting.
Common mistake — During the Notion OAuth step, you must explicitly toggle on access to the specific database — Notion does not grant blanket workspace access. If your database is missing from the dropdown later, go back and reconnect, this time checking the correct database in Notion's permission screen.
Make
+
click +
search apps
Slack
SL
Slack
Configure the Notion 'Watch …
Slack
SL
module added
3

Canvas > Notion trigger module > Clock icon (bottom left of module)

Set the polling interval and run limit

Click the clock icon on the Notion trigger module to open the scheduling panel. This controls how often Make checks Notion for new pages. Set the interval to 5 minutes for near-real-time delivery, or 15 minutes if you are on a free plan and want to conserve operations. Under 'Maximum number of results', set this to 1 — meeting notes are typically created one at a time, and processing them individually ensures each gets its own Slack message.

  1. 1Click the clock icon on the bottom-left of the Notion module
  2. 2Set interval to '5 minutes' (or '15 minutes' on free plan)
  3. 3Back in the module settings, set 'Limit' to 1
  4. 4Click OK to save
What you should see: The trigger module now shows a small clock icon with your chosen interval, confirming the schedule is set.
Common mistake — Setting Limit higher than 1 and running on a 5-minute interval can spike your operation count fast if someone bulk-creates pages. One run per new page is the safest default.
Make
▶ Run once
executed
Slack
Notion
Notion
🔔 notification
received
4

Canvas > Run once button (bottom toolbar)

Run the trigger once to load sample data

Before building the rest of the scenario, you need live data from Notion so you can map real fields. Click 'Run once' at the bottom of the canvas. Make will poll Notion and attempt to pull the most recent page from your database. If no pages exist yet, create a test page in your Notion Meeting Notes database — add a title, a date property, and an owner — then run the trigger again. The module will show a bubble with a number indicating how many records were fetched.

  1. 1Click 'Run once' at the bottom of the canvas
  2. 2Check the Notion module bubble for a green checkmark and record count
  3. 3Click the bubble to inspect the raw output and confirm your fields are visible
What you should see: The Notion module bubble shows '1' and clicking it reveals the page's properties including title, created time, and any custom fields like meeting date or owner.
5

Canvas > + after Notion module > Tools > Set Variable

Add a Text Aggregator or Set Variable to format the message

Click the small '+' icon after the Notion trigger to add the next module. Search for 'Tools' and select the 'Set Variable' module — this is where you compose the Slack message text before sending it. In the Variable field, name it 'slack_message'. In the Variable value field, build your message string by clicking inside the field and selecting Notion output values from the mapping panel on the right. A good format is: the page title bolded, meeting date, owner name, and the Notion page URL on its own line.

  1. 1Click the '+' connector after the Notion trigger
  2. 2Search 'Tools' and select it
  3. 3Choose 'Set Variable'
  4. 4Name the variable 'slack_message'
  5. 5Build the value using Notion mapped fields: title, date property, owner, and URL
What you should see: The Set Variable module shows a preview of your composed message with real field values from the test Notion page.
Common mistake — Notion page titles come through as an array of rich text objects, not a plain string. You will need to map the first element: use `Title[].plain_text` or Make will output '[object Object]' in your Slack message.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
6

Canvas > + after Set Variable > Slack > Create a Message

Connect your Slack account

Click the '+' after the Set Variable module and search for 'Slack'. Select 'Create a Message'. Click 'Add' next to the Connection field. Make will open a Slack OAuth window — sign in with the Slack account that has permission to post to your target channel. After authenticating, you will be returned to Make with the connection shown as active. Select your workspace if prompted.

  1. 1Click '+' and search for 'Slack'
  2. 2Select 'Create a Message'
  3. 3Click 'Add' next to Connection
  4. 4Complete the Slack OAuth flow
  5. 5Confirm your workspace name appears in the Connection field
What you should see: The Slack module shows your workspace name in the Connection field with a green dot confirming the connection is live.
Common mistake — If you are posting to a private Slack channel, the bot must be manually invited to that channel first. Go to the channel in Slack, type `/invite @Make`, and confirm. Otherwise the scenario will run but Slack returns a 'not_in_channel' error silently.
Make settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
7

Canvas > Slack module > Create a Message settings

Configure the Slack message module

In the Slack 'Create a Message' module, set the Channel field by clicking the dropdown and selecting your target channel — for example '#meeting-notes' or '#product-updates'. In the Text field, map the 'slack_message' variable you created in Step 5. Optionally, expand 'Other Fields' and toggle 'Link Names' to true so that @mentions in the Notion text resolve correctly in Slack. Set 'Parse' to 'full' to enable Slack markdown formatting like bold and links.

  1. 1Click the Channel dropdown and select your target Slack channel
  2. 2In the Text field, map the 'slack_message' variable from Step 5
  3. 3Expand 'Other Fields'
  4. 4Set 'Link Names' to true
  5. 5Set 'Parse' to 'full'
What you should see: The Slack module preview shows your channel name, and the Text field contains the mapped variable reference.
Common mistake — Slack's 'Parse: full' setting will auto-linkify any URLs in your message — which is what you want for the Notion link. But if your meeting notes title contains angle brackets or ampersands, Slack will strip them. Strip special characters from the title before passing it to Slack if your team uses symbols in page names.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
8

Canvas > Connector line between Notion and Set Variable > Filter icon

Add a filter to skip incomplete or draft pages

Click the filter icon on the connector line between the Notion trigger and the Set Variable module (it looks like a funnel). Add a condition: check that the page's Status property (if you use one) does not equal 'Draft'. If you do not have a Status field, filter by title not being empty — this prevents a blank Notion page created accidentally from firing a Slack message. Click OK to save the filter.

  1. 1Click the funnel icon on the connector line between the first two modules
  2. 2Click 'Add rule'
  3. 3Set Condition A to your Status property (or Title)
  4. 4Set operator to 'Does not equal' (or 'Is not empty')
  5. 5Set the value to 'Draft' (or leave blank for the empty check)
  6. 6Click OK
What you should see: The filter icon on the connector line turns orange, indicating an active filter condition is applied.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Notion
NO
notified
9

Canvas > + after Filter > Data Store > Search Records

Handle duplicate detection with a data store

Because Make polls on a schedule, there is a small but real risk that the same page gets picked up twice if Notion's API returns it in two consecutive polling windows — especially right after creation. Add a Make Data Store module before the Slack step. Check if the Notion page ID exists in the data store. If it does, stop processing. If it does not, add it and continue. This adds two modules but prevents duplicate Slack messages reliably.

  1. 1Click '+' after the filter
  2. 2Search 'Data Store' and add 'Search Records'
  3. 3Create or select a data store with a field called 'notion_page_id'
  4. 4Set the filter to search where notion_page_id equals the Notion Page ID from the trigger
  5. 5Add a Router after this module
  6. 6Route 1: if no record found → continue to Set Variable → Slack
  7. 7Route 2: if record found → add 'Break' to stop execution
  8. 8Add a 'Data Store > Add/Replace a Record' module on Route 1 to save the new page ID
What you should see: Your scenario canvas now shows a router with two branches. Route 1 processes new pages and saves the ID. Route 2 silently stops if the page was already processed.
Common mistake — Make Data Store records count toward your data storage limit — 1 MB on the free plan. For a team creating 5–10 meeting notes per week, you will not hit this limit for years. But if you run other high-volume scenarios using the same data store, check your usage under Account > Storage.
10

Canvas > Run once button

Test the full scenario end to end

Create a new test page in your Notion Meeting Notes database with a real title, date, and owner. Back in Make, click 'Run once'. Watch each module's execution bubble light up green in sequence. Click the Slack module bubble to confirm the output shows the correct channel and message text. Then check your actual Slack channel — the message should appear within a few seconds of the scenario completing.

  1. 1Create a new Notion page in your Meeting Notes database
  2. 2Click 'Run once' on the Make canvas
  3. 3Watch all module bubbles turn green
  4. 4Click the Slack module bubble and verify the channel and message text
  5. 5Open Slack and confirm the message arrived in the correct channel
What you should see: A Slack message appears in your target channel with the meeting note title, date, owner, and a clickable Notion link.
11

Canvas > Toggle switch (bottom left) > ON

Activate the scenario

Once your test passes, click the toggle switch in the bottom-left of the canvas to turn the scenario ON. Make will now poll Notion automatically at the interval you set in Step 3. The scenario status changes from gray 'OFF' to blue 'ON'. You can confirm it is running by checking the scenario's execution history under Scenario > History after the first scheduled run fires.

  1. 1Click the gray toggle in the bottom-left of the canvas
  2. 2Confirm it turns blue and shows 'ON'
  3. 3Click 'Scenario > History' after your first scheduled interval to confirm execution
What you should see: The scenario shows status 'ON' and the execution history logs a successful run at your configured interval.
Common mistake — Make pauses scenarios that fail 3 consecutive times. Set up an error notification under Scenario Settings > Error Notifications so you get an email if the scenario stops running — otherwise it can go silent for days without you noticing.

Paste this formula into the 'Variable value' field of the Set Variable module in Step 5. It formats the meeting date from ISO 8601 to a readable format, extracts the plain text title safely, and builds the full Slack message block in one expression. Replace the property names in brackets with your actual Notion property names if they differ.

JavaScript — Custom Function{{if(contains(1.properties.Status.select.name; "Final");
▸ Show code
{{if(contains(1.properties.Status.select.name; "Final"); 
concat(
  "*"; 

... expand to see full code

{{if(contains(1.properties.Status.select.name; "Final"); 
concat(
  "*"; 
  get(map(1.properties.Name.title; "plain_text"); 1); 
  "*\n";
  "📅 "; 
  formatDate(1.properties.`Meeting Date`.date.start; "MMM D, YYYY"); 
  " | 👤 ";
  get(map(1.properties.Owner.people; "name"); 1);
  "\n";
  "🔗 ";
  1.url
); 
"SKIP"
)}}

{{-- If Status is not Final, the variable outputs SKIP.
Add a filter after this module: continue only if slack_message != "SKIP".
This handles draft filtering without a separate router. --}}

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 non-technical and you want a visual scenario you can hand off to someone else to maintain. Make's canvas makes the polling-filter-route-post flow obvious at a glance — a new team member can understand what it does in under 2 minutes without reading documentation. The second reason to pick Make: the built-in Data Store for deduplication costs nothing extra and requires no external database. The one scenario where you'd skip Make: if your team needs delivery in under 60 seconds. Make polls Notion — it does not receive webhooks from Notion — so there will always be a gap. For instant delivery, self-hosted n8n with a 30-second poll interval is the better call.

Cost

Real cost math: each scenario run uses approximately 6 operations (Notion trigger + filter check + set variable + data store search + data store write + Slack post). At 20 meeting notes per month, that is 120 operations. Make's free tier gives you 1,000 operations per month — you will not pay anything unless your team creates more than 166 meeting notes per month. At 500 notes per month (3,000 operations), you need the Core plan at $9/month. For comparison, running this same workflow in Zapier costs at least $19.99/month on the Starter plan once you add multi-step Zaps with data store equivalents. Make is cheaper here by $11/month minimum at any meaningful volume.

Tradeoffs

Honest comparison: Zapier's Notion trigger is slightly more polished — the field picker auto-resolves rich text arrays to plain strings, which means you skip the formula workaround in Step 5. That is a genuine usability advantage for non-technical users. n8n handles this better than both if you self-host: you can set polling to 30 seconds and use JavaScript to parse Notion's nested JSON in ways that Make formulas make awkward. Power Automate has a Notion connector but it is a premium connector requiring a $15/user/month Power Apps license — overkill for a Slack notification. Pipedream's Notion source fires reliably and you can write Node.js for the transformation, but there is no visual canvas, which matters for team handoff. Make is still the right pick here because the visual routing, built-in data store, and mid-tier pricing hit the best balance for a 10–50 person team that is not engineering-led.

Things you will hit after setup: First, Notion's API rate limit is 3 requests per second per integration. If you have multiple Make scenarios all polling the same Notion workspace simultaneously, you will start seeing 429 errors and scenarios will pause. Stagger your polling intervals — set one at 5 minutes, another at 7 minutes. Second, Notion Person properties return a user object with an ID and a name, but the name only appears if that user has a Notion account. If a guest collaborator is listed as the meeting owner, the name field comes back empty and your Slack message will show a blank where the author should be. Add a fallback: `if(Owner.name = ""; "Unknown"; Owner.name)`. Third, if your Notion database uses a rollup or formula property to compute the meeting date, Make sometimes cannot map these fields in the trigger output because Notion's API evaluates them lazily. Use a native Date property for the meeting date instead of a formula — it maps reliably every time.

Ideas for what to build next

  • Route by Meeting Type to Different ChannelsAdd a Router module after the filter and create separate Slack paths based on the Meeting Type property — product notes go to #product, sales notes go to #sales-team. This takes about 10 minutes to add and prevents channel noise immediately.
  • Add a Digest Mode for High-Frequency TeamsIf your team creates more than 3 meeting notes per day, individual Slack messages become noise. Switch to a daily digest: use Make's Aggregator module to collect all new pages created that day, then send one summary message at 5pm instead of firing per page.
  • Sync Action Items Back to NotionExtend the scenario to watch for Slack replies or emoji reactions on the meeting note message and write them back to the Notion page as a 'Follow-ups' property. This closes the loop between discussion and documentation without switching apps.

Related guides

Was this guide helpful?
Slack + Notion overviewMake profile →