

How to Post Wrike Standups to Slack with n8n
A scheduled n8n workflow that pulls active task and project status from Wrike every morning and posts a formatted summary to a designated Slack channel.
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 track work in Wrike and want automatic morning summaries in Slack without anyone manually writing a status update.
Not ideal for
Teams that need real-time task alerts — use a webhook-triggered workflow instead of a scheduled digest.
Sync type
scheduledUse case type
reportingReal-World Example
A 12-person product team at a SaaS company runs sprint work in Wrike. Every morning at 8:45 AM, n8n pulls all tasks due in the next 48 hours plus any tasks marked overdue, formats them by assignee, and posts a bulleted summary to #product-standup in Slack. Before this, the project manager spent 15–20 minutes each morning manually compiling the same update from Wrike's dashboard.
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 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Title | title | |
| Assignee ID | responsibleIds | |
| Due Date | dates.due | |
| Task Status | status | |
| Slack Channel ID | ||
3 optional fields▸ show
| Parent Folder / Project Name | parentIds |
| Task Permalink | permalink |
| Task Description | description |
Step-by-Step Setup
n8n Canvas > + New Workflow
Create a new n8n workflow
Open your n8n instance and click the orange 'New Workflow' button in the top right of the canvas. Name it something like 'Wrike Daily Standup → Slack' so it's easy to find later. You'll build this workflow left to right: trigger on the left, Wrike fetch in the middle, code transformation next, then Slack post on the right. Keep the canvas clean — this workflow has 5 nodes total.
- 1Click '+ New Workflow' in the top right
- 2Click the pencil icon next to 'My Workflow' and rename it to 'Wrike Daily Standup → Slack'
- 3Press Enter to save the name
Canvas > + Node > Schedule Trigger
Add a Schedule trigger
Click the '+' node placeholder on the canvas and search for 'Schedule Trigger'. This is the built-in n8n node — no credentials required. Set the interval to 'Days' and configure the time to fire at 8:45 AM in your team's local timezone. The timezone dropdown is in the trigger settings panel on the right — it defaults to UTC, which will cause the summary to post at the wrong time if you don't change it.
- 1Click the '+' placeholder node on the canvas
- 2Type 'Schedule' in the search box and select 'Schedule Trigger'
- 3Set 'Trigger Interval' to 'Days'
- 4Set 'Hour' to 8 and 'Minute' to 45
- 5Open the 'Timezone' dropdown and select your team's local timezone
Wrike > Account Settings > Apps & Integrations > API > Create App
Connect your Wrike account
Add an HTTP Request node after the Schedule Trigger — n8n does not have a native Wrike node, so you'll call the Wrike REST API directly. In the node settings, set the method to GET. Paste your Wrike API endpoint for tasks into the URL field. You'll authenticate using a permanent Wrike access token passed as a Bearer token in the Authorization header. Get your token from Wrike's Apps & Integrations page.
- 1Log in to Wrike and navigate to Account Settings > Apps & Integrations > API
- 2Click 'Create New App', name it 'n8n Standup', and copy the permanent access token
- 3Back in n8n, add an HTTP Request node after the Schedule Trigger
- 4Set Method to 'GET'
- 5Set URL to 'https://www.wrike.com/api/v4/tasks?status=Active&fields=["assignees","dates","status","description","parentIds"]'
- 6Under 'Authentication', select 'Header Auth', set Name to 'Authorization', Value to 'Bearer YOUR_TOKEN_HERE'
HTTP Request Node > URL Field > Expression Editor
Filter tasks to the relevant window
The raw Wrike API returns all active tasks — potentially hundreds. Add a second HTTP Request node or use n8n's built-in filtering to scope results. The cleaner approach: modify the Wrike URL query to filter by due date. Wrike accepts 'dueDate' range parameters in the query string. Set 'dueDateStart' to today's date and 'dueDateEnd' to 48 hours from now, formatted as ISO 8601. You'll construct these dates dynamically using n8n expressions.
- 1Click the HTTP Request node you created in Step 3
- 2Click the URL field and switch to 'Expression' mode using the toggle on the right
- 3Replace the static URL with the expression shown in the pro tip code section to inject dynamic date ranges
- 4Click 'Test Step' to verify the filtered response returns only near-term tasks
Canvas > + Node after Schedule Trigger > HTTP Request
Fetch overdue tasks in a second API call
Add a second HTTP Request node branching from the Schedule Trigger (or chained after the first). This call targets the same Wrike tasks endpoint but filters for tasks where 'dueDate' is before today and status is still Active. These are your overdue items — critical for any standup summary. You'll merge this response with the near-term tasks in the next step.
- 1Add a new HTTP Request node — click the '+' on the canvas
- 2Set Method to 'GET' and use the same Bearer token auth
- 3Set URL to filter tasks where dueDateEnd equals yesterday's date in ISO 8601 format (use an expression identical to Step 4 but subtract 1 day for the end date and set start far in the past)
- 4Label this node 'Wrike — Overdue Tasks' by clicking the node title
Canvas > + Node > Merge, then + Node > Code
Merge and transform task data with a Code node
Add a Merge node to combine the two Wrike API responses, then chain a Code node after it. The Code node is where the real work happens — you'll extract task title, assignee, due date, and status from each item, group tasks by assignee, and build the Slack message block string. Use JavaScript inside the n8n Code node. The full transformation script is in the pro tip section below — paste it directly into the Code node's editor.
- 1Add a Merge node after both HTTP Request nodes — connect both nodes to its inputs
- 2Set Merge Mode to 'Append' so both task arrays are combined into one list
- 3Add a Code node after the Merge node
- 4Paste the transformation script from the pro tip section into the JavaScript editor
- 5Click 'Test Step' and inspect the output — you should see a single formatted string ready for Slack
Paste this into the Code node that sits after your Merge node. It resolves assignee IDs to names using a pre-built lookup map (which you populate from the /contacts API response passed in as a second input), groups tasks by assignee, flags overdue vs. upcoming items, and builds the final Slack-formatted message string with mrkdwn bold headers and emoji indicators.
JavaScript — Code Node// n8n Code Node — Wrike Standup Message Builder▸ Show code
// n8n Code Node — Wrike Standup Message Builder // Inputs: items[0..N] = merged Wrike tasks, contactMap passed via $node['Wrike Contacts'].json const today = new Date();
... expand to see full code
// n8n Code Node — Wrike Standup Message Builder
// Inputs: items[0..N] = merged Wrike tasks, contactMap passed via $node['Wrike Contacts'].json
const today = new Date();
today.setHours(0, 0, 0, 0);
// Build contact ID → display name lookup from the contacts API response
const contactItems = $node['Wrike — Contacts'].json;
const contactMap = {};
if (contactItems && contactItems.data) {
for (const contact of contactItems.data) {
contactMap[contact.id] = `${contact.firstName} ${contact.lastName}`.trim();
}
}
// Collect all tasks from merged input
const allTasks = $input.all().map(item => item.json);
// Group tasks by primary assignee
const byAssignee = {};
for (const task of allTasks) {
const assigneeIds = task.responsibleIds || [];
const primaryId = assigneeIds[0] || 'unassigned';
const displayName = contactMap[primaryId] || primaryId;
if (!byAssignee[displayName]) {
byAssignee[displayName] = [];
}
const dueRaw = task.dates && task.dates.due ? task.dates.due : null;
const dueDate = dueRaw ? new Date(dueRaw) : null;
dueDate && dueDate.setHours(0, 0, 0, 0);
const isOverdue = dueDate && dueDate < today;
const dueDateStr = dueDate
? dueDate.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })
: 'no due date';
const emoji = isOverdue ? '🔴' : '🟡';
const label = isOverdue ? `overdue since ${dueDateStr}` : `due ${dueDateStr}`;
const link = task.permalink ? `<${task.permalink}|view>` : '';
byAssignee[displayName].push(`${emoji} ${task.title} — ${label} ${link}`.trim());
}
// Build Slack message
const dateHeader = today.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' });
let message = `🗓 *Daily Standup — ${dateHeader}*\n`;
if (Object.keys(byAssignee).length === 0) {
message += '\nNo active tasks due in the next 48 hours. ✅';
} else {
for (const [name, tasks] of Object.entries(byAssignee)) {
message += `\n*${name}*\n${tasks.join('\n')}\n`;
}
}
return [{ json: { slackMessage: message } }];Canvas > + Node > Slack > Credentials > Add OAuth2
Connect your Slack account
Add a Slack node after the Code node. Click 'Add Credential' in the node panel and select OAuth2. n8n will open a Slack authorization popup — sign in with the Slack workspace where you want to post standups. The Slack app that n8n creates needs the 'chat:write' and 'channels:read' OAuth scopes. If you're posting to a private channel, also add 'groups:write'.
- 1Add a Slack node and click 'Add Credential'
- 2Select 'OAuth2' and click 'Connect'
- 3In the Slack authorization popup, select your workspace and click 'Allow'
- 4Back in n8n, confirm a green checkmark appears next to the credential name
Slack Node > Resource: Message > Operation: Post
Configure the Slack message
In the Slack node, set Resource to 'Message' and Operation to 'Post'. Select your target channel from the dropdown — for example, #product-standup. In the 'Text' field, switch to Expression mode and reference the output from the Code node using '{{ $node["Code"].json["slackMessage"] }}'. Set 'As User' to true if you want the message to appear under a bot name rather than your personal account.
- 1Set Resource to 'Message'
- 2Set Operation to 'Post'
- 3Select your standup channel from the 'Channel' dropdown
- 4Click the 'Text' field and toggle to Expression mode
- 5Type {{ $node["Code"].json["slackMessage"] }} in the expression field
- 6Set 'Bot Name' to 'Standup Bot' and optionally set an emoji icon under 'Icon'
HTTP Request Node > ... Menu > Add Error Output > Slack Node
Add error handling with a fallback notification
Wrap the workflow in error handling so you know when the standup fails to post. In n8n, click the three-dot menu on any node and select 'Add Error Output'. Chain a second Slack node to the error output of your HTTP Request nodes. This fallback node posts a simple alert to a #alerts channel: 'Standup failed — Wrike API did not respond. Check n8n execution log.' Without this, a failed run is silent.
- 1Click the three-dot menu on the first HTTP Request node
- 2Select 'Add Error Output' — a red error connector appears on the node
- 3Add a new Slack node and connect it to the red error output
- 4Set it to post to your #alerts or #dev-ops channel with a hardcoded error message string
- 5Repeat for the second HTTP Request node
Canvas > Active Toggle (top right) > Execute Workflow (play icon)
Activate and verify the workflow
Click the toggle in the top right of the n8n canvas to activate the workflow. The toggle turns green and the workflow is now live. To verify without waiting until 8:45 AM, click the 'Execute Workflow' button (the play icon) to run it immediately. Check your Slack channel — the standup summary should appear within 15 seconds. Then check the n8n execution log to confirm all nodes returned green status.
- 1Click the gray toggle in the top right — it turns green labeled 'Active'
- 2Click the play icon to trigger an immediate manual execution
- 3Switch to your Slack channel and confirm the message appears
- 4Click 'Executions' in the left sidebar of n8n to review the run log
Scaling Beyond 200+ tasks returned per API call+ Records
If your volume exceeds 200+ tasks returned per API call records, apply these adjustments.
Handle Wrike API pagination
Wrike's /tasks endpoint returns a maximum of 100 items per call by default. If your workspace has more than 100 active tasks, add a second HTTP Request node that checks the response for a 'nextPageToken' field and fetches the next page. Chain multiple pages together in the Merge node before passing to the Code node.
Scope requests to specific folders
Instead of pulling all active tasks workspace-wide, call '/folders/{folderId}/tasks' for each relevant project folder. This keeps each API response small and avoids hitting the 100-item page limit. Store folder IDs as n8n environment variables so they're easy to update without editing workflow nodes.
Add a Wait node between API calls
Wrike enforces a 100-requests-per-minute rate limit per user token. If you're fetching tasks, overdue tasks, contacts, and multiple folder pages, you can hit this limit in a single run. Add a Wait node set to 700ms between each HTTP Request node to stay comfortably under the rate limit.
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 n8n for this if you need full control over message formatting, want to self-host to avoid per-task execution costs, or need to make multiple chained API calls (tasks + contacts + folders) that would eat Zapier task credits fast. n8n's Code node is genuinely useful here — Wrike doesn't return human-readable assignee names, it returns contact IDs, and resolving those requires a secondary API call and a lookup map that you can't build in Zapier's Formatter or Make's basic modules without awkward workarounds. The one scenario where you'd skip n8n: if your team is non-technical and needs someone other than you to edit the schedule or change channels — n8n's interface is not intuitive for non-builders, and Make would be a better fit there.
On cost: this workflow runs once per day, making 3 API calls per execution. That's 30 n8n workflow executions per month (3 nodes × ~10 runs if you count manual tests). n8n Cloud's Starter plan costs $20/month and includes 2,500 executions — you'll use roughly 1% of that. Self-hosted n8n is free. Compare that to Zapier: each Zap task counts separately, so 3 API steps × 22 weekday runs = 66 tasks/month. Zapier's free tier caps at 100 tasks/month, so you'd stay free — but add error-handling nodes and you'll push past 100 fast. Make is cheapest at scale: 10,000 operations/month free, and this workflow uses about 66 operations/month. For this specific workflow, cost is not a differentiator — pick the platform your team can maintain.
Make handles this use case well with its built-in HTTP module and Array Aggregator — no code required to build the grouped message, just module chaining. Zapier has a Wrike integration with pre-built triggers, which saves setup time, but you can't make conditional secondary API calls without Code by Zapier. Power Automate has no native Wrike connector and would require the same raw HTTP calls as n8n, with worse debugging tools. Pipedream is a strong alternative — its Node.js steps are identical in capability to n8n's Code node, and it has a cleaner UI for chaining async API calls. n8n wins here specifically because the combination of self-hosting (no execution cost ceiling) and a visual canvas that non-developers can at least read makes it the most practical long-term choice for an operations team.
Three things you'll run into after setup. First, Wrike's contact ID problem: the /tasks response gives you IDs like 'KUABCD12' for assignees. The /contacts lookup works, but if a user was deleted from Wrike, their ID returns nothing — your Code node will show a blank name for that person's tasks unless you add a fallback. Second, Slack mrkdwn vs. blocks: the text field in Slack's chat.postMessage supports basic mrkdwn (*bold*, _italic_, <url|label>), but if you want richer formatting (colored sidebars, buttons, section blocks), you need to switch the Slack node to use Block Kit JSON instead of a plain text string — that requires restructuring the Code node output entirely. Third, n8n's Schedule Trigger has no built-in retry on failure. If the Wrike API is down at 8:45 AM, the standup is skipped permanently for that day. There is no catch-up run. For daily standups, this is usually acceptable — but set up the error-output Slack alert so at minimum you know when it fails.
Ideas for what to build next
- →Add a weekly digest variant — Clone this workflow and change the Schedule Trigger to fire every Monday at 8:00 AM with a wider date window (7 days instead of 48 hours). Post it to a separate #weekly-status channel for leadership visibility without cluttering the daily standup channel.
- →Route summaries to per-team channels — Add a Switch node after the Code node that checks the Wrike folder/project name and routes each team's tasks to their own Slack channel — #engineering-standup, #design-standup, #marketing-standup. This removes the need for one noisy all-hands channel.
- →Write standup replies back to Wrike — Build a companion workflow that listens for Slack messages in the standup channel (via webhook) and uses the Wrike API to post the team's responses as task comments. This creates a written record in Wrike without asking anyone to update two systems manually.
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