Intermediate~20 min setupCommunication & Project ManagementVerified April 2026
Slack logo
Monday.com logo

How to Send Monday.com Status Alerts to Slack with n8n

Automatically posts a Slack message to a designated channel whenever a Monday.com item changes status, is created, or hits a deadline.

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

Best for

Engineering or ops teams on self-hosted n8n who want formatted, conditional Slack notifications without paying per-task Zapier costs.

Not ideal for

Teams without a server or cloud n8n instance — use Make's free tier instead, which handles this out of the box with no hosting overhead.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 12-person product team uses this to post into #product-updates whenever a Monday.com task moves to 'Blocked' or 'Done'. Before this, the PM pinged the team in Slack manually, often an hour or two after the status changed. Now the message hits Slack within 30 seconds of the status change, including the assignee name and due date pulled directly from the item.

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 n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. 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.

Monday.com admin access on the board — you need permission to create webhooks under Board Settings > Integrations
A Slack app installed in your workspace with the scopes chat:write and chat:write.public — create one at api.slack.com/apps
n8n instance running and accessible from the internet (self-hosted with a public URL, or n8n Cloud) — Monday.com's webhook cannot reach localhost
Monday.com API token from your profile avatar > Admin > API in Monday.com — needed for the Get Item lookup node
The Slack channel ID where notifications should post — find it by right-clicking the channel in Slack and selecting 'Copy link'; the ID is the last segment starting with C

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Item IDevent.pulseId
Board IDevent.boardId
Column IDevent.columnId
New Status Labelevent.value.label
Item Namename
Event Typeevent.type
4 optional fields▸ show
Board Nameboard.name
Assignee Namecolumn_values.person.text
Due Datecolumn_values.date.text
Item URL

Step-by-Step Setup

1

n8n Dashboard > Workflows > + New Workflow

Create a new n8n workflow

Log into your n8n instance and click the orange '+ New Workflow' button in the top right of the Workflows dashboard. Give it a name like 'Monday → Slack Status Alerts' so it's easy to find later. You'll land on a blank canvas with a single grey 'Start' node. You won't use that node — you'll delete it and set up a webhook trigger instead.

  1. 1Click '+ New Workflow' in the top right
  2. 2Click the workflow title at the top and rename it to 'Monday → Slack Status Alerts'
  3. 3Click the grey Start node and press Delete to remove it
What you should see: You have a blank workflow canvas with no nodes.
Common mistake — If you skip renaming the workflow now, you'll end up with five workflows all called 'My Workflow' within a week.
2

Canvas > + > Search 'Webhook' > Webhook Node > Parameters

Add a Webhook trigger node

Click the '+' button on the canvas to open the node picker. Search for 'Webhook' and select it. In the node settings panel, set the HTTP Method to POST and note the webhook URL shown in the 'Test URL' field — you'll paste this into Monday.com in the next step. Keep Authentication set to None for now; you can add header auth later in production.

  1. 1Click '+' on the blank canvas
  2. 2Type 'Webhook' in the search box and click the Webhook node
  3. 3Set HTTP Method to POST
  4. 4Copy the Test URL shown in the node panel
What you should see: The Webhook node appears on the canvas and shows a Test URL like https://your-n8n.com/webhook-test/abc123.
Common mistake — The Test URL and the Production URL are different. Monday.com will need the Production URL once you activate the workflow — using the test URL in production means the workflow only fires when you manually click 'Listen for test event'.
n8n
+
click +
search apps
Slack
SL
Slack
Add a Webhook trigger node
Slack
SL
module added
3

Monday.com Board > ••• Menu > Integrations > Webhooks > Add Webhook

Configure Monday.com webhook integration

Open your Monday.com board in a new tab. Click the three-dot menu in the top right of the board and select 'Integrations', then 'Webhooks'. Paste the n8n webhook Test URL into the URL field. Select the events you want to capture: 'change_column_value' for status changes, 'create_item' for new items, and 'item_date_arrived' for deadline triggers. Monday.com will send a confirmation POST to the URL immediately — you'll verify this in n8n next.

  1. 1Open your Monday.com board
  2. 2Click the three-dot '•••' menu in the top right
  3. 3Select 'Integrations' then 'Webhooks'
  4. 4Click 'Add Webhook' and paste your n8n Test URL
  5. 5Check the boxes for 'change_column_value', 'create_item', and 'item_date_arrived'
  6. 6Click 'Subscribe'
What you should see: Monday.com shows a green checkmark and 'Active' badge next to your new webhook.
Common mistake — Monday.com sends ALL column change events through 'change_column_value', not just status changes. If you only want status updates, you'll filter by column type in Step 6 — skipping that step will flood Slack with every field edit on every item.
4

n8n Canvas > Webhook Node > Listen for Test Event

Capture a test event from Monday.com

Back in n8n, click your Webhook node and then click 'Listen for Test Event' at the bottom of the panel. Switch to Monday.com and manually change any item's status column on your board. Within a few seconds, n8n will show 'Webhook called' and the raw JSON payload from Monday.com will appear in the Output panel on the right. Inspect the data — you'll see fields like event.pulseId, event.columnId, event.value.label, and event.boardId.

  1. 1Click the Webhook node to open its settings
  2. 2Click 'Listen for Test Event' at the bottom
  3. 3Switch to Monday.com and change any item status
  4. 4Return to n8n and confirm the Output panel shows JSON data
What you should see: The Output panel shows a JSON payload with keys including event.type, event.pulseId, event.columnId, event.value, and event.boardId.
n8n
▶ Run once
executed
Slack
Monday.com
Monday.com
🔔 notification
received
5

Canvas > + after Webhook > Monday.com Node > Operation: Get Item

Add a Monday.com node to fetch full item details

The webhook payload from Monday.com is minimal — it gives you IDs but not the item name, assignee, or board name. Add a Monday.com node after the Webhook to fetch the full item. Click '+' after the Webhook node, search for 'Monday.com', and select the 'Get Item' operation. Set the Item ID field to the expression {{ $json.event.pulseId }} using the expression editor. You'll need to connect your Monday.com account via API token in the credentials panel.

  1. 1Click '+' to the right of the Webhook node
  2. 2Search for 'Monday.com' and select the node
  3. 3Set Operation to 'Get Item'
  4. 4Click the Item ID field and switch to Expression mode
  5. 5Type {{ $json.event.pulseId }}
  6. 6Click 'Create New Credential' and paste your Monday.com API token
What you should see: After clicking 'Test Step', the Output panel shows the full item record including name, column values, assignees, and board name.
Common mistake — Monday.com API tokens are account-level, not board-level. Anyone with access to your n8n credentials can query any board. Use a dedicated service account token in production, not a personal token.
6

Canvas > + after Monday Node > IF Node > Conditions

Filter for status column changes only

Add an IF node after the Monday.com node to route only genuine status changes forward. The webhook fires for all column edits, so you need to check that the column being changed is actually a status column. In the IF node, set Condition 1 to: {{ $('Webhook').item.json.event.columnId }} equals 'status' — replace 'status' with the exact column ID from your board (visible in the test payload you captured in Step 4). For deadline events, add a second condition checking event.type equals 'item_date_arrived'.

  1. 1Click '+' after the Monday.com node
  2. 2Search for 'IF' and select the IF node
  3. 3Set Condition Value 1 to expression: {{ $('Webhook').item.json.event.columnId }}
  4. 4Set the operator to 'Equals'
  5. 5Set Condition Value 2 to your status column ID (e.g. 'status' or 'status_1')
  6. 6Click 'Add Condition' and add event.type = 'create_item' as an OR condition if you also want new item alerts
What you should see: The IF node shows two branches: 'true' for status changes that pass the filter, and 'false' for everything else.
Common mistake — Monday.com column IDs are not always 'status' — check your actual test payload. A board with multiple status columns will have IDs like 'status', 'status_1', 'status_2'. Filtering only on 'status' silently drops changes to secondary status columns.
Slack
SL
trigger
filter
Status
matches criteria?
yes — passes through
no — skipped
Monday.com
MO
notified
7

Canvas > + after IF Node (true branch) > Code Node > JavaScript Mode

Add a Code node to build the Slack message

Add a Code node after the 'true' branch of your IF node. This is where you build the formatted Slack message using Block Kit. The Code node lets you pull fields from both the Webhook payload and the Monday.com item lookup, combine them, and format the output as a structured Slack message object. Paste the code from the Pro Tip section below into the 'JavaScript' editor. The node outputs a single object with a blocks array ready to send to Slack.

  1. 1Click '+' on the 'true' output of the IF node
  2. 2Search for 'Code' and select the Code node
  3. 3Confirm the mode is set to 'Run Once for Each Item'
  4. 4Paste the JavaScript from the Pro Tip section into the code editor
  5. 5Click 'Test Step' to verify output
What you should see: The Output panel shows a JSON object with a 'blocks' array containing header, section, and context blocks formatted for Slack.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.

Paste this into the Code node added in Step 7. It reads from both the Webhook node and the Monday.com Get Item node, picks an appropriate emoji based on the new status label, formats a Slack Block Kit message with a header, field grid, and a direct link button to the Monday.com item.

JavaScript — Code Node// Node: Code (runs after Monday.com Get Item node)
▸ Show code
// Node: Code (runs after Monday.com Get Item node)
// Mode: Run Once for Each Item
const webhookData = $('Webhook').item.json.event;

... expand to see full code

// Node: Code (runs after Monday.com Get Item node)
// Mode: Run Once for Each Item

const webhookData = $('Webhook').item.json.event;
const mondayItem = $('Monday.com').item.json;

// Resolve human-readable values
const itemName = mondayItem.name || 'Unnamed Item';
const boardName = mondayItem.board?.name || 'Unknown Board';
const newStatus = webhookData.value?.label?.text || webhookData.value?.label || 'Unknown';
const eventType = webhookData.type;
const boardId = webhookData.boardId;
const pulseId = webhookData.pulseId;

// Resolve assignee from column_values
const personColumn = mondayItem.column_values?.find(col => col.type === 'multiple-person');
const assignee = personColumn?.text || 'Unassigned';

// Resolve due date from column_values
const dateColumn = mondayItem.column_values?.find(col => col.type === 'date');
const dueDate = dateColumn?.text || 'No due date';

// Build direct item URL
const itemUrl = `https://monday.com/boards/${boardId}/pulses/${pulseId}`;

// Pick emoji based on status label
const statusEmojis = {
  'done': '✅',
  'blocked': '🔴',
  'in progress': '🔄',
  'stuck': '⚠️',
  'working on it': '🔄',
  'new item': '🆕'
};

const statusKey = newStatus.toLowerCase();
const emoji = statusEmojis[statusKey] || '📋';

// Choose header text based on event type
let headerText;
if (eventType === 'create_item') {
  headerText = `🆕 New Item: ${itemName}`;
} else if (eventType === 'item_date_arrived') {
  headerText = `⏰ Deadline Reached: ${itemName}`;
} else {
  headerText = `${emoji} Status Changed: ${itemName}`;
}

// Build Slack Block Kit message
const blocks = [
  {
    type: 'header',
    text: { type: 'plain_text', text: headerText, emoji: true }
  },
  {
    type: 'section',
    fields: [
      { type: 'mrkdwn', text: `*Board:*\n${boardName}` },
      { type: 'mrkdwn', text: `*Status:*\n${newStatus}` },
      { type: 'mrkdwn', text: `*Assigned to:*\n${assignee}` },
      { type: 'mrkdwn', text: `*Due Date:*\n${dueDate}` }
    ]
  },
  {
    type: 'actions',
    elements: [
      {
        type: 'button',
        text: { type: 'plain_text', text: 'View in Monday.com', emoji: true },
        url: itemUrl,
        style: 'primary'
      }
    ]
  },
  {
    type: 'divider'
  }
];

return [{ json: { blocks, itemName, boardName, newStatus, assignee, dueDate, itemUrl } }];
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
8

Canvas > + after Code Node > Slack Node > Resource: Message > Operation: Send Message

Add a Slack node to post the message

Add a Slack node after the Code node. Set the operation to 'Send Message' and the Resource to 'Message'. Set the Channel field to the Slack channel ID or name where notifications should appear (e.g. #project-updates). Set the Blocks field to the expression {{ $json.blocks }} to use the formatted message from the Code node. Connect your Slack app credentials — you'll need a Slack app with chat:write and chat:write.public scopes installed in your workspace.

  1. 1Click '+' after the Code node
  2. 2Search for 'Slack' and select the Slack node
  3. 3Set Resource to 'Message' and Operation to 'Send Message'
  4. 4Set Channel to your target channel (e.g. #project-updates or the channel ID C0123ABCDEF)
  5. 5Click the Blocks field and set it to Expression: {{ $json.blocks }}
  6. 6Click 'Create New Credential' and follow the OAuth2 flow to connect your Slack app
What you should see: After clicking 'Test Step', a formatted Slack message appears in your target channel within a few seconds.
Common mistake — If you use a channel name instead of a channel ID, the Slack node will fail if the channel is ever renamed. Use the channel ID (starts with C) for production reliability.
9

Canvas > + after IF Node (false branch) > No Operation Node

Handle the 'false' branch to avoid silent failures

Connect a NoOp node to the 'false' output of the IF node. Without this, n8n will show execution errors for every non-status column change because the branch has no destination. A NoOp node terminates the 'false' branch cleanly. This also makes it easy to add future logic — for example, routing item creation events to a different Slack channel — by replacing the NoOp with a new branch.

  1. 1Click '+' on the 'false' output of the IF node
  2. 2Search for 'No Operation' and select it
  3. 3Leave all settings default
What you should see: The workflow canvas now shows two complete branches from the IF node — both terminate cleanly with no dangling outputs.
10

n8n Canvas > Test Workflow button (top right)

Test the full workflow end-to-end

Click 'Test Workflow' in the top right of the n8n canvas. This activates all nodes in test mode simultaneously. Switch to Monday.com and change a real item's status column. Watch n8n — each node should highlight green as the data flows through. Check your Slack channel to confirm the message arrived. Verify the item name, new status, assignee, and board name all appear correctly in the message.

  1. 1Click 'Test Workflow' in the top right of the canvas
  2. 2Switch to Monday.com and change any item status
  3. 3Return to n8n and watch the node execution indicators
  4. 4Open Slack and confirm the message appears in your target channel
What you should see: All nodes show green execution indicators, and a properly formatted Slack message appears in your target channel within 30 seconds of the Monday.com status change.
11

n8n Canvas > Active Toggle (top right) | Monday.com Board > Webhooks > Edit URL

Activate the workflow for production

Click the grey toggle switch in the top right of the canvas to activate the workflow. The toggle turns orange and the workflow status changes to 'Active'. Go back to Monday.com's Webhooks settings and update the webhook URL from the Test URL to the Production URL shown in your Webhook node (copy it from the node's settings panel — look for 'Production URL' tab). From this point, every qualifying Monday.com status change will trigger a Slack message automatically without any manual intervention.

  1. 1Click the grey toggle in the top right of the n8n canvas
  2. 2Confirm it turns orange and shows 'Active'
  3. 3Click the Webhook node and copy the Production URL from the 'Production URL' tab
  4. 4Open Monday.com > Board > Integrations > Webhooks
  5. 5Edit your webhook and replace the Test URL with the Production URL
  6. 6Click Save
What you should see: The workflow toggle is orange, and Monday.com's webhook settings show the Production URL as active. The next status change on any board item will post to Slack automatically.
Common mistake — If you forget to swap to the Production URL in Monday.com, the workflow appears active in n8n but never fires in production. Test it by making one real status change after activation.

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 n8n for this workflow

Use n8n for this if you're self-hosting or already on n8n Cloud and want zero per-task costs, need a Code node to format conditional Slack messages with Block Kit, or want full execution history without paying per operation. n8n's webhook trigger handles Monday.com events in real time with no polling delay, and the Code node lets you write the exact message logic you want without working around a UI builder. The one scenario where you'd skip n8n: if your team has no one comfortable reading a JSON payload and you're not on a server, Make's Monday.com + Slack scenario does this with a cleaner visual interface and runs free up to 1,000 operations/month.

Cost

Cost math is straightforward. Each Monday.com status change costs 3 n8n executions: Webhook node, Monday.com Get Item node, Slack node. If your team changes 200 item statuses per month, that's 600 executions/month. n8n Cloud's Starter plan ($20/month) includes 2,500 executions. At 800 status changes/month you'd hit 2,400 executions and stay under the limit. Self-hosted n8n is free regardless of execution count — your only cost is server time. Make charges per operation and a comparable setup costs $9/month at 200 status changes. Zapier charges per task and 200 Zap runs/month sits on the $19.99/month Starter plan. n8n self-hosted beats both by a wide margin at any volume above zero.

Tradeoffs

Make's Monday.com trigger is more polished for this use case — it has named trigger events like 'When status changes' built into the UI, so you don't need the manual IF filter that Step 6 requires in n8n. Zapier has the same named trigger and takes 8 minutes to set up, but the free tier caps at 100 tasks/month, which won't survive a busy team. Power Automate has a Monday.com connector but it's a premium connector requiring a $15/user/month Power Apps license — prohibitively expensive for a notification workflow. Pipedream's Monday.com source handles the webhook cleanly and the code steps are more flexible than n8n's for complex transformations, but it has a 10k invocations/month cap on the free tier. n8n is still the right call here if you want self-hosted, unlimited execution volume, and a one-time setup investment rather than recurring per-task costs.

Three things you'll hit after setup. First, Monday.com's 'change_column_value' webhook fires for every column on the board — text fields, file uploads, all of it. Budget 20 minutes to get the IF filter exactly right using the actual column ID from a real test payload, not what you assume it should be. Second, the status value in the webhook payload is structured as an object with a nested label — event.value.label.text in some board configurations and event.value.label directly in others, depending on the Monday.com account type. Test against your actual payload before hardcoding the path. Third, Monday.com occasionally fires duplicate webhooks for a single status change when their internal automations are also triggered on the same item. Add the Deduplicate node or you'll see pairs of identical Slack messages within a few seconds of each other on busy boards.

Ideas for what to build next

  • Route by status to different Slack channelsAdd a Switch node after the Code node to route 'Blocked' and 'Stuck' statuses to a #blockers channel and 'Done' statuses to a #wins channel. Takes about 10 minutes and makes the notifications much more actionable.
  • Send a daily digest instead of per-change messagesReplace the webhook trigger with a Schedule trigger set to run at 9am. Use the Monday.com 'Get Board Items' node filtered by 'Updated Yesterday' to batch all status changes into one Slack message per day — useful for high-volume boards where per-change pings become noise.
  • Write back to Monday.com when someone reacts in SlackAdd a second workflow that listens for Slack reaction events using the Slack trigger node — for example, when someone adds a ✅ emoji to a notification, update the Monday.com item status to 'Done' via the Monday.com node's 'Change Column Value' operation.

Related guides

Was this guide helpful?
Slack + Monday.com overviewn8n profile →