

How to Automate Daily Standups from Asana to Slack with Make
Every morning at a scheduled time, Make pulls completed Asana tasks and upcoming deadlines from the past 24 hours, formats them into a standup report, and posts it 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
Teams of 5–25 people running async standups who want a daily Slack digest without manually compiling Asana task updates each morning.
Not ideal for
Teams needing real-time per-task Slack alerts as work happens — use a webhook-based trigger instead of a scheduled scenario for that.
Sync type
scheduledUse case type
reportingReal-World Example
A 12-person product team at a B2B SaaS company runs this every weekday at 8:45 AM. Their #standup Slack channel gets a formatted message listing every task completed yesterday and every task due today, pulled directly from their Asana project. Before this, the team lead spent 10–15 minutes each morning manually copy-pasting task names from Asana into Slack — and still missed items assigned to other members.
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 Make
Copy the pre-built Make blueprint and paste it straight into Make. 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.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Task Name | name | |
| Assignee Name | assignee.name | |
| Completed At | completed_at | |
| Due Date | due_on | |
| Completion Status | completed | |
3 optional fields▸ show
| Task Permalink URL | permalink_url |
| Project Name | projects[].name |
| Task Notes / Description | notes |
Step-by-Step Setup
make.com > Scenarios > Create a new scenario
Create a new scenario in Make
Log into Make at make.com and click the blue 'Create a new scenario' button in the top-right corner of the Scenarios dashboard. You'll land on the visual scenario canvas with an empty circle in the middle. This is your trigger slot. Click the circle to open the module picker. You're building a scheduled scenario, so the first module will be a scheduling trigger, not an app trigger.
- 1Log into make.com and go to the Scenarios tab in the left sidebar
- 2Click the blue 'Create a new scenario' button in the top-right
- 3Click the empty circle in the center of the canvas to open the module picker
- 4Type 'Schedule' in the search bar and select the 'Schedule' module
Scenario canvas > Schedule module > Settings panel
Configure the schedule trigger
Click the Schedule module to open its settings panel on the right. Set the interval to 'Days' and enter 1. Set the time to 08:45 or whatever time your team wants the standup posted. Make runs scenarios in UTC by default, so adjust the time accordingly — if your team is in ET (UTC-5), enter 13:45 UTC to hit 8:45 AM ET. Set it to run Monday through Friday only by enabling the 'Days of week' filter.
- 1Click the Schedule module on the canvas to open its configuration panel
- 2Set 'Run scenario' to 'Every day'
- 3Enter your target time converted to UTC in the time field
- 4Toggle 'Days of week' and uncheck Saturday and Sunday
Scenario canvas > + > Asana > Search Tasks
Connect Asana and search for completed tasks
Click the '+' icon to the right of the Schedule module to add the next module. Search for 'Asana' and select 'Search Tasks'. This module lets you query Asana for tasks matching specific criteria — you'll filter by project and by completion date. Click 'Add' next to the Connection field and authenticate with your Asana account using OAuth. Make will open an Asana authorization popup.
- 1Click the '+' icon to the right of the Schedule module
- 2Type 'Asana' in the module search bar and select it
- 3Choose 'Search Tasks' from the action list
- 4Click 'Add' next to Connection and authorize via the Asana OAuth popup
- 5Select your Workspace from the dropdown after authentication
Search Tasks module > Filters panel
Filter for tasks completed in the last 24 hours
In the Search Tasks module settings, set the Project field to the Asana project your team uses. Under 'Completed Since', use Make's date formula to dynamically calculate yesterday's date: enter {{formatDate(addDays(now; -1); 'YYYY-MM-DD')}}. This tells Asana to return only tasks marked complete after that timestamp. Set the Maximum number of returned results to 50 — enough for any team's daily output without hitting API limits.
- 1Select your target Asana project from the Project dropdown
- 2Click the 'Completed Since' field and switch to formula mode by clicking the formula icon
- 3Paste: {{formatDate(addDays(now; -1); 'YYYY-MM-DD')}}
- 4Set 'Completed' to 'Yes' to exclude open tasks
- 5Set 'Maximum number of returned results' to 50
Scenario canvas > + > Asana > Search Tasks (second instance)
Add a second Asana module for upcoming due tasks
Click '+' again after the first Asana module to add another 'Search Tasks' module using the same Asana connection. This time, you're pulling tasks due today — not completed ones. Set 'Completed' to 'No' and use the Due Date filter. Set 'Due On' to {{formatDate(now; 'YYYY-MM-DD')}} to match today's date exactly. This gives you the 'what's coming up today' section of the standup report.
- 1Click the '+' icon after the first Asana Search Tasks module
- 2Select Asana > Search Tasks again
- 3Reuse the same Asana connection from the dropdown
- 4Set 'Completed' to 'No'
- 5Set 'Due On' field to {{formatDate(now; 'YYYY-MM-DD')}}
Scenario canvas > + > Tools > Text Aggregator
Add a Text Aggregator to format completed tasks
Click '+' after the first Search Tasks module and search for 'Text Aggregator'. This module concatenates every task returned from a bundle into a single block of text — exactly what you need to build the standup message body. Set the Source Module to the first Asana Search Tasks module. In the Text field, build your row format: ✅ {{name}} — assigned to {{assignee.name}} — <{{permalink_url}}|View in Asana>. Each task will become one line in the final Slack message.
- 1Click '+' after the first Asana Search Tasks module
- 2Search for 'Text Aggregator' under Tools
- 3Set 'Source Module' to the first Asana Search Tasks module
- 4In the Text field, enter: ✅ {{name}} — {{assignee.name}} — <{{permalink_url}}|View in Asana>
- 5Set the Row Separator to 'New Line'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Scenario canvas > + > Tools > Text Aggregator (second instance)
Add a second Text Aggregator for due-today tasks
Repeat the process from Step 6 for the second Asana module. Click '+' after the second Search Tasks module, add another Text Aggregator, and set its Source Module to the second Asana Search Tasks module. Format each row as: 📅 {{name}} — {{assignee.name}} — due today. This creates the second block of the standup message covering what's on deck for the day.
- 1Click '+' after the second Asana Search Tasks module
- 2Add another Text Aggregator from Tools
- 3Set 'Source Module' to the second Asana Search Tasks module
- 4In the Text field enter: 📅 {{name}} — {{assignee.name}} — due today
- 5Set Row Separator to 'New Line'
Scenario canvas > + > Slack > Create a Message
Connect Slack and configure the message module
Click '+' after your second Text Aggregator and add the Slack module 'Create a Message'. Authenticate with your Slack workspace using OAuth — Make will ask for bot token scopes including chat:write. Select the target channel from the Channel dropdown (e.g. #standup or #engineering-standup). In the Text field, build the full standup message using output from both Text Aggregators and static formatting.
- 1Click '+' after the second Text Aggregator
- 2Search for 'Slack' and select 'Create a Message'
- 3Click 'Add' next to Connection and authorize your Slack workspace via OAuth
- 4Select your target channel from the Channel dropdown
- 5Build the message body in the Text field using both Text Aggregator outputs
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Slack > Create a Message > Text field
Build the full standup message body
In the Slack 'Create a Message' Text field, construct the full report using a combination of static text and dynamic variables from both Text Aggregators. Use Make's if() formula to handle the case where either section is empty. The message should have a header, a completed tasks section, and a due-today section. Use Slack's mrkdwn formatting — *bold* for headers, line breaks between sections.
- 1Click into the Text field of the Slack module
- 2Type the header: *📋 Daily Standup — {{formatDate(now; 'MMMM D, YYYY')}}*
- 3Add a line break, then type: *✅ Completed Yesterday:*
- 4Map the first Text Aggregator output using {{bundle1.text}} or the variable picker
- 5Add another section: *📅 Due Today:* followed by the second Text Aggregator output
- 6Wrap each section in: {{if(isEmpty(aggregator.text); '_Nothing to report_'; aggregator.text)}}
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Slack module > Right-click > Add error handler
Add an error handler for failed runs
Right-click on the Slack module and select 'Add error handler'. Choose 'Ignore' if you want silent failures, or 'Rollback' if you want Make to retry. For a standup bot, add a separate Slack 'Create a Message' module inside the error handler that posts to a #make-alerts channel with the error message. This way, if Asana's API is down or the Slack token expires, someone gets notified immediately instead of the standup silently not posting.
- 1Right-click the Slack 'Create a Message' module on the canvas
- 2Select 'Add error handler' from the context menu
- 3Choose 'Break' as the error handler type
- 4Click '+' inside the error handler path and add another Slack 'Create a Message' module
- 5Set the channel to #make-alerts and the message to: ⚠️ Standup bot failed: {{error.message}}
Scenario canvas > bottom-left toggle > ON
Activate the scenario and verify the first run
Toggle the scenario from OFF to ON using the switch in the bottom-left of the canvas. Make will confirm the next scheduled run time. Click 'Run once' immediately to trigger a manual test run and verify the full pipeline end-to-end. Check your Slack channel for the standup message. Then open the Scenario History tab to confirm all modules completed without errors — each should show a green bubble with a count of processed bundles.
- 1Click the toggle in the bottom-left corner to switch from OFF to ON
- 2Click 'Run once' in the toolbar to trigger an immediate test
- 3Open your target Slack channel and confirm the standup message arrived
- 4Click 'History' in the left sidebar to review the run log
- 5Verify each module shows a green bundle count and no red error icons
Paste this into a Make 'Set Variable' module placed between the Text Aggregators and the Slack module. It truncates long task names at 60 characters, strips newlines from task notes, and adds a fallback string when either section is empty — preventing blank standup sections from posting to Slack.
JavaScript — Custom Function{{if(▸ Show code
{{if(
isEmpty(1.text);
'_No tasks completed in the last 24 hours._';... expand to see full code
{{if(
isEmpty(1.text);
'_No tasks completed in the last 24 hours._';
1.text
)}}
{{if(
isEmpty(2.text);
'_No tasks due today._';
2.text
)}}
// Truncate task name to 60 chars in the Text Aggregator row:
{{if(
length(name) > 60;
substring(name; 0; 60) + '...';
name
)}}
// Strip line breaks from task notes before including in message:
{{replace(notes; '\n'; ' ')}}
// Format completed_at to human-readable local time:
{{formatDate(completed_at; 'h:mm A'; 'America/New_York')}}Scaling Beyond Teams with 30+ tasks completed per day or 5+ projects feeding into one standup+ Records
If your volume exceeds Teams with 30+ tasks completed per day or 5+ projects feeding into one standup records, apply these adjustments.
Watch your operation budget
Each Asana task returned from Search Tasks costs at least 2 operations — one for the search result and one if you add a Get Task module to expand the assignee. At 50 tasks/day across two sections, a single run costs 100–150 operations. Make's Free plan gives you 1,000 operations/month total, which is exhausted in under 7 business days at this volume. The Core plan at $9/month covers 10,000 operations.
Use project-specific queries, not workspace-wide
Asana's Search Tasks API slows significantly on large workspaces. Always filter by a specific project GID rather than searching the full workspace. In Make, this means selecting a project from the dropdown rather than leaving it blank. This also prevents surfacing tasks from unrelated projects.
Cap results and add pagination awareness
Make's Asana Search Tasks module returns up to 100 results per call but doesn't automatically paginate. If your team closes more than 100 tasks in a day, you'll silently miss some. For teams that large, add a second Search Tasks module with an offset, or switch to querying by section or tag to narrow scope.
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 Make for this if your team wants a visual scenario they can hand off to a non-developer to maintain. The canvas makes it obvious which module feeds which, and the Text Aggregator approach for building multi-section Slack messages is genuinely clean — no code required. Make also handles the scheduled trigger natively without needing a separate cron service, which matters when you're building something that runs every weekday at the same time. The one scenario where you'd skip Make: if your team is already on Zapier and only needs a single-section standup message with no conditional formatting — Zapier's 'Schedule by Zapier' trigger plus a Formatter step gets it done in 5 modules and no formula syntax.
The math here is straightforward. Each scenario run uses roughly 5 modules plus 2 operations per Asana task returned. A team completing 15 tasks/day across two sections generates about 40 operations per run, 200 per week, 800–900 per month. That fits inside Make's Free plan (1,000 ops/month) with almost no margin. A team completing 30+ tasks/day needs the Core plan at $9/month for 10,000 operations. Zapier charges per task, not per operation — at 30 tasks/day, you'd consume 600 Zap tasks/month, which hits their $19.99/month Starter plan. Make is cheaper at that volume by about $11/month.
Zapier's Schedule trigger is slightly simpler to configure for non-technical users — no UTC conversion UI, just a local time picker. n8n lets you write a single JavaScript Function node that handles both Asana queries, all formatting, and the Slack post in one block — faster to build if you code, easier to version-control. Power Automate has a native Asana connector but it's community-built and breaks on API updates more often than Make's maintained connector. Pipedream's Asana source can trigger on task completion in real time without polling, which is actually better architecture for standups that care about timing. Make is still the right call here because the visual router makes it easy for the team lead — not just the person who built it — to modify the message format or add a new project without breaking anything.
Three things you'll hit after setup. First: Asana's assignee field doesn't expand by default in Search Tasks — you get a GID, not a name. You need a separate Get Task module to resolve it, which doubles your operation count. Second: Slack's mrkdwn formatting looks broken inside Make's text field preview — asterisks appear as literal characters, not bold. It renders correctly in Slack; ignore the Make preview. Third: Make's Schedule trigger doesn't account for daylight saving time automatically. When clocks change in March and November, your standup will post an hour off. Set a calendar reminder to update the UTC time manually on those two days each year.
Ideas for what to build next
- →Add a per-person breakdown — Use Make's Array Aggregator to group completed tasks by assignee before posting. Instead of one flat list, each team member gets their own section in the Slack message — closer to how a real standup runs.
- →Post a weekly summary on Fridays — Clone this scenario, change the Schedule trigger to run only on Fridays, and adjust the Asana date filter to pull the last 7 days instead of 24 hours. Post it to a separate #weekly-recap channel for leadership visibility.
- →Let teammates reply with blockers in Slack — Add a second scenario that watches for replies in the #standup thread using Slack's 'Watch Replies' trigger, then creates a new Asana task tagged as a blocker. This closes the loop between the standup report and actual task tracking.
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