Asana Recurring Task Generator
On a schedule, the flow reads a recurrence-template definition (daily/weekly/monthly) and generates the due Asana task instances into the right project/section with the right assignee, due date, and checklist, and posts the day's generated tasks to Teams. Handles complex recurrence patterns Asana's native repeat can't.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
FlowLibs - Asana Recurring Task Generator (CF-646) generates recurring Asana tasks beyond Asana's native repeat. On a daily schedule it reads recurrence templates from a Dataverse table, computes which templates are due, and creates the due task instances in the destination Asana project with name, notes, due date and assignee. Each template's Next Due Date is then advanced by its own cadence (daily / weekly / monthly x interval), every generated instance is written to an audit-log table, and the day's output is posted to Microsoft Teams and emailed as a digest.
Why it matters: Asana's built-in recurrence is limited to simple repeats. A flow-driven generator supports complex cadences (every N days/weeks/months, business-day rules via customization) with consistent assignment, full auditability, and notifications - all portable across tenants by changing only environment variables and connection references.
The flow ships Off (demo). Going live requires only authorizing the four connections and setting the environment variable values.
Use Case
A team with routine recurring obligations (compliance checks, weekly reports, monthly reviews) wants them created in Asana automatically on the correct cadence, assigned to the right owner, logged for audit, and announced to the team each morning.
Flow Architecture
Daily 0600
RecurrenceRuns daily at 06:00 ET.
Initialize varCorrelationId
Initialize Variableguid() stamped on every task + log row for tracing.
Initialize varTodayDate
Initialize VariableToday as yyyy-MM-dd (due date + OData cutoff).
Initialize varDigestRecipient
Initialize VariableDigest recipient from env var.
Initialize varGeneratedRows
Initialize Variable (Array)Run accumulator for the digest.
List Templates Due
Microsoft Dataverse — ListRecordsActive templates with Next Due Date <= today.
Apply To Each Template
Foreach (sequential)Per due template.
Create Asana Task
Asana — CreateTaskCreate instance: name, notes, due date, assignee.
Compose NextDueDate
ComposeCompute next due date from recurrence type + interval.
Update Template NextDue
Microsoft Dataverse — UpdateRecordAdvance Next Due Date + stamp Last Generated On.
Log Generated Task
Microsoft Dataverse — CreateRecordAudit-log row (task id, template, time, correlation id).
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AsanaWorkspaceGid | String | <configure> | Asana workspace GID for task creation. |
| flowlibs_AsanaProjectGid | String | <configure> | Default destination project GID (template row may override). |
| flowlibs_AsanaDigestRecipient | String | operations@yourcompany.com | Recipient of the daily digest email. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team (group) id for the notification. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for the notification. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Asana | shared_asana | CreateTask |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords UpdateRecord CreateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Office 365 Outlook | shared_office365 |
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Business-day / Nth-weekday rules
- Extend Compose_NextDueDate and the due-today test to support "last business day", "every other Tuesday", etc. Add a free-form rule column and evaluate it in an expression or a child flow.
- Dedup
- Before Create_Asana_Task, query the generated-task log for a row matching templatename + today; skip if one exists (idempotent re-runs).
- Subtasks / checklist
- After creating the parent task, loop a checklist column and call Asana CreateTask with the parent set, or add subtasks via Asana REST.
- Assignee resolution
- The assignee email is passed straight to Asana; map emails to Asana user GIDs first if your workspace requires it.
- Cadence
- Change the Daily 0600 recurrence (time zone / hour) without touching logic.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Due-by OData filter
Selects active templates due on or before today.
EXPR.02Next due date (type-aware)
Advances the template's next due date by its cadence.
EXPR.03Instance due date
Today's date used as the generated task's due date.
EXPR.04Created Asana task id
Reads the created Asana task id for the audit log.
EXPR.05Correlation id
Minted once, stamped on every task + log row.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.