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

How to Send Wrike Milestone Alerts to Slack with Power Automate

When a milestone task in Wrike is marked complete, Power Automate fires a celebratory message to a designated Slack channel with the milestone name, project, and completer.

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

Best for

Microsoft 365 teams already using Power Automate who want automated morale boosts in Slack when Wrike milestones close without buying extra tools.

Not ideal for

Teams needing sub-minute notification speed — Power Automate polls Wrike every 1–5 minutes, so very time-sensitive alerts should use Make with a Wrike webhook instead.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 22-person product team at a B2B SaaS company tracks quarterly launch phases in Wrike, each phase capped with a milestone task. Before this flow, team leads had to remember to post manually in #product-wins — which happened maybe half the time. Now every milestone completion drops a formatted Slack message into the channel within 3 minutes, including the milestone name, the person who closed it, and a link back to the Wrike task.

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 Power Automate

Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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 at least Member role in the project folder containing milestones — Viewer roles cannot be read by the API connection
Slack account with permission to post in the target channel — if the channel is private, the authorizing user must already be a member
Microsoft 365 license that includes Power Automate (Microsoft 365 Business Basic or higher) — Power Automate free tier does not include premium connectors; check whether Wrike requires a premium connector in your tenant
A SharePoint site with a list ready for deduplication logging (columns: TaskID as single line of text, CompletedAt as date/time)
Wrike milestone tasks must use the native Milestone task type — if your team uses a regular task with a custom field named 'Milestone', the task type filter in Step 4 will not match them

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task IDid
Task Titletitle
Task Typetype
Permalinkpermalink
Slack Channel Name
5 optional fields▸ show
Responsible IDsresponsibleIds
Completed DatecompletedDate
Parent Folder/Project NameparentIds
User First NamefirstName
User Last NamelastName

Step-by-Step Setup

1

make.powerautomate.com > My flows > + New flow > Automated cloud flow

Open Power Automate and create a new Automated cloud flow

Go to make.powerautomate.com and sign in with your Microsoft 365 account. In the left sidebar, click 'My flows', then click '+ New flow' at the top left. From the dropdown, select 'Automated cloud flow'. Give the flow a name like 'Wrike Milestone → Slack Celebration'. You will be prompted to choose a trigger — search for 'Wrike' in the trigger search box.

  1. 1Click 'My flows' in the left sidebar
  2. 2Click '+ New flow' in the top-left corner
  3. 3Select 'Automated cloud flow' from the dropdown
  4. 4Type a name: 'Wrike Milestone → Slack Celebration'
  5. 5In the trigger search box, type 'Wrike' and press Enter
What you should see: A new flow canvas opens with a trigger picker showing Wrike connector options.
Common mistake — If you do not see the Wrike connector, your Microsoft 365 tenant admin may have restricted third-party connectors. Ask your admin to enable it under the Power Platform admin center before continuing.
2

Flow canvas > Trigger picker > Wrike > When a task is completed

Set the Wrike trigger to 'When a task is completed'

From the Wrike trigger options, select 'When a task is completed'. This trigger polls the Wrike API on a schedule (default every 3 minutes) and fires when any task status changes to completed. You will be prompted to sign in to Wrike — click 'Sign in' and authorize Power Automate with your Wrike credentials in the popup.

  1. 1Click 'When a task is completed' from the Wrike trigger list
  2. 2Click 'Sign in' in the connection dialog
  3. 3Authorize Power Automate in the Wrike OAuth popup that opens
  4. 4Confirm the connection shows your Wrike account name
What you should see: The trigger card shows your Wrike account name and a green checkmark, and the trigger is labeled 'When a task is completed'.
Common mistake — The Wrike connector trigger fires on ALL completed tasks by default — not just milestones. You will filter by task type in Step 4. Do not skip that filter or your Slack channel will receive a message for every single task completion across all projects.
Power Automate
+
click +
search apps
Slack
SL
Slack
Set the Wrike trigger to 'Wh…
Slack
SL
module added
3

Flow canvas > Wrike trigger card > Folder ID field

Configure folder or project scope in the trigger

Inside the trigger card, look for the 'Folder ID' field. Set this to the specific Wrike folder or project that contains your milestones. You can find the Folder ID in Wrike by opening the project, clicking the three-dot menu, and selecting 'Copy link' — the ID is the alphanumeric string after '/folders/' in the URL. Scoping the trigger to one folder dramatically reduces noise and unnecessary API calls.

  1. 1Open the Wrike trigger card by clicking on it
  2. 2Click the 'Folder ID' input field
  3. 3Paste the Folder ID from your Wrike project URL
  4. 4Leave 'Status' blank — you will filter by task type next, not status
What you should see: The Folder ID field shows the alphanumeric ID of your target project, and the trigger card displays no validation errors.
4

Flow canvas > + New step > Control > Condition

Add a Condition action to filter milestone tasks only

Click '+ New step' below the trigger. Search for 'Condition' and select the built-in Condition control action. This is where you filter so only milestone-type tasks proceed. In Wrike, milestone tasks have a specific task type field value. In the left side of the condition, click 'Choose a value', select 'Dynamic content', and pick 'Task Type' from the Wrike trigger output. Set the operator to 'is equal to' and type 'Milestone' on the right.

  1. 1Click '+ New step'
  2. 2Search for 'Condition' and select 'Control - Condition'
  3. 3Click 'Choose a value' on the left side of the condition row
  4. 4Select 'Dynamic content' then pick 'Task Type' from the Wrike outputs
  5. 5Set operator to 'is equal to' and type 'Milestone' on the right
What you should see: The condition card shows: Task Type | is equal to | Milestone. The 'If yes' and 'If no' branches appear below.
Common mistake — Wrike's API returns task type as a string. The exact value is 'Milestone' with a capital M. If you type 'milestone' in lowercase, the condition never matches and no Slack messages are sent. Double-check casing.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Wrike
WR
notified
5

Flow canvas > Condition > If yes branch > Add an action > Wrike > Get task

Add a 'Get task' action to retrieve full milestone details

Inside the 'If yes' branch of the Condition, click 'Add an action'. Search for 'Wrike' and select 'Get task'. This action fetches the complete task record so you have access to fields like description, assignees, and custom fields that the trigger output alone does not include. In the 'Task ID' field, use the dynamic content picker to select 'Task ID' from the trigger output.

  1. 1Click 'Add an action' inside the 'If yes' branch
  2. 2Search 'Wrike' and select 'Get task'
  3. 3Click the 'Task ID' field and select 'Task ID' from dynamic content
  4. 4Leave all other fields at default
What you should see: The 'Get task' action card shows 'Task ID' populated with the dynamic token from the trigger. No error messages appear.
Common mistake — Do not use the 'Task ID' from the trigger directly in the Slack message template without this step. The trigger output gives minimal fields. Without 'Get task', you will be missing the task description and responsible party fields for your Slack message.
6

Flow canvas > If yes branch > Add an action > Wrike > Get user

Add a 'Get user' action to resolve the assignee name

Still inside the 'If yes' branch, click 'Add an action' and search for 'Wrike'. Select 'Get user'. In the 'User ID' field, use dynamic content to pick 'Responsible IDs' from the 'Get task' output. This resolves the user ID to a readable name so your Slack message says 'Completed by Sarah Chen' instead of displaying a raw ID string like 'KUABC123'. If a milestone has multiple assignees, this step returns the first in the array.

  1. 1Click 'Add an action' below 'Get task'
  2. 2Search 'Wrike' and select 'Get user'
  3. 3Click 'User ID' and pick 'Responsible IDs Item' from the 'Get task' dynamic content
  4. 4Save the action
What you should see: The 'Get user' card shows the Responsible ID token in the User ID field. The action is ready to return a user object including first name, last name, and email.
Common mistake — If no user is assigned to the milestone, the 'Responsible IDs' field is empty and this action fails with a 400 error. Handle this by wrapping the step in a 'Run after' configuration set to continue on failure, or add a null check condition before this step.

Paste this expression into a 'Compose' action placed between 'Get task' and the Slack 'Post message' action. It formats the completed date from ISO 8601 into a readable string and builds a fallback name when no assignee is present. Reference the Compose output as 'Outputs('Format_Milestone_Message')' in the Slack message body.

JavaScript — Code Step// Power Automate Expression — paste into a Compose action input
▸ Show code
// Power Automate Expression — paste into a Compose action input
// Builds the full Slack message string with safe fallbacks
concat(

... expand to see full code

// Power Automate Expression — paste into a Compose action input
// Builds the full Slack message string with safe fallbacks

concat(
  '🏁 Milestone complete: ',
  triggerOutputs()?['body/title'],
  ' — finished by ',
  if(
    empty(outputs('Get_user')?['body/firstName']),
    'Unassigned',
    concat(
      outputs('Get_user')?['body/firstName'],
      ' ',
      outputs('Get_user')?['body/lastName']
    )
  ),
  ' on ',
  formatDateTime(outputs('Get_task')?['body/completedDate'], 'MMMM d, yyyy'),
  '. View it here: ',
  outputs('Get_task')?['body/permalink']
)
7

Flow canvas > If yes branch > Add an action > Slack > Post message

Connect your Slack account

Click 'Add an action' below 'Get user'. Search for 'Slack' and select 'Post message'. If you have not connected Slack before, Power Automate will prompt you to sign in. Click 'Sign in' and authorize the Slack app in the OAuth popup — make sure you are authorizing with a Slack account that has permission to post in the target channel. The Slack connection is stored under 'Connections' in the left sidebar for reuse.

  1. 1Click 'Add an action' below 'Get user'
  2. 2Search 'Slack' and select 'Post message (V2)' — prefer V2 over the legacy version
  3. 3Click 'Sign in' when prompted
  4. 4Authorize Power Automate in the Slack OAuth popup
  5. 5Confirm your Slack workspace name appears in the connection dropdown
What you should see: The Slack 'Post message' action card shows your Slack workspace name in the connection field with no error badge.
Common mistake — The Power Automate Slack connector posts as a bot user named 'Power Automate'. You cannot change the display name to something like 'Milestone Bot' natively in this connector — that requires a custom Slack app. If branding matters, consider routing through a custom webhook URL instead.
Power Automate settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Power Automate
popup window
Connected
green checkmark
8

Flow canvas > Slack Post message card > Channel Name + Message Text fields

Configure the Slack message with milestone details

In the 'Post message' action, set the 'Channel Name' to your celebrations channel (e.g. #team-wins). In the 'Message Text' field, build the message using dynamic content tokens: Task Title, project/folder name, and the user's first and last name from the 'Get user' step. Write something direct — avoid emoji overload. You can also add a 'Link' field pointing to the Wrike task URL so the team can open the milestone in one click.

  1. 1Type or select your Slack channel in the 'Channel Name' field (e.g. #team-wins)
  2. 2Click the 'Message Text' field
  3. 3Type your message and insert dynamic tokens: 'Milestone complete: [Task Title] — finished by [First Name] [Last Name]. View it here: [Task Permalink]'
  4. 4Optionally add a celebratory emoji prefix to the message text directly, e.g. '🏁'
What you should see: The Message Text field shows a mix of static text and colored dynamic content tokens from Wrike. The Channel Name is set to your target channel.
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

Flow canvas > If yes branch > Add an action > SharePoint > Get items

Add a deduplication check using a SharePoint or Dataverse variable

Because this flow uses polling, there is a real risk of the same milestone triggering multiple Slack messages if the completion event appears in multiple poll cycles. The cleanest fix in Power Automate is to log completed Task IDs to a SharePoint list row after each successful post. At the start of the 'If yes' branch, add a 'Get items' action from SharePoint filtered by Task ID. Add another Condition: if the item already exists, skip posting. If it does not exist, proceed and then add a 'Create item' action to log the Task ID after the Slack post.

  1. 1Click 'Add an action' at the top of the 'If yes' branch, before the Slack step
  2. 2Search 'SharePoint' and select 'Get items'
  3. 3Set 'Site Address' and 'List Name' to a SharePoint list you create for this purpose (columns: TaskID as text, CompletedAt as date)
  4. 4Set 'Filter Query' to: TaskID eq '[Task ID dynamic token]'
  5. 5Add a Condition below: if 'value' array length is greater than 0, set the 'If yes' to 'Terminate' (skip), and move Slack post to the 'If no' branch
  6. 6After the Slack post, add 'Create item' in SharePoint to log the Task ID
What you should see: The flow now checks SharePoint before posting. A second poll of the same completed milestone finds the logged Task ID and terminates without sending a duplicate Slack message.
Common mistake — SharePoint 'Get items' with an OData filter only works if the column internal name matches exactly. If you name the column 'TaskID' in the UI, SharePoint may store it as 'TaskID' or 'TaskID_x0020_' depending on the list. Check the column internal name in List Settings > Column before writing the filter query.
10

Flow canvas > Save > Test > Manually > Run flow

Test the flow with a real Wrike milestone

Click 'Save' in the top toolbar, then click 'Test' in the top right corner. Select 'Manually' and then 'Run flow'. In Wrike, mark a milestone task as complete in the folder you configured. Wait up to 3 minutes for the polling trigger to fire. Return to Power Automate and click 'Refresh' on the flow run history to see if the run succeeded. Open your Slack channel to confirm the message arrived.

  1. 1Click 'Save' in the toolbar
  2. 2Click 'Test' in the top right
  3. 3Select 'Manually' and click 'Run flow'
  4. 4Switch to Wrike and mark a test milestone task as complete
  5. 5Return to Power Automate and watch the run history — refresh after 3 minutes
What you should see: The flow run history shows a green checkmark on all steps. Your Slack channel displays the celebration message with the correct milestone name and completer's name.
Common mistake — Power Automate's manual test mode does not always replay the trigger in real time — it waits for the next poll cycle. If the run does not appear within 5 minutes, check the flow's run history under 'My flows' rather than the test panel.
Power Automate
▶ Test flow
executed
Slack
Wrike
Wrike
🔔 notification
received
11

My flows > [flow name] > Three-dot menu > Edit > Flow settings

Turn on the flow and set error notifications

Once the test passes, click 'Turn on' if the flow is not already active. Go to 'My flows', find your flow, click the three-dot menu, and select 'Edit'. Scroll to the top-level flow settings and enable 'Send me an email notification when this flow fails'. This ensures you hear about broken runs rather than silently missing milestone celebrations. Set the poll frequency under the trigger settings — the default is 3 minutes, which is fine for this use case.

  1. 1Go to 'My flows' and find 'Wrike Milestone → Slack Celebration'
  2. 2Click the three-dot menu and select 'Edit'
  3. 3Click the gear icon or 'Flow settings' if available
  4. 4Toggle on 'Send me an email when this flow fails'
  5. 5Click 'Save'
What you should see: The flow shows as 'On' in My flows. The run history begins populating. You will receive an email if any run errors out.

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 Power Automate for this if your team already lives in Microsoft 365 and you do not want to introduce another SaaS tool just for automation. The Wrike and Slack connectors are pre-built, the SharePoint deduplication approach reuses infrastructure you likely already have, and IT is not going to ask questions about a tool that is already in the Microsoft license. If your organization has a developer who is comfortable with Node.js and you want sub-minute trigger speed, Pipedream with a Wrike webhook is a better fit — Power Automate's polling lag is the genuine tradeoff.

Cost

Power Automate pricing for this flow depends on your Microsoft 365 plan. If Wrike is a standard connector in your tenant, this flow costs nothing extra — it runs on the Power Automate license bundled with Microsoft 365 Business Basic ($6/user/month) or higher. If Wrike is classified as premium in your tenant, you need Power Automate Premium at $15/user/month. At 50 milestone completions per month, that is $0.30 per notification on the premium plan. Make handles the same volume on its free tier (1,000 operations/month), making Make roughly $15/month cheaper per user if you're only using automation for this one workflow.

Tradeoffs

Make beats Power Automate here on one specific thing: Wrike supports real webhooks in Make, which means zero polling lag — notifications fire in under 30 seconds. Zapier also has a Wrike integration, but its Wrike trigger only watches for new tasks, not completions, so you would need a workaround via status change polling. n8n gives you the most control over message formatting with its Function nodes and handles the deduplication in-memory without needing SharePoint. Pipedream is the fastest to iterate on if you are comfortable with JavaScript. Power Automate wins when your IT department controls the tooling list, when SharePoint is already your data layer, or when you want one fewer vendor invoice.

Three things you will hit after setup: First, the Wrike connector's polling occasionally double-fires the same event during platform congestion — the SharePoint deduplication step in Step 9 is not optional if you want clean results. Second, Power Automate's expression language treats null fields as errors rather than empty strings, so any milestone without an assignee will break the 'Get user' action unless you build an explicit null check using the empty() function. Third, Slack's Power Automate connector does not support Block Kit formatting — you get plain text only. If you want buttons, bold headers, or images in the celebration message, you need to call the Slack API directly via an HTTP action with a custom payload, which adds another 20 minutes of setup.

Ideas for what to build next

  • Add a weekly milestone digest to SlackBuild a second Scheduled cloud flow that runs every Friday at 4 PM, queries Wrike for all milestones completed that week, and posts a single summary message to Slack instead of one message per milestone — better for high-volume project phases.
  • Log milestone completions to a SharePoint reportExtend the existing flow to write each milestone completion to a SharePoint list with fields for project name, completer, and date. This gives project managers a running log to include in monthly stakeholder reports without manual data collection.
  • Trigger a Microsoft Teams adaptive card alongside the Slack messageAdd a parallel branch to the flow that posts a formatted Adaptive Card to a Teams channel — useful for organizations where leadership uses Teams while the delivery team uses Slack, so both audiences see the milestone win without duplicate manual announcements.

Related guides

Was this guide helpful?
Slack + Wrike overviewPower Automate profile →