Intermediate~15 min setupCommunication & Project ManagementVerified April 2026
Slack logo
Wrike logo

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-time

Use case type

notification

Real-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.

/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 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.

Wrike account with API access enabled and at least one active project with tasks
Wrike OAuth app credentials or authorization via Pipedream's built-in Wrike connected account (requires wsReadWrite scope)
Slack workspace where you have permission to add a bot and post to the target project channel
Slack connected account in Pipedream with the chat:write and channels:read OAuth scopes
Pipedream account — free tier works for testing; paid plan ($19/month) required for always-on webhook processing beyond 100 invocations/month

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task IDtaskId
Event TypeeventType
Task Titletitle
Task Statusstatus
Permalinkpermalink
Slack Channel ID
3 optional fields▸ show
AssigneesresponsibleIds
Due Datedates.due
Project / Folder NameparentIds

Step-by-Step Setup

1

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.

  1. 1Click 'Workflows' in the left sidebar
  2. 2Click the blue 'New Workflow' button in the top right
  3. 3Name the workflow 'Wrike → Slack Task Notifications' at the top
What you should see: You should see a blank workflow canvas with a 'Add a trigger' prompt at the top and no steps below it.
2

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.

  1. 1Click 'Add a trigger'
  2. 2Type 'Wrike' in the search box
  3. 3Select 'Wrike' from the app list
  4. 4Choose 'New Event (Instant)' as the trigger type
  5. 5Click 'Connect Wrike Account' and authorize via OAuth
What you should see: You should see a green 'Connected' badge next to your Wrike account and a unique Pipedream webhook URL displayed below the trigger config.
Common mistake — Wrike's OAuth scopes must include 'wsReadWrite' for the webhook to register correctly. If you only grant read access, Wrike cannot send events to Pipedream.
Pipedream
+
click +
search apps
Slack
SL
Slack
Add the Wrike webhook trigger
Slack
SL
module added
3

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'.

  1. 1Copy the webhook URL from the Pipedream trigger config panel
  2. 2In a separate tab, go to app-us.wrike.com > Settings > Integrations > API
  3. 3Use the Wrike API explorer or a tool like Postman to POST to /webhooks with your copied URL
  4. 4Set 'eventType' to ['taskStatusChanged', 'taskCompleted', 'taskDueDateChanged']
  5. 5Return to Pipedream and click 'Listen for events'
What you should see: Wrike's webhook list should show your Pipedream URL as an active webhook. In Pipedream, the trigger panel will show 'Listening for events...'
Common mistake — Wrike webhooks are workspace-scoped by default. If you only want notifications from one specific project or folder, add the 'folderId' parameter when registering the webhook — otherwise every task change in the workspace will trigger the workflow.
4

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.

  1. 1Open Wrike in a separate browser tab
  2. 2Navigate to any project task
  3. 3Change the task status to 'Completed'
  4. 4Return to Pipedream and wait for the event to appear in the trigger panel
  5. 5Click the event to expand the JSON payload
What you should see: You should see a JSON object in Pipedream's trigger panel containing fields like 'taskId', 'eventType', 'folderId', and 'changedFields'. The event timestamp should match when you made the change in Wrike.
Pipedream
▶ Deploy & test
executed
Slack
Wrike
Wrike
🔔 notification
received
5

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.

  1. 1Click the '+' button below the trigger step
  2. 2Select 'Run Node.js code' from the step type list
  3. 3Name the step 'fetch_task_details'
  4. 4Paste in the code from the Pro Tip section below
  5. 5Click 'Test' to run the step and confirm it returns task data
What you should see: After clicking 'Test', the step's return value panel should show a JSON object with 'taskTitle', 'status', 'assignees', 'dueDate', and 'permalink' populated from Wrike's API.
Common mistake — Wrike's API base URL differs by data center. US accounts use 'https://www.wrike.com/api/v4' and EU accounts use 'https://app-eu.wrike.com/api/v4'. Using the wrong base URL returns a 404 with no helpful error message.

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,
    };
  },
});
6

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.

  1. 1Click '+' below the 'fetch_task_details' step
  2. 2Select 'Run Node.js code'
  3. 3Name the step 'filter_event_types'
  4. 4Write a condition checking steps.trigger.event.eventType against ['taskStatusChanged', 'taskCompleted', 'taskDueDateChanged']
  5. 5Call $.flow.exit('Skipping non-task event') if the condition is not met
What you should see: When you test with a comment event, you should see the step return 'Skipping non-task event' and the workflow stops. For a status change event, the step passes through and the next step runs.
Common mistake — $.flow.exit() in Pipedream marks the execution as 'skipped', not 'error' — this is correct behavior and won't count as a failed run or trigger any error alerts.
Slack
SL
trigger
filter
Type
matches criteria?
yes — passes through
no — skipped
Wrike
WR
notified
7

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.

  1. 1Click '+' below the filter step
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Send Message to Channel'
  4. 4Click 'Connect Slack Account' and authorize with 'chat:write' scope
  5. 5Set the Channel field to your target Slack channel (e.g., #project-phoenix)
  6. 6Build the message text using fields from the fetch_task_details step output
What you should see: After clicking 'Test', you should see the message appear in your target Slack channel within 5 seconds. Pipedream's step panel will show a green checkmark and the Slack message timestamp.
Common mistake — If your Slack workspace requires the bot to be explicitly invited to private channels, the step will fail silently with a 'channel_not_found' error even though the channel exists. Run '/invite @Pipedream' in the private channel before testing.
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
8

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.

  1. 1In the Slack step configuration, scroll down past 'Message Text'
  2. 2Find the 'Blocks' input field
  3. 3Switch the input to 'Expression mode' by clicking the {} toggle
  4. 4Paste your Block Kit JSON referencing fields from steps.fetch_task_details.$return_value
  5. 5Click 'Test' to preview the formatted message in Slack
What you should see: The Slack message should show a bold task title, the new status in a colored badge-style section, the assignee name, and a clickable 'View in Wrike' link.
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.
9

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.

  1. 1Click on the 'fetch_task_details' step to open its code editor
  2. 2Wrap the axios call in a try/catch block
  3. 3In the catch block, return a fallback object with status 'unknown' and a generic message string
  4. 4Click 'Test' to confirm the fallback activates when given a bad task ID
What you should see: When tested with an invalid task ID, the step should return the fallback object instead of throwing an error, and the workflow should continue to the Slack step and post the fallback message.
10

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.

  1. 1Click the 'Deploy' button in the top right — it will turn from grey to blue
  2. 2Trigger a real status change in Wrike
  3. 3Click 'Workflow Runs' in the left sidebar
  4. 4Find the run in the list and click it to inspect each step's output
  5. 5Enable error notifications under Settings > Notifications if you want email alerts on failures
What you should see: The workflow run list should show a green 'Success' badge for the test event. The Slack channel should contain the formatted message within 10 seconds of the Wrike status change.
Common mistake — Pipedream free tier workflows pause after 30 seconds of inactivity in some regions. If you're on the free plan and the workflow stops firing after a few days, check the workflow status — it may have been auto-paused. Paid plans keep workflows perpetually active.

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 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.

Cost

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.

Tradeoffs

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 digestBuild 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 channelsExtend 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 commentsBuild 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

Was this guide helpful?
Slack + Wrike overviewPipedream profile →