

How to Send Monday.com Status Alerts to Slack with Pipedream
Automatically post a Slack message to the right 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 who need instant Slack alerts when Monday.com item statuses change, without writing a full backend service.
Not ideal for
Teams that want a no-code setup with a visual builder — use Make or Zapier instead; Pipedream requires comfort with Node.js.
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person product team uses this to post to #product-updates in Slack the moment any Monday.com item moves to 'In Review' or 'Blocked'. Before this, the PM sent manual Slack messages after status changes — updates were delayed by 30–90 minutes on average. Now the Slack message fires within 5 seconds of the Monday.com status change.
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
Import this workflow directly into Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Item Name | event.pulseName | |
| Board Name | event.boardId | |
| New Status Label | event.value.label.text | |
| Previous Status Label | event.previousValue.label.text | |
| Item ID | event.pulseId | |
| Item URL | ||
3 optional fields▸ show
| Changed At Timestamp | event.changedAt |
| User Who Changed It | event.userId |
| Column ID | event.columnId |
Step-by-Step Setup
pipedream.com > Workflows > + New Workflow
Create a new Pipedream Workflow
Go to pipedream.com and click 'Workflows' in the left sidebar. Click the green '+ New Workflow' button at the top right. You'll land on the workflow canvas with an empty trigger slot at the top. Give the workflow a name — something like 'Monday Status → Slack Alert' — by clicking the pencil icon next to 'My Workflow' at the top.
- 1Click 'Workflows' in the left sidebar
- 2Click '+ New Workflow' in the top right
- 3Click the pencil icon next to 'My Workflow' and rename it
- 4Click the 'Add Trigger' block at the top of the canvas
Trigger Panel > Search 'Monday.com' > New Event (Instant)
Add the Monday.com Webhook Trigger
In the trigger search box, type 'Monday.com' and select the Monday.com app. Choose the trigger called 'New Event (Instant)' — this uses Monday.com's native webhook system so the workflow fires within seconds of a board change. You'll be prompted to connect your Monday.com account via OAuth; click 'Connect Account' and follow the auth flow. Once connected, select the specific board you want to monitor from the dropdown.
- 1Type 'Monday.com' in the trigger search box
- 2Select 'Monday.com' from the app results
- 3Choose 'New Event (Instant)' as the trigger
- 4Click 'Connect Account' and complete the OAuth flow
- 5Select your target board from the 'Board ID' dropdown
Trigger Config > Event Type > change_column_value
Configure Which Monday.com Events to Watch
Under the trigger config, expand the 'Event Type' dropdown. You'll see options including 'change_column_value', 'create_pulse' (item created), and 'item_due_date_arrived'. Select 'change_column_value' to catch status changes. If you also want to catch item creation, you'll need a second workflow using 'create_pulse' — Pipedream doesn't let you subscribe to multiple event types in a single trigger step. For status changes specifically, also set the 'Column ID' field to your board's status column ID.
- 1Open the 'Event Type' dropdown in the trigger config
- 2Select 'change_column_value'
- 3Set 'Column ID' to the ID of your status column (e.g., 'status')
- 4Click 'Save & Test' to pull a sample event
Canvas > + > Run Node.js code
Add a Node.js Code Step to Parse the Payload
Click the '+' button below the trigger to add a new step. Choose 'Run Node.js code' from the step options. Pipedream passes the Monday.com webhook payload as an object you can access via steps.trigger.event. The raw payload contains the item name, board name, previous column value, and new column value — but they're nested and need to be extracted before sending to Slack. This step pulls out the fields you actually care about and formats the Slack message text.
- 1Click the '+' icon below the Monday.com trigger
- 2Select 'Run Node.js code' from the step type list
- 3Paste the extraction code into the code editor (see Pro Tip below)
- 4Click 'Test' to run the step against your sample event
Paste this into the Node.js code step (Step 4). It extracts and formats all the fields you need from the raw Monday.com webhook payload, builds the item URL, handles the nested JSON parsing for status labels, and returns a clean object that every downstream step can reference with steps.parse_payload.$return_value.fieldName.
JavaScript — Code Stepexport default defineComponent({▸ Show code
export default defineComponent({
async run({ steps, $ }) {
const event = steps.trigger.event.event;... expand to see full code
export default defineComponent({
async run({ steps, $ }) {
const event = steps.trigger.event.event;
if (!event) {
$.flow.exit('No event payload found — skipping');
}
// Monday.com sends status values as nested JSON strings
// Parse them safely before reading the label
let newStatus = 'Unknown';
let previousStatus = 'Unknown';
try {
const newVal = typeof event.value === 'string'
? JSON.parse(event.value)
: event.value;
newStatus = newVal?.label?.text || newVal?.index?.toString() || 'Unknown';
} catch (e) {
console.log('Could not parse new value:', event.value);
}
try {
const prevVal = typeof event.previousValue === 'string'
? JSON.parse(event.previousValue)
: event.previousValue;
previousStatus = prevVal?.label?.text || prevVal?.index?.toString() || 'Not set';
} catch (e) {
console.log('Could not parse previous value:', event.previousValue);
}
// Build the direct Monday.com item URL
const boardId = event.boardId;
const itemId = event.pulseId;
const itemUrl = boardId && itemId
? `https://monday.com/boards/${boardId}/pulses/${itemId}`
: null;
// Format the timestamp for display in Slack
const changedAt = event.changedAt
? new Date(event.changedAt * 1000).toUTCString()
: 'Unknown time';
const result = {
itemName: event.pulseName || 'Unnamed item',
boardId: boardId,
itemId: itemId,
itemUrl: itemUrl,
newStatus: newStatus,
previousStatus: previousStatus,
columnId: event.columnId,
userId: event.userId,
changedAt: changedAt,
slackMessage: `*${event.pulseName}* moved from \`${previousStatus}\` → \`${newStatus}\``,
};
console.log('Parsed Monday event:', JSON.stringify(result, null, 2));
return result;
}
});Canvas > + > Filter
Add a Filter Step for Relevant Status Changes
Click '+' below the code step and select 'Filter' from the built-in Pipedream helpers. This lets you stop the workflow early if the status change isn't worth notifying about — for example, if someone moves an item from 'Done' back to 'Done' after a typo correction. Set the condition to check that steps.parse_payload.$return_value.newStatus does not equal steps.parse_payload.$return_value.previousStatus. This prevents duplicate or meaningless Slack messages.
- 1Click '+' below the Node.js code step
- 2Select 'Filter' from the helper step list
- 3Set the left operand to '{{steps.parse_payload.$return_value.newStatus}}'
- 4Set condition to 'does not equal'
- 5Set the right operand to '{{steps.parse_payload.$return_value.previousStatus}}'
Canvas > + > Slack > Send Message to a Channel
Add the Slack Step
Click '+' below the filter step and search for 'Slack'. Select the Slack app and choose the action 'Send Message to a Channel'. Click 'Connect Account' and authenticate with your Slack workspace — you'll need to authorize the Pipedream Slack app. Once connected, select the target channel from the dropdown (e.g., #project-updates). Set the 'Message Text' field using values from the previous steps.
- 1Click '+' below the filter step
- 2Search for 'Slack' and select the Slack app
- 3Choose 'Send Message to a Channel' as the action
- 4Click 'Connect Account' and authorize the Pipedream Slack app
- 5Select the target channel from the 'Channel' dropdown
Slack Step > Message Text field
Build the Slack Message
In the 'Message Text' field, build your notification using the parsed values from the code step. Use Slack's mrkdwn formatting for emphasis. A solid format: '*{{steps.parse_payload.$return_value.itemName}}* moved from {{steps.parse_payload.$return_value.previousStatus}} → {{steps.parse_payload.$return_value.newStatus}} on board *{{steps.parse_payload.$return_value.boardName}}*'. Add the item URL on a new line so team members can click straight into Monday.com. Optionally, set the 'Username' field to 'Monday.com Bot' and add an emoji icon.
- 1Click into the 'Message Text' field
- 2Type your message template using {{steps.parse_payload.$return_value.fieldName}} references
- 3Add the item URL on a separate line
- 4Set 'Username' to 'Monday.com Bot' in the optional fields
- 5Set 'Icon Emoji' to ':white_check_mark:' or similar
Workflow Canvas > Test Workflow button
Test the Full Workflow End-to-End
Click 'Test Workflow' at the top of the canvas. This runs all steps in sequence using the sample event captured in Step 3. Watch each step turn green as it passes. Check your Slack channel — the message should appear within a few seconds. If any step shows a red error badge, click it to see the exact error output and which line failed.
- 1Click 'Test Workflow' at the top of the canvas
- 2Watch each step execute in sequence
- 3Open your Slack channel to confirm the message arrived
- 4Click any red step badge to read the error detail
Workflow Canvas > Deploy button (top right)
Deploy the Workflow
Click the 'Deploy' button in the top right of the canvas. Pipedream will register the Monday.com webhook automatically — you don't need to manually paste a URL into Monday.com. The workflow status changes from 'Development' to 'Active'. Go back to Monday.com and change an item status on your target board. The Slack message should appear within 5 seconds.
- 1Click 'Deploy' in the top right corner
- 2Confirm the workflow status shows 'Active'
- 3Go to Monday.com and change a real item status
- 4Verify the Slack message arrives in under 10 seconds
Workflows > [Your Workflow] > Events tab
Monitor Workflow Runs in the Event Inspector
In the left sidebar, click 'Workflows' and then select your deployed workflow. Click the 'Events' tab to see every run — successes, errors, and filtered-out events. Each row shows the timestamp, trigger payload, and per-step output. This is where you debug any missed notifications. Pipedream retains event history for 30 days on the free tier.
- 1Click 'Workflows' in the left sidebar
- 2Select your deployed Monday → Slack workflow
- 3Click the 'Events' tab
- 4Click any individual event row to see the full step-by-step execution log
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 Pipedream for this if your team has at least one person comfortable reading Node.js. The webhook trigger is genuinely instant — no polling delay, no 15-minute lag. And the code step gives you full control over the Slack message format, which matters once you have 5 different status columns with different meanings. The one scenario where you'd skip Pipedream: if your whole team is non-technical and needs to modify the notification logic themselves. In that case, Zapier's visual interface wins on maintainability even if it's technically inferior.
Pipedream's free tier gives you 10,000 credits per month. Each workflow run costs roughly 3–5 credits depending on how many steps execute (trigger + code + filter + Slack = 4 steps = ~4 credits per run). At 100 status changes per day, that's 400 credits/day or about 12,000 credits/month — just over the free tier. You'd need the Basic plan at $29/month. Make's free tier allows 1,000 operations/month with the same workflow costing 3–4 operations per run, so Make actually goes paid faster. Zapier's free tier caps at 100 tasks/month, which is almost nothing. Pipedream is the cheapest option at any meaningful volume above the free tier.
Zapier has a pre-built 'Monday.com + Slack' template that takes 4 minutes to set up with zero code — it wins on speed for basic use cases. Make's scenario builder gives you better visual debugging when a specific status transition isn't routing correctly. n8n, if self-hosted, costs nothing at any volume and has a Monday.com node with full API access. Power Automate has a Monday.com connector but it's polling-based (15-minute minimum delay), which defeats the purpose of status notifications. Pipedream is still the right call here because the webhook is instant, the Node.js step handles Monday's quirky nested JSON payload cleanly, and the $29/month cost is lower than Zapier's equivalent tier ($49/month for 2,000 tasks) once you're past the free threshold.
Three things you'll hit after setup. First, Monday.com's webhook payload format changed in 2023 — the status value is now a JSON-stringified object inside the payload, not a plain string. Any tutorial written before mid-2023 will have broken parsing code. Use JSON.parse() as shown in the Pro Tip. Second, Monday.com doesn't include the board name in the webhook payload — it only sends the boardId. If you want the board name in your Slack message, you need a separate Monday.com API call (boards query via GraphQL) to resolve the ID to a name, which adds one more step and one more API call per notification. Third, if the Monday.com user who authenticated the Pipedream connection leaves your organization and their account is deactivated, the webhook silently stops working with no error. Set a calendar reminder to rotate the connected account to a service account or a permanent team member.
Ideas for what to build next
- →Add Deadline Alerts with a Scheduled Trigger — Create a second Pipedream workflow on a daily schedule that queries the Monday.com API for items with due dates in the next 24 hours and posts a digest to Slack. This catches deadline-based notifications that webhooks don't cover.
- →Route Alerts to Different Channels by Status — Add conditional logic in the Node.js step to map specific statuses to specific Slack channels — for example, 'Blocked' goes to #engineering-escalations while 'Done' goes to #wins. This takes about 10 extra lines of code in Step 4.
- →Add a Monday.com Item Update When Slack Gets a Reply — Build a reverse workflow: when someone replies to the Slack notification thread, add a comment on the Monday.com item automatically using the Monday.com API's create_update mutation. This keeps Monday.com and Slack in sync without anyone having to context-switch.
Related guides
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
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup