

How to Send Wrike Task Updates to Slack with Pipedream
Automatically posts a Slack message to a project channel whenever a Wrike task changes status, is completed, 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 agency teams who want instant Slack alerts when Wrike task statuses change, without polling or manual check-ins.
Not ideal for
Teams who need bidirectional sync — this only pushes Wrike events into Slack, not the other way.
Sync type
real-timeUse case type
notificationReal-World Example
A 20-person digital agency uses this to post into #project-phoenix on Slack the moment any Wrike task moves to 'In Review' or 'Completed'. Before this, the project manager sent manual Slack updates 2-3 times per day and team members routinely missed handoff windows by several hours. Now the message fires within 10 seconds of the status change in Wrike.
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 | ||
| Task ID | taskId | |
| Event Type | eventType | |
| Task Title | title | |
| Task Status | status | |
| Permalink | permalink | |
| Slack Channel ID | ||
3 optional fields▸ show
| Assignees | responsibleIds |
| Due Date | dates.due |
| Project / Folder Name | parentIds |
Step-by-Step Setup
pipedream.com > Workflows > New Workflow
Create a new Pipedream workflow
Go to pipedream.com and sign in. Click 'Workflows' in the left sidebar, then click the blue 'New Workflow' button in the top right. You'll land on a blank canvas with a single trigger slot at the top. This is where the Wrike webhook will live.
- 1Click 'Workflows' in the left sidebar
- 2Click the blue 'New Workflow' button in the top right
- 3Name the workflow 'Wrike → Slack Task Notifications' at the top
Workflow Canvas > Add a trigger > Wrike > New Event (Instant)
Add the Wrike webhook trigger
Click 'Add a trigger' at the top of the canvas. Search for 'Wrike' in the app list and select it. Choose the trigger 'New Event (Instant)' — this uses Wrike's webhook API and fires within seconds of a task change. You'll see a Pipedream-generated webhook URL appear immediately after selecting the trigger.
- 1Click 'Add a trigger'
- 2Type 'Wrike' in the search box
- 3Select 'Wrike' from the app list
- 4Choose 'New Event (Instant)' as the trigger type
- 5Click 'Connect Wrike Account' and authorize via OAuth
Wrike App > Settings > Integrations > API > Webhooks
Register the webhook inside Wrike
Wrike does not auto-register webhooks from OAuth alone — you must create the webhook manually via Wrike's API or through Pipedream's built-in Wrike action. In Pipedream, click 'Generate Test Event' and copy the webhook URL shown. Then go to your Wrike account settings or use Wrike's API endpoint POST /webhooks to register it, targeting the events 'taskStatusChanged' and 'taskCompleted'.
- 1Copy the webhook URL from the Pipedream trigger config panel
- 2In a separate tab, go to app-us.wrike.com > Settings > Integrations > API
- 3Use the Wrike API explorer or a tool like Postman to POST to /webhooks with your copied URL
- 4Set 'eventType' to ['taskStatusChanged', 'taskCompleted', 'taskDueDateChanged']
- 5Return to Pipedream and click 'Listen for events'
Wrike > Any Task > Status Dropdown > Pipedream Trigger Panel > Select Event
Send a test event from Wrike
In Wrike, open any task in your target project and change its status — for example, move it from 'In Progress' to 'Completed'. Switch back to Pipedream. Within 10 seconds you should see a raw JSON payload appear in the trigger panel under 'Select an event to work with'. Click on it to expand the event fields.
- 1Open Wrike in a separate browser tab
- 2Navigate to any project task
- 3Change the task status to 'Completed'
- 4Return to Pipedream and wait for the event to appear in the trigger panel
- 5Click the event to expand the JSON payload
Workflow Canvas > + > Run Node.js code
Add a Node.js code step to fetch task details
Wrike's webhook payload contains the task ID but not the full task name, assignees, or status label. You need a code step to call Wrike's API and fetch that data. Click the '+' button below the trigger to add a new step. Select 'Run Node.js code'. This step will use your Wrike OAuth token to call GET /tasks/{taskId} and return the fields you need for the Slack message.
- 1Click the '+' button below the trigger step
- 2Select 'Run Node.js code' from the step type list
- 3Name the step 'fetch_task_details'
- 4Paste in the code from the Pro Tip section below
- 5Click 'Test' to run the step and confirm it returns task data
This code goes in the 'fetch_task_details' Node.js step. It calls Wrike's API to get full task info, resolves assignee IDs to display names, and returns a clean object the Slack step can reference directly. Paste it into the code editor after naming the step 'fetch_task_details'.
JavaScript — Code Stepimport axios from 'axios';▸ Show code
import axios from 'axios';
export default defineComponent({
props: {... expand to see full code
import axios from 'axios';
export default defineComponent({
props: {
wrike: {
type: 'app',
app: 'wrike',
},
},
async run({ steps, $ }) {
const taskId = steps.trigger.event.taskId;
const eventType = steps.trigger.event.eventType;
const baseUrl = 'https://www.wrike.com/api/v4'; // Change to app-eu.wrike.com for EU accounts
const headers = { Authorization: `Bearer ${this.wrike.$auth.oauth_access_token}` };
// Add brief delay to avoid race condition with Wrike API propagation
await new Promise(r => setTimeout(r, 2000));
let taskData;
try {
const taskResponse = await axios.get(`${baseUrl}/tasks/${taskId}`, { headers });
taskData = taskResponse.data.data[0];
} catch (err) {
console.error('Wrike task fetch failed:', err.message);
return {
taskTitle: 'Unknown Task',
status: 'Unknown',
assignees: 'Unassigned',
dueDate: null,
permalink: `https://www.wrike.com`,
eventType,
isFallback: true,
};
}
// Resolve assignee IDs to display names
const responsibleIds = taskData.responsibleIds || [];
let assigneeNames = 'Unassigned';
if (responsibleIds.length > 0) {
try {
const contactIds = responsibleIds.join(',');
const contactResponse = await axios.get(`${baseUrl}/contacts/${contactIds}`, { headers });
const contacts = contactResponse.data.data;
assigneeNames = contacts.map(c => `${c.firstName} ${c.lastName}`).join(', ');
} catch (err) {
console.error('Assignee name fetch failed:', err.message);
assigneeNames = 'See Wrike';
}
}
// Format due date
const rawDue = taskData.dates?.due || null;
const dueDate = rawDue
? new Date(rawDue).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
: null;
return {
taskTitle: taskData.title,
status: taskData.status,
assignees: assigneeNames,
dueDate,
permalink: taskData.permalink,
eventType,
isFallback: false,
};
},
});Workflow Canvas > + > Run Node.js code
Add a filter step for relevant event types
Not every Wrike event needs a Slack message — comments and attachment uploads will also trigger the webhook. Add a second code step to filter by event type. Click '+' below the fetch step, select 'Run Node.js code', and write a condition that exits the workflow early if the event type is not in your approved list. Use $.flow.exit() to stop execution cleanly.
- 1Click '+' below the 'fetch_task_details' step
- 2Select 'Run Node.js code'
- 3Name the step 'filter_event_types'
- 4Write a condition checking steps.trigger.event.eventType against ['taskStatusChanged', 'taskCompleted', 'taskDueDateChanged']
- 5Call $.flow.exit('Skipping non-task event') if the condition is not met
Workflow Canvas > + > Slack > Send Message to Channel
Add the Slack step to send the message
Click '+' below the filter step. Search for 'Slack' and select it. Choose the action 'Send Message to Channel'. Connect your Slack account via OAuth — you'll need the 'chat:write' scope. In the 'Channel' field, type your target channel name (e.g., #project-phoenix). In the 'Message Text' field, reference the output from your fetch step using double-brace syntax.
- 1Click '+' below the filter step
- 2Search for 'Slack' and select it
- 3Choose 'Send Message to Channel'
- 4Click 'Connect Slack Account' and authorize with 'chat:write' scope
- 5Set the Channel field to your target Slack channel (e.g., #project-phoenix)
- 6Build the message text using fields from the fetch_task_details step output
channel: {{channel}}
ts: {{ts}}
Workflow Canvas > Slack Step > Blocks (JSON) field
Format the Slack message with Block Kit
Plain text Slack messages work but look amateurish for project notifications. Replace the 'Message Text' field approach with Slack's Block Kit format by switching to the 'Blocks' input in the Slack step. Block Kit lets you add bold task names, colored sidebars for status, and direct links to the Wrike task — all in the same step. Use the JSON structure shown in the Pro Tip code below.
- 1In the Slack step configuration, scroll down past 'Message Text'
- 2Find the 'Blocks' input field
- 3Switch the input to 'Expression mode' by clicking the {} toggle
- 4Paste your Block Kit JSON referencing fields from steps.fetch_task_details.$return_value
- 5Click 'Test' to preview the formatted message in Slack
Workflow Canvas > fetch_task_details step > Code editor
Add error handling for the fetch step
If Wrike's API is temporarily down or the task ID in the webhook is stale, your workflow will throw an unhandled error and the Slack message won't send. Wrap the API call in the fetch_task_details step with a try/catch block. In the catch block, use $.send.http or a fallback Slack message to alert the channel that an update occurred but details could not be retrieved.
- 1Click on the 'fetch_task_details' step to open its code editor
- 2Wrap the axios call in a try/catch block
- 3In the catch block, return a fallback object with status 'unknown' and a generic message string
- 4Click 'Test' to confirm the fallback activates when given a bad task ID
Workflow Canvas > Deploy button > Workflow Runs (sidebar)
Deploy and monitor the workflow
Click the grey 'Deploy' button in the top right of the workflow canvas. The button turns blue when the workflow is live. From this point, every matching Wrike event fires the workflow in real time. Go to 'Workflow Runs' in the left sidebar to see a live log of every execution — you can inspect each step's input/output, re-run failed events, and set up email alerts for errors.
- 1Click the 'Deploy' button in the top right — it will turn from grey to blue
- 2Trigger a real status change in Wrike
- 3Click 'Workflow Runs' in the left sidebar
- 4Find the run in the list and click it to inspect each step's output
- 5Enable error notifications under Settings > Notifications if you want email alerts on failures
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 a developer who will maintain the workflow long-term, you want sub-10-second notification delivery, or you need to make secondary API calls (like resolving Wrike user IDs to names) before posting to Slack. The Node.js code step is the real advantage here — it handles the Wrike API fetch, the assignee name lookup, and the error fallback in one step, without stitching together three separate no-code modules. If nobody on your team writes JavaScript and you need this running in 20 minutes without touching code, use Make instead — it has a native Wrike module with a visual webhook trigger that handles most of this without a single line of code.
Pipedream's free tier gives you 100 invocations per month. A mid-sized team making 5 task status changes per day hits 150/month — that's $0 on Make's free tier (1,000 operations/month) but forces a Pipedream upgrade to the $19/month Basic plan. At the Basic plan level, you get 10,000 invocations/month, which covers even active project teams comfortably. If you're already paying for Pipedream for other workflows, this one adds almost nothing to the bill — each run uses roughly 1-2 credits and completes in under 5 seconds.
Zapier has a native Wrike trigger called 'New Task Status Change' that requires zero API setup and registers the webhook automatically — that's genuinely easier than Pipedream's manual webhook registration step. Make's Wrike module handles the webhook and task detail fetch in the same visual module, cutting two steps down to one. n8n has a Wrike node but its webhook setup is equally manual and its Slack Block Kit support requires a code node anyway — no advantage over Pipedream there. Power Automate has no native Wrike connector, so you'd build the entire thing on HTTP request actions, which is more painful than Pipedream's approach. Pipedream wins on flexibility and speed once the webhook is configured, but the manual Wrike webhook registration is a genuine friction point that Zapier eliminates entirely.
Three things you'll hit after launch. First, Wrike's webhook delivery is not guaranteed — if your Pipedream endpoint is temporarily unreachable, Wrike retries up to 3 times over 15 minutes and then drops the event permanently. There's no replay queue. Build a fallback by enabling Pipedream's event history and checking it daily for the first week. Second, Wrike status labels are custom per workspace — the API returns the status display name as a string like 'In Progress' or whatever your team named it, not a standardized enum. If your team renames a status, your Slack message formatting logic still works, but any conditional logic you built around specific status strings will break silently. Third, Slack's Block Kit JSON is strict about field length limits — the 'text' field in a section block maxes out at 3,000 characters. Long Wrike task descriptions pulled into the message will cause the Slack API to return a 'invalid_blocks' error with no indication of which field exceeded the limit.
Ideas for what to build next
- →Add deadline reminder digest — Build a second Pipedream workflow that runs on a schedule (e.g., every weekday at 9am) to query Wrike for tasks due in the next 48 hours and post a daily summary to Slack instead of one-off alerts.
- →Route notifications by project to separate channels — Extend the filter step to map Wrike folder IDs to specific Slack channel IDs — so #project-phoenix gets Phoenix updates and #project-atlas gets Atlas updates, all from the same workflow.
- →Add a Slack reply thread for task comments — Build a companion workflow that listens for Wrike comment events and posts them as Slack thread replies under the original status-change message, keeping all discussion in one place.
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