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

How to Post Wrike Standup Summaries to Slack with Pipedream

A scheduled Pipedream workflow pulls active task and deadline data from Wrike each morning and posts a formatted project status summary to one or more Slack channels.

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

Best for

Engineering or product teams who track work in Wrike and want a daily digest posted to Slack before standup so everyone arrives prepared.

Not ideal for

Teams that need real-time task-level pings in Slack every time a Wrike task changes — use a webhook-based workflow instead.

Sync type

scheduled

Use case type

reporting

Real-World Example

💡

A 22-person product team at a B2B SaaS company runs standups at 9:30 AM. Before this workflow, the PM manually copied overdue tasks from Wrike into a Slack message every morning — a 10-minute task that got skipped on busy days. Now Pipedream fires at 9:00 AM, queries Wrike for tasks due within 48 hours or marked overdue, and posts a grouped summary to #product-standup. The PM's manual prep time dropped to zero.

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 an OAuth app or personal access token — standard plans include API access but confirm your plan supports it
Wrike folder or project ID for the projects you want to report on — find this in the Wrike URL when viewing a project: app.wrike.com/workspace/folder/FOLDERID
Slack workspace admin access or permission to install apps — required to authorize Pipedream's Slack OAuth connection
Slack bot or user must already be a member of the target channel before the workflow runs — Pipedream cannot join channels automatically
Pipedream account on any plan — the free tier includes 10,000 credits/month which covers this workflow running daily

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Titletitle
Task Statusstatus
Due Datedates.due
Assignee IDsresponsibleIds
Task Permalinkpermalink
3 optional fields▸ show
Parent Project / Folder NameparentIds
Task Priorityimportance
Task Description (truncated)description

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 'Add a trigger' prompt at the top. This is where the schedule lives — not inside any app connection.

  1. 1Click 'Workflows' in the left sidebar
  2. 2Click the blue 'New Workflow' button
  3. 3Click 'Add a trigger' on the blank canvas
What you should see: A trigger selection panel slides in from the right showing a search bar and a list of trigger sources.
Common mistake — Pipedream auto-saves workflow state, but a new workflow starts in Draft mode. It will not run on schedule until you click Deploy. Don't assume saving the trigger means it's active.
2

Trigger Panel > Schedule > Cron Expression

Set a daily schedule trigger

In the trigger panel, search for 'Schedule' and select the 'Schedule' source. Choose 'Cron Expression' for full control over timing — the simple interval picker won't let you target a specific time of day. Enter a cron expression matching your standup prep window, e.g. 0 9 * * 1-5 fires at 9:00 AM UTC Monday through Friday. Confirm the next scheduled run time shown in the preview before moving on.

  1. 1Type 'Schedule' in the trigger search bar
  2. 2Click the 'Schedule' source
  3. 3Select 'Cron Expression' from the schedule type dropdown
  4. 4Enter your cron string, e.g. '0 9 * * 1-5'
  5. 5Verify the 'Next run' preview timestamp matches your intended time
What you should see: The trigger card shows your cron expression and displays the next 3 scheduled run times so you can confirm the timezone offset is correct.
Common mistake — Pipedream schedules run in UTC. If your team is in US Eastern time, 9 AM ET is 14:00 UTC in winter and 13:00 UTC in summer. Get this wrong and the summary posts mid-standup instead of before it.
Pipedream
+
click +
search apps
Slack
SL
Slack
Set a daily schedule trigger
Slack
SL
module added
3

Workflow Canvas > + Add Step > Wrike > Get Tasks

Connect your Wrike account

Click the '+' button below the trigger to add a new step. Search for 'Wrike' and select it. Choose the action 'Get Tasks' (or 'Run API Request' if you need more query control). Click 'Connect Account' and authenticate via OAuth — Pipedream will open a Wrike authorization popup. Select the Wrike workspace that contains your active projects.

  1. 1Click '+' below the Schedule trigger
  2. 2Search 'Wrike' in the step search panel
  3. 3Select the 'Wrike' app
  4. 4Choose the 'Get Tasks' action
  5. 5Click 'Connect Account' and complete the OAuth popup
  6. 6Select your workspace from the account dropdown if prompted
What you should see: The Wrike step shows a green checkmark next to your account name and displays the action configuration fields below.
Pipedream settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Pipedream
popup window
Connected
green checkmark
4

Wrike Step > Configuration Fields

Configure the Wrike task query

In the Wrike step configuration, set the 'Status' filter to exclude completed tasks — use 'Active' or pass the status values ['Active', 'InProgress'] depending on your Wrike setup. Set the 'Due Date' range to return tasks due within the next 2 days plus any overdue tasks. Use the 'Fields' parameter to request title, assignees, due date, status, and permalink so you have everything needed for the summary message. If you manage multiple projects, add a 'Folder ID' or 'Project ID' filter to scope the query — otherwise you'll pull every task in the workspace.

  1. 1Set 'status' field to 'Active' or your equivalent in-progress statuses
  2. 2Set due date range to cover today through 48 hours from now
  3. 3Add 'overdue: true' or equivalent filter for past-due tasks
  4. 4Set 'fields' to include title, assignees, dueDate, status, permalink
  5. 5Optionally paste a Wrike Folder ID to limit scope to one project
What you should see: Click 'Test' on the step. You should see a JSON response containing an array of task objects with title, status, dueDate, and assignees populated.
Common mistake — Wrike's API returns assignee data as user IDs, not names. If you want the Slack message to show real names, you'll need an additional Wrike 'Get User' call or a lookup map in a code step. Plan for this before formatting the message.
5

Workflow Canvas > + Add Step > Run Node.js Code

Add a Node.js code step to format the summary

Click '+' below the Wrike step and choose 'Run Node.js code'. This step takes the raw Wrike task array and builds the Slack Block Kit message payload. Group tasks by status (overdue, due today, due tomorrow), format the due dates into readable strings, and resolve assignee IDs to names using a lookup object or a secondary Wrike API call. The output of this step should be a complete Slack blocks array ready to POST.

  1. 1Click '+' below the Wrike step
  2. 2Select 'Run Node.js code' from the step type list
  3. 3Paste your formatting code into the editor (see Pro Tip below)
  4. 4Reference the Wrike step output using steps.wrike.$return_value
  5. 5Click 'Test' to confirm the output is a valid Slack blocks array
What you should see: The code step returns a JavaScript object with a 'blocks' array containing header, section, and divider blocks populated with real task data from the Wrike test output.
Common mistake — Pipedream's code step editor does not lint Block Kit JSON. A missing comma inside the blocks array will silently fail when Slack rejects the payload — the Pipedream step will show success but Slack will return an error. Test your block payload at api.slack.com/tools/block-kit-builder before running the full workflow.

Paste this into the Node.js code step (Step 5 on the canvas). It takes the Wrike task array from steps.wrike.$return_value, resolves assignee IDs using a pre-built contact map, groups tasks into overdue/today/upcoming buckets, and returns a complete Slack Block Kit payload. Replace the userMap object with real entries from your Wrike workspace contacts API response.

JavaScript — Code Step// Pipedream Node.js code step
▸ Show code
// Pipedream Node.js code step
// Reference: steps.wrike.$return_value must be an array of Wrike task objects
export default defineComponent({

... expand to see full code

// Pipedream Node.js code step
// Reference: steps.wrike.$return_value must be an array of Wrike task objects

export default defineComponent({
  async run({ steps, $ }) {
    const tasks = steps.wrike.$return_value?.data || [];

    // Replace with real Wrike user IDs from GET /contacts
    const userMap = {
      'KUAB12345': 'Sarah Chen',
      'KUCD67890': 'Marcus Webb',
      'KUEF11223': 'Jordan Park',
    };

    const now = new Date();
    const todayStr = now.toISOString().split('T')[0];
    const tomorrowStr = new Date(now.getTime() + 86400000).toISOString().split('T')[0];

    const priorityEmoji = { High: '🔴', Normal: '🟡', Low: '⚪' };

    const formatTask = (task) => {
      const assignees = (task.responsibleIds || [])
        .map(id => userMap[id] || id)
        .join(', ') || 'Unassigned';
      const priority = priorityEmoji[task.importance] || '🟡';
      const dueRaw = task.dates?.due;
      let dueLabel = 'No due date';

      if (dueRaw) {
        const dueDate = dueRaw.split('T')[0];
        if (dueDate < todayStr) {
          dueLabel = `Overdue (${dueDate})`;
        } else if (dueDate === todayStr) {
          dueLabel = 'Due Today';
        } else if (dueDate === tomorrowStr) {
          dueLabel = 'Due Tomorrow';
        } else {
          dueLabel = `Due ${dueDate}`;
        }
      }

      return {
        type: 'section',
        text: {
          type: 'mrkdwn',
          text: `${priority} *<${task.permalink}|${task.title}>*\nDue: ${dueLabel} · Assigned to: ${assignees} · Status: ${task.status?.name || task.status}`
        }
      };
    };

    const overdue = tasks.filter(t => t.dates?.due && t.dates.due.split('T')[0] < todayStr);
    const dueToday = tasks.filter(t => t.dates?.due && t.dates.due.split('T')[0] === todayStr);
    const upcoming = tasks.filter(t => t.dates?.due && t.dates.due.split('T')[0] > todayStr);
    const noDue = tasks.filter(t => !t.dates?.due);

    if (tasks.length === 0) {
      return {
        blocks: [
          {
            type: 'section',
            text: { type: 'mrkdwn', text: ':white_check_mark: No active tasks due in the next 48 hours. Enjoy the quiet.' }
          }
        ]
      };
    }

    const blocks = [
      {
        type: 'header',
        text: { type: 'plain_text', text: `📋 Daily Wrike Standup — ${todayStr}`, emoji: true }
      },
      { type: 'divider' }
    ];

    if (overdue.length > 0) {
      blocks.push({
        type: 'section',
        text: { type: 'mrkdwn', text: `*🚨 Overdue (${overdue.length})*` }
      });
      blocks.push(...overdue.map(formatTask));
      blocks.push({ type: 'divider' });
    }

    if (dueToday.length > 0) {
      blocks.push({
        type: 'section',
        text: { type: 'mrkdwn', text: `*📅 Due Today (${dueToday.length})*` }
      });
      blocks.push(...dueToday.map(formatTask));
      blocks.push({ type: 'divider' });
    }

    if (upcoming.length > 0) {
      blocks.push({
        type: 'section',
        text: { type: 'mrkdwn', text: `*🔜 Upcoming (${upcoming.length})*` }
      });
      blocks.push(...upcoming.map(formatTask));
    }

    return { blocks };
  }
});
6

Workflow Canvas > + Add Step > Slack > Send Message to Channel

Connect your Slack account

Click '+' below the code step and search for 'Slack'. Select the 'Send Message to Channel' action. Click 'Connect Account' and authorize via OAuth. Make sure you authorize as a user or bot that is already a member of the target channel — Pipedream will not auto-join channels. You can also use 'Send Message Using Block Kit' if your code step outputs a blocks array, which gives you richer formatting.

  1. 1Click '+' below the Node.js code step
  2. 2Search 'Slack' in the step panel
  3. 3Select 'Send Message to Channel' or 'Send Message Using Block Kit'
  4. 4Click 'Connect Account' and complete Slack OAuth
  5. 5Confirm the authorized account appears in the account dropdown
What you should see: The Slack step shows a green checkmark next to your workspace name and exposes the Channel, Text, and Blocks configuration fields.
7

Slack Step > Configuration Fields

Configure the Slack message target and payload

In the Channel field, type the channel name or ID where the summary should post — e.g. #product-standup. If posting to multiple channels, you'll need to duplicate the Slack step once per channel or loop through a channel list in the code step. In the Blocks field, reference the output of your code step using the expression picker: steps.nodejs.$return_value.blocks. Leave the Text field populated with a plain-text fallback like 'Daily Wrike standup summary' for Slack clients that don't render blocks.

  1. 1Type or paste the target channel name in the 'Channel' field
  2. 2Click the expression picker next to the 'Blocks' field
  3. 3Navigate to steps.nodejs.$return_value.blocks
  4. 4Add a plain-text fallback in the 'Text' field
  5. 5Set 'Bot Name' and 'Bot Icon' if you want a branded sender appearance
What you should see: The Blocks field shows the expression reference in orange/yellow pill format, confirming it will pull the dynamic value from the code step at runtime.
Common mistake — Slack channel IDs (C01ABC123) are more reliable than names (#channel-name) in API calls. If you rename a channel later, an ID reference keeps working while a name reference breaks silently.
8

Node.js Code Step > Editor (add early return guard)

Add error handling for empty task results

If Wrike returns zero tasks — common on holidays or quiet sprints — the code step will produce an empty blocks array and Slack will reject the API call. Add a conditional check in your Node.js code step: if the task array length is zero, return a short 'No tasks due today' message instead of an empty payload. Alternatively, add a Filter step between the Wrike and code steps that halts the workflow when no tasks are returned, avoiding a Slack post entirely.

  1. 1Open the Node.js code step editor
  2. 2Add an array length check at the top of the function
  3. 3Return a fallback message object if tasks.length === 0
  4. 4Re-test the step with an empty array to confirm the fallback triggers
What you should see: When you manually set the Wrike output to an empty array during testing, the code step returns a fallback message object instead of throwing or returning null.
9

Workflow Canvas > Test Workflow (top bar)

Test the full workflow end-to-end

Click 'Test Workflow' at the top of the canvas. Pipedream runs each step in sequence using live data. Watch the step-by-step output panel on the right — each step shows green (pass), yellow (warning), or red (error). Check the Slack channel after the test run to confirm the message appeared with correct formatting. Verify task titles, assignee names, due dates, and the permalink to the Wrike task all render correctly.

  1. 1Click 'Test Workflow' in the top bar
  2. 2Watch each step turn green in the execution panel
  3. 3Open your Slack channel and confirm the message posted
  4. 4Click a task permalink in the Slack message to confirm it links correctly in Wrike
  5. 5Check that overdue tasks appear in the correct section of the summary
What you should see: All steps show green in the execution panel, and the Slack channel contains a formatted standup summary with tasks grouped by urgency, real assignee names, and working Wrike links.
Common mistake — The 'Test Workflow' button uses a synthetic schedule trigger event, not a real one. If your code step references trigger metadata like the run timestamp, use new Date() inside the code rather than relying on the trigger's event payload during testing.
Pipedream
▶ Deploy & test
executed
Slack
Wrike
Wrike
🔔 notification
received
10

Workflow Canvas > Deploy (top right button)

Deploy and confirm the schedule is active

Click the 'Deploy' button in the top right of the workflow canvas. Pipedream changes the workflow state from Draft to Active. You'll see a confirmation banner and the workflow card in your dashboard will show an 'Active' badge. Check the 'Logs' tab the next morning to confirm the first real scheduled run completed without errors. The log will show each step's duration and output.

  1. 1Click the blue 'Deploy' button in the top right
  2. 2Confirm the status badge on the workflow card switches to 'Active'
  3. 3Navigate to the 'Logs' tab on the workflow
  4. 4Check back the next morning to review the first real execution log
What you should see: The workflow card on the Pipedream dashboard shows an 'Active' badge and a 'Next Run' timestamp that matches your cron schedule.
Common mistake — Confirm your workflow timezone matches your business timezone — n8n uses the instance timezone by default. Also verify the workflow is saved and set to Active, since Schedule Triggers won't fire on inactive workflows.
11

pipedream.com > Workflows > [Your Workflow] > Logs

Monitor and iterate on message format

After the workflow runs for a week, review whether the task grouping and field selection are actually useful to your team. Pipedream's Logs tab shows the full input and output of every step in every historical run — use this to debug any formatting issues without re-running the live workflow. Common improvements at this stage: adding task priority field, linking to the specific Wrike project (not just the task), and threading replies so the channel stays clean.

  1. 1Open your workflow and click the 'Logs' tab
  2. 2Select any past run to inspect step-by-step inputs and outputs
  3. 3Edit the Node.js code step to adjust grouping or add fields
  4. 4Click 'Deploy' again after any code changes to push updates live
What you should see: The Logs tab shows a row for each completed run with timestamps, duration, and pass/fail status. Clicking any row expands the full step trace.
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.

Scaling Beyond 50+ tasks returned per Wrike API call+ Records

If your volume exceeds 50+ tasks returned per Wrike API call records, apply these adjustments.

1

Paginate Wrike API responses

Wrike's task API returns a maximum of 100 records per request by default. If a folder has more than 100 active tasks, use the 'nextPageToken' field in the response to fetch subsequent pages inside a while loop in your Node.js code step. Without pagination, you'll silently miss tasks beyond the first page.

2

Cap the Slack message at 20 tasks

Slack Block Kit enforces a 50-block per message limit. With headers and dividers, you can fit roughly 20-22 tasks safely. Sort tasks by urgency (overdue first, then due today, then importance) before slicing the array so the most critical items always make the cut.

3

Split summaries by project folder

When task volume is high, a single combined Slack message becomes unreadable. Query Wrike by individual folder ID and post a separate Slack message per project. This also lets you route each summary to the correct project channel rather than flooding one general channel.

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 at least one person comfortable reading Node.js, even if they don't write it from scratch. The reason: Wrike returns assignee data as opaque user IDs, status as custom workspace-specific strings, and dates in ISO 8601 format — none of which are display-ready. Turning that raw output into a legible Slack message requires real string manipulation and a lookup step. Pipedream's Node.js code step handles all of that in one place. The other reason to pick Pipedream here is the scheduled trigger's flexibility — cron syntax gives you exact timing control that simpler tools cap at 15-minute intervals. If your team has zero coding tolerance, build this in Zapier or Make instead.

Cost

Pipedream's free tier includes 10,000 credits per month. This workflow costs roughly 3-4 credits per run: 1 for the schedule trigger, 1 for the Wrike step, 1 for the code step, and 1 for the Slack step. Running daily Monday through Friday means about 22 runs per month, totaling roughly 88 credits. You'd need to run this workflow 113 times per month to hit the free tier limit — that's 5+ runs per day, every day. For a single team, cost is not a factor on Pipedream's free plan. If you scale to 10 projects each with their own summary posting to separate channels, you're at ~880 credits/month — still well within free.

Tradeoffs

Make handles this use case with a cleaner visual interface and no code required for basic formatting using its text aggregator and array iterator modules. Make's scheduled trigger also fires reliably and its Wrike and Slack modules are more configurable out of the box. n8n gives you the same Node.js flexibility as Pipedream but self-hosted, which matters if your organization has data residency requirements — Pipedream's cloud infrastructure won't clear those for some enterprise security teams. Zapier can build a version of this but the multi-step conditional logic for grouping tasks by urgency pushes you into Zapier's Code step, which then costs you a higher plan anyway. Power Automate has a solid Wrike connector but its Block Kit message construction requires JSON composed in expression fields, which is painful to debug. Pipedream wins here specifically because the code step and the no-code Slack action sit side by side on the same canvas — you get code where you need it and click-through UI where you don't.

Three things you'll run into after the workflow is live. First, Wrike's OAuth token silently expires after extended inactivity — the Pipedream step will show an auth error in logs but won't send you a failure alert unless you've explicitly configured error notifications under Workflow Settings. Set those up on day one. Second, Wrike custom statuses vary by workspace. If someone renames 'In Progress' to 'Active Dev' in Wrike, your status filter stops matching and the task silently disappears from the summary. Build the filter using status IDs, not status name strings — fetch the IDs once from GET /workflows and hardcode them. Third, Slack's Block Kit has a 3,000 character limit per text block. Long task titles plus description excerpts can push individual blocks over this limit, causing Slack to reject the entire message. Truncate text fields in your code step to 200 characters max before building the payload.

Ideas for what to build next

  • Post to multiple channels by projectAdd a loop in the Node.js code step that segments tasks by Wrike folder/project and sends a separate Slack message to each project's dedicated channel, instead of one combined summary.
  • Add a weekly digest variantClone the workflow, change the cron to run Monday mornings, and modify the Wrike date filter to cover the full upcoming week — gives the team a broader view at the start of each sprint without touching the daily flow.
  • Write Slack reactions back to WrikeBuild a companion Pipedream webhook workflow that listens for a specific Slack emoji reaction (e.g. ✅) on the standup summary message and marks the corresponding Wrike task as complete via the Wrike API.

Related guides

Was this guide helpful?
Slack + Wrike overviewPipedream profile →