

How to Send Asana Milestone Updates to Slack with Zapier
When an Asana task is completed or a deadline approaches, Zapier automatically posts a formatted status message to the relevant Slack channel.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams of 5-50 people who track project milestones in Asana and need the rest of the team informed in Slack without anyone writing a status update manually.
Not ideal for
Teams with 10+ projects firing updates simultaneously — at that volume, Zapier's polling delay and task costs add up; use Make or n8n instead.
Sync type
scheduledUse case type
notificationReal-World Example
A 22-person product team at a SaaS company uses this to post to #product-updates in Slack whenever an Asana milestone task is marked complete in their quarterly roadmap project. Before the automation, the project manager manually copied milestone status into Slack each Friday — often 24-48 hours after the actual completion. Now the message posts within 15 minutes of the task being marked done.
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
Before You Start
Make sure you have everything ready.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Name | ||
| Project Name | ||
| Completed At | ||
| Permalink URL | ||
4 optional fields▸ show
| Assignee Name | |
| Due Date | |
| Notes / Description | |
| Section |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap
Log in to zapier.com and click the orange 'Create Zap' button in the left sidebar. The Zap editor opens in a two-panel view: the left panel shows your steps, the right panel shows the configuration for the selected step. You'll build the Zap top-to-bottom — trigger first, then action. Give the Zap a clear name at the top, like 'Asana Milestone → Slack #project-updates', before you configure anything else.
- 1Click 'Create Zap' in the left sidebar
- 2Click the name field at the top and type a descriptive Zap name
- 3Click '1. Trigger' in the left panel to begin trigger configuration
Zap Editor > Trigger > Search Apps > Asana
Select Asana as the trigger app
In the trigger search box, type 'Asana' and select it from the dropdown. Zapier will ask you to choose a trigger event — this is the most important decision in the Zap. For milestone completions, select 'Completed Task in Project'. For deadline proximity alerts, you'll need a separate Zap using a Schedule by Zapier trigger combined with an Asana search step — pick one approach now and finish the other later. Stick with 'Completed Task in Project' for this walkthrough.
- 1Type 'Asana' in the trigger app search box
- 2Click 'Asana' in the results
- 3Click the 'Event' dropdown
- 4Select 'Completed Task in Project'
- 5Click 'Continue'
Zap Editor > Trigger > Connect Asana > OAuth popup
Connect your Asana account
Click 'Sign in to Asana' and a popup will open asking you to authorize Zapier. Log in with the Asana account that has access to the projects you want to monitor. Zapier requests read access to your Asana workspace. Once authorized, the popup closes and you return to the Zap editor with your Asana account listed. If your organization uses Asana SSO, you'll authenticate through your identity provider in this popup.
- 1Click 'Sign in to Asana'
- 2Enter your Asana credentials or use SSO in the popup
- 3Click 'Allow' to grant Zapier access
- 4Confirm your account name appears in the account selector
- 5Click 'Continue'
Zap Editor > Trigger > Configure > Project dropdown
Select the Asana project to monitor
Zapier now asks you to configure the trigger. Open the 'Project' dropdown — it pulls a list of all projects visible to your connected Asana account. Select the specific project containing your milestone tasks. If you want to monitor multiple projects, you'll need one Zap per project. There is no multi-project trigger in Zapier's Asana integration. You can optionally filter by Section if your milestones are organized into a dedicated section like 'Milestones' or 'Phase Gates'.
- 1Click the 'Project' dropdown
- 2Type the project name to filter the list
- 3Select your target project
- 4Optionally select a Section to narrow the trigger to milestone tasks only
- 5Click 'Continue'
Zap Editor > Trigger > Test Trigger
Test the trigger and load sample data
Click 'Test trigger' — Zapier polls Asana for recently completed tasks in the selected project and returns up to 3 sample records. You need at least one completed task in the project for the test to return data. If the project is brand new, complete a test task in Asana first, then return and run the test. Review the sample data to confirm the fields you'll need are present: task name, completion date, assignee, due date, project name, and the direct link to the task.
- 1Click 'Test trigger'
- 2Wait 5-10 seconds for Zapier to poll Asana
- 3Click the returned record to expand all fields
- 4Confirm 'Name', 'Completed At', 'Assignee Name', and 'Permalink URL' are present
Zap Editor > + > Filter by Zapier
Add a Filter step to isolate milestone tasks
Click the '+' icon between the trigger and the next action to insert a Filter by Zapier step. This ensures only milestone tasks send a Slack message. Set the filter condition to: 'Name' contains 'Milestone' — or whatever naming convention your team uses for milestone tasks. If your team uses a custom field in Asana called 'Task Type', you can filter on that value instead. The Zap will stop and send nothing to Slack if the condition is not met.
- 1Click the '+' between trigger and action
- 2Select 'Filter by Zapier'
- 3Set field to 'Name' (from Asana trigger data)
- 4Set condition to '(Text) Contains'
- 5Type your milestone identifier, e.g. 'Milestone' or 'Phase'
- 6Click 'Continue'
Zap Editor > + > Slack > Send Channel Message
Add Slack as the action app
Click the '+' after the filter step and search for 'Slack'. Select 'Send Channel Message' as the action event. This posts a message to a public or private Slack channel. Do not select 'Send Direct Message' — this use case is about team-wide visibility, not individual pings. You'll configure the exact channel and message content in the next two steps.
- 1Click the '+' to add an action
- 2Type 'Slack' in the search box
- 3Click 'Slack'
- 4Select 'Send Channel Message' as the event
- 5Click 'Continue'
Zap Editor > Action > Connect Slack > OAuth popup
Connect your Slack workspace
Click 'Sign in to Slack' and authorize Zapier to post messages on behalf of a Slack bot. The OAuth screen lists the permissions Zapier requests: posting to channels and optionally reading channel lists. Choose the correct workspace from the dropdown if you belong to multiple. After authorization, Zapier creates a bot called 'Zapier' in your Slack workspace — messages will appear to come from this bot unless you customize the bot name in the action configuration.
- 1Click 'Sign in to Slack'
- 2Select the correct workspace from the dropdown
- 3Click 'Allow' to grant permissions
- 4Confirm your workspace name appears under 'Connected Account'
Zap Editor > Action > Configure > Channel + Message Text
Configure the Slack message
Now map your Asana fields into the Slack message. Set the Channel field to your target channel — type '#' to search by name. In the Message Text field, build a clear status update using Asana data. Click into the Message Text box and use the purple data pill picker to insert dynamic fields. A well-structured message should include the milestone name, the project it belongs to, who completed it, when it was completed, and a direct link. See the field mapping section below for the exact fields to use.
- 1Click the 'Channel' field and type the channel name or select from the list
- 2Click into the 'Message Text' field
- 3Type your message template, inserting Asana data pills where needed
- 4Set 'Bot Name' to something recognizable like 'Asana Updates'
- 5Optionally set 'Bot Icon' to an Asana logo emoji :asana:
- 6Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Insert Step > Formatter by Zapier > Date / Time > Format
Add a Formatter step to clean up the timestamp
Go back and insert a Formatter by Zapier step between the Filter and the Slack action. Choose 'Date / Time' as the transform type and 'Format' as the action. Map the 'Completed At' field from Asana as the input. Set the output format to 'MMMM D, YYYY [at] h:mm A' — this produces output like 'March 15, 2024 at 2:32 PM'. Then return to the Slack action and swap the raw timestamp data pill for the Formatter output. This one step makes the Slack message readable to non-technical teammates.
- 1Click '+' between Filter and Slack action
- 2Select 'Formatter by Zapier'
- 3Choose 'Date / Time' then 'Format'
- 4Set Input to the 'Completed At' data pill from Asana
- 5Set 'To Format' to 'MMMM D, YYYY [at] h:mm A'
- 6Click 'Continue', then update the Slack message to use the Formatter output
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}This Code by Zapier step runs after the Formatter step and before the Slack action. It compares the task's due date against the completion date and appends a late indicator to the message if the milestone was finished after its due date. Paste this into a 'Run Python' Code by Zapier step and map 'input_data' fields to the Asana due date, completed date, task name, project name, assignee name, and permalink from earlier steps.
JavaScript — Code Step# Code by Zapier — Python▸ Show code
# Code by Zapier — Python # Adds late/on-time indicator to Slack message before sending # Map these in the input_data section of the Code step:
... expand to see full code
# Code by Zapier — Python
# Adds late/on-time indicator to Slack message before sending
# Map these in the input_data section of the Code step:
# due_date, completed_date, task_name, project_name, assignee_name, permalink
from datetime import datetime
# Parse dates from Asana (date fields arrive as 'YYYY-MM-DD' strings)
due_raw = input_data.get('due_date', '')
completed_raw = input_data.get('completed_date', '')
task_name = input_data.get('task_name', 'Unknown Task')
project_name = input_data.get('project_name', 'Unknown Project')
assignee = input_data.get('assignee_name', 'Unassigned')
permalink = input_data.get('permalink', '')
# Default timing label
timing_label = ''
if due_raw and completed_raw:
try:
due_date = datetime.strptime(due_raw, '%Y-%m-%d')
# Completed date comes as ISO 8601 — strip time component
completed_date = datetime.strptime(completed_raw[:10], '%Y-%m-%d')
delta = (completed_date - due_date).days
if delta > 0:
timing_label = f'⚠️ ({delta} day{"s" if delta > 1 else ""} late)'
elif delta == 0:
timing_label = '✅ On time'
else:
timing_label = f'🚀 {abs(delta)} day{"s" if abs(delta) > 1 else ""} early'
except ValueError:
timing_label = ''
# Compose the final Slack message
message = (
f'✅ *Milestone Complete:* {task_name}\n'
f'*Project:* {project_name}\n'
f'*Completed by:* {assignee}\n'
f'*Due date:* {due_raw} {timing_label}\n'
f'🔗 View in Asana: {permalink}'
)
output = [{'slack_message': message, 'timing_label': timing_label}]Zap Editor > Action > Test Action > Publish
Test and activate the Zap
Click 'Test action' in the Slack step — Zapier will post a real test message to your selected Slack channel using the sample Asana data. Go to Slack and verify the message looks correct: readable date, proper milestone name, working link, and the right channel. If anything looks off, click back into the Slack action and edit the message text. Once the test message looks right, click 'Publish' at the top of the Zap editor to turn it on. The Zap is now live and polling Asana every 1-15 minutes depending on your plan.
- 1Click 'Test action' in the Slack step
- 2Check your Slack channel for the test message
- 3Review the message for formatting, data accuracy, and link validity
- 4Click 'Back' to edit if anything needs adjustment
- 5Click 'Publish' to activate the Zap
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 Zapier for this if your team is non-technical, doesn't want to maintain infrastructure, and completes fewer than 300 milestone tasks per month. Setup takes under 30 minutes. The Zap editor's step-by-step interface makes it easy to hand off to a project manager or ops person who has never built an automation. The one scenario where you'd skip Zapier: if you need to monitor more than 3 Asana projects simultaneously, the one-project-per-Zap limitation turns into a maintenance problem fast. At 6+ projects, use Make instead.
Here's the cost math. Each Zap run consumes 3 tasks: one for the trigger, one for the Filter, one for the Slack action. Add the Formatter step and you're at 4 tasks per run. If your team completes 50 milestones per month, that's 200 tasks/month — well inside Zapier's free tier (100 tasks). At 100 milestones/month you hit 400 tasks and need the Starter plan at $19.99/month. Make handles the same workflow for free up to 1,000 operations/month, and its operations are roughly equivalent to Zapier tasks. At 100 milestones/month, Make saves you $240/year for identical output.
Make's Asana module can watch multiple projects in one scenario and has a native 'Watch Tasks' trigger that responds faster than Zapier's polling. n8n's Asana node supports full task filtering by custom fields without a separate Filter step, and if you self-host n8n the cost is near zero. Power Automate has a decent Asana connector but Slack message formatting is noticeably worse — block kit isn't supported, so messages look plain. Pipedream lets you write JavaScript directly against the Asana and Slack APIs, which means you can handle edge cases like custom fields and conditional channel routing in 30 lines instead of building 4 separate Zap steps. Zapier still wins here for one reason: the guided builder catches configuration mistakes before they go live. For a non-coding team, that guardrail is worth the cost.
Three things you'll hit after going live. First, Asana's 'Completed At' timestamp is always UTC — if your team is in New York or London, Slack messages will show times that are 4-8 hours off until you add the Formatter timezone conversion. Second, if someone completes a task in a mobile app while offline and it syncs later, the Asana API reports the sync time as the completion time, not when the person actually tapped 'Complete'. Expect occasional timestamps that look wrong by hours. Third, Zapier's Asana integration does not support custom fields in the trigger data on the free or Starter plan — custom fields like 'Task Type: Milestone' only appear in the data payload on Professional and above. If you're relying on a custom field for filtering, confirm your plan tier before building the Filter step.
Ideas for what to build next
- →Add deadline proximity alerts — Build a second Zap using Schedule by Zapier as the trigger (runs daily at 9 AM) and Asana's 'Find Tasks' search action to pull tasks due within 3 days. Post those to Slack as a morning digest so teams see upcoming milestones before they're late.
- →Route updates to different channels by project — Add a Paths by Zapier step after the Filter to check the project name and route messages to different Slack channels — #engineering-updates for dev milestones, #marketing-updates for campaign milestones. This removes the need to maintain one catch-all channel.
- →Log milestone completions to a Google Sheet — Add a second action after the Slack step that appends a row to a Google Sheet with the task name, project, assignee, due date, completion date, and late/on-time status. Over 90 days this creates a milestone delivery record you can use to spot patterns in delays.
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