Google Tasks Team Workload Balancer
On a schedule, the flow aggregates open Google Tasks across team members' lists, computes load per person, and when someone is overloaded suggests reassignment and posts a balanced view to a Teams channel for the lead. Gives visibility and rebalancing for distributed Google Tasks work.
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
This flow gives a team lead a daily, governed view of how open Google Tasks work is distributed across the connected account's task lists, and flags overload so it can be rebalanced. On a schedule it enumerates every Google Tasks list (each list = a team member / workstream), counts open tasks per list, writes a Dataverse snapshot row per list for reporting, flags any list above an overload threshold, and posts an HTML workload digest to a Microsoft Teams channel for the lead.
Why it matters: Personal Google Tasks lists hide team-level imbalance. Aggregating them on a schedule surfaces overload, supports fair distribution, and (via the Dataverse snapshots) gives a trend history that a Power BI report can chart over time.
Status: Built as an Off demo (CF-702). Going live requires only connection authorization and setting the three environment-variable values — no logic changes.
Use Case
A lead overseeing a team that tracks work in Google Tasks wants a consolidated, balanced view each morning without manually opening each list. The flow reads all task lists in the connected Google account, computes each list's open-task load, persists a snapshot to Dataverse, and posts a single Teams digest that highlights who is overloaded so the lead can reassign work.
Adaptation note: Google Tasks lists are per-account, so team members are modeled as the task lists in the connected account (one list per member / workstream). To aggregate lists owned by different Google accounts, either have members share into a common set of lists in the connected account, or run one flow per member account and merge in Dataverse.
Flow Architecture
Recurrence - Daily Workload Scan
Recurrence (Day / 08:00 ET)Runs the workload scan every morning.
Initialize Batch Correlation Id
Initialize VariablevarBatchId = guid(); stamped on every snapshot row + the digest so one run's records are traceable together.
Initialize Overload Threshold
Initialize VariablevarOverloadThreshold from env var — count above which a list/owner is flagged overloaded.
Initialize Teams Group Id / Channel Id
Initialize VariableTeams team/group and channel ids for the digest, from env vars.
Initialize Digest Rows
Initialize VariableAccumulates one HTML table row per task list.
Initialize Overloaded Owners
Initialize VariableAccumulates names of overloaded lists/owners for the callout.
List Task Lists
Google Tasks — ListTaskListsGet all task lists (each = a member / workstream).
For each Task List
Foreach (sequential)Process each list; contains the per-list steps below.
List Tasks In List
Google Tasks — ListTasksGet all tasks in the list (incl. completed).
Filter Open Tasks
Filter arrayKeep only open tasks (status = needsAction) = this owner's load.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_GTWBTeamsGroupId | String | <your-team-id> | Teams team/group id where the digest is posted. |
| flowlibs_GTWBTeamsChannelId | String | <your-channel-id> | Teams channel id where the digest is posted. |
| flowlibs_GTWBOverloadThreshold | String | 10 | Open-task count above which a list/owner is flagged overloaded (parsed with int()). |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Google Tasks | shared_googletasks | ListTaskLists ListTasks |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Microsoft Dataverse | shared_commondataserviceforapps | CreateRecord |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
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.
- Weighted load
- Instead of a raw open-task count, weight by due-date proximity (overdue tasks count more) inside Filter Open Tasks + Compose Open Count.
- Auto-suggest reassignment
- After the loop, sort the snapshots and name the least-loaded list as the suggested target in the digest callout.
- Per-member capacity
- Replace the single flowlibs_GTWBOverloadThreshold with a JSON map of list -> capacity and look up each list's own threshold.
- Trend reporting
- The Dataverse snapshots already form a daily history; point a Power BI report at flowlibs_gtworkloadsnapshots to chart load per owner over time.
- Schedule / channel
- Change the Recurrence time or the Teams target by editing the env var values, not the flow.
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.01Open-task filter
Keeps only open tasks.
EXPR.02Open count
Open-task count for the list.
EXPR.03Overloaded test
True when the list exceeds the threshold.
EXPR.04Overloaded flag stored
Yes/No value persisted on the snapshot.
EXPR.05Threshold parse
Parses the threshold env var to integer.
EXPR.06Balanced vs overloaded callout
Builds the digest callout line.
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.