πŸ“‹ Post a daily Asana project status digest to Slack

⚑ 7 views Β· πŸ“‹ Project Management

Description

Quick overview

This workflow runs every weekday morning to fetch tasks from a specified Asana project, bucket them by due status and completion activity, and post a Slack Block Kit digest with counts, key task links, and per-assignee open workload.

How it works

  1. Runs on a weekday-morning schedule.
  2. Pulls tasks from a chosen Asana project via the Asana REST API, including assignee, due date, completion status, and task links, and paginates through results as needed.
  3. Groups open tasks into overdue, due today, due this week, and unassigned buckets, and also collects tasks completed within the configured lookback window.
  4. Calculates summary counts and open-task load per assignee.
  5. Formats the results into a Slack Block Kit message with a short totals line and up to five linked tasks per bucket.
  6. Posts the digest to the specified Slack channel.

Setup

  1. Add an Asana Personal Access Token (Asana API credentials) and select it for the HTTP request that fetches project tasks.
  2. Add a Slack OAuth credential and ensure the app/bot can post messages to your target channel.
  3. In the configuration step, set your Asana project GID, Slack channel ID, timezone, and the lookback window for recently completed tasks.
  4. Adjust the schedule (days and hour) to match when you want the digest to run, then execute once to verify output before activating.

Requirements

Customization

Additional info

Nothing in this workflow calls a model, so the same Asana data always produces the same digest and a run costs nothing beyond the two accounts. Two timezones are in play: the schedule fires on your n8n instance timezone, while overdue and due today are decided from the timezone set in the config node, so set both if they differ. Open tasks with no due date land in no bucket at all, yet they still count toward the totals line and per-assignee load, so the buckets will not sum to the total. Unassigned is a separate list rather than an exclusive bucket, so an overdue task with no owner appears in both. Pagination stops after 20 pages of 100 tasks, and a project larger than that is truncated with no warning and low counts. The digest posts on every run whether or not anything is due, and there is no stored state, so a manual execution posts a second copy of the same snapshot. The Asana read and the Slack post each retry three times, and if they still fail the run stops silently, so set an n8n error workflow if people rely on this. One quirk worth knowing: the builder computes a plain-text fallback string, but the Slack node sends blocks only, so mobile notification previews can arrive with no preview text.

πŸ”— Nodes Used

HTTP Request, Slack, Schedule Trigger

πŸ“₯ Import

Download workflow.json and import into n8n: Workflow menu β†’ Import from File

πŸ“– Importing guide Β· πŸ”‘ Credential setup