Google Sheets to Planner Task Sync
On a schedule, the flow reads action-item rows from a Google Sheet and creates or updates matching Microsoft Planner tasks (title, bucket, assignee, due date), writing the task ID and status back to the sheet. Lets a team plan in Google Sheets while executing in Planner/Teams.
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 bridges Google Sheets planning to Microsoft Planner execution. On a 30-minute schedule it reads action-item rows from a Google Sheet, creates a new Planner task for any row that has no task ID yet, updates the matching task for rows that already have one, writes the Planner task ID and a sync status back to the sheet, and posts a run summary to a Teams channel.
Why it matters: Teams often draft work in a sheet but run it in Planner/Teams. Syncing avoids re-entry, keeps the sheet's status current, and makes updates idempotent by storing the Planner task ID alongside each row.
Build status: Built and verified - Flow Checker 0 errors / 0 warnings. Ships Off (demo). Going live requires only authorizing the three connections and setting the environment-variable values.
Use Case
A team captures action items (title, due date, status) in a Google Sheet and wants them mirrored as assignable Microsoft Planner tasks, with the sheet kept in sync. Project managers plan in the sheet; the team executes in Planner/Teams.
Flow Architecture
Every 30 Minutes
Recurrence (Minute / 30)Sync cadence.
Initialize variables
Initialize Variable (String)Bind the 8 environment variables to flow variables (sheet ID, worksheet, plan ID, group ID, bucket ID, task-ID column, Teams group, Teams channel).
Initialize Created/Updated Count
Initialize Variable (Integer)Counters for the run summary.
Get Action Item Rows
Google Sheets GetItemsReads all rows from the configured worksheet.
Apply to each Action Item
Foreach (sequential, concurrency 1)Processes each row; sequential so the counters increment safely.
Check If Task Already Exists
Condition - @empty(item()?[TaskIdColumn])Create vs update branch.
Create Planner Task
Planner CreateTask_V3Creates a task (title, bucket, due date) in the target plan/group.
Write New Task ID To Sheet
Google Sheets PatchItemWrites the new task ID + Status = Synced back to the row.
Update Planner Task
Planner UpdateTask_V2Updates the existing task (title, due date) using the stored task ID.
Write Updated Status To Sheet
Google Sheets PatchItemWrites Status = Updated back to the row.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_GSheetId | String | <configure> | Google Sheets spreadsheet file ID. |
| flowlibs_GSheetWorksheet | String | ActionItems | Worksheet/tab name to read. |
| flowlibs_PlannerPlanID | String | <configure> | Target Planner plan. |
| flowlibs_PlannerGroupID | String | <configure> | M365 group that owns the plan. |
| flowlibs_PlannerBucketId | String | <configure> | Bucket for new tasks. |
| flowlibs_TaskIdColumn | String | PlannerTaskId | Sheet column storing the task ID. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team for the summary. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel for the summary. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Google Sheets | shared_googlesheet | GetItems PatchItem |
| Microsoft Planner | shared_planner | CreateTask_V3 UpdateTask_V2 |
| Microsoft Teams | shared_teams | PostMessageToConversation |
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.
- Bucket map
- Map a sheet Bucket column to multiple Planner buckets instead of a single flowlibs_PlannerBucketId.
- Completion sync
- Add UpdateTask_V2 body/percentComplete driven from a sheet Status column (e.g. Done -> 100), and reflect Planner completion back into the sheet.
- Assignee
- Resolve a sheet Assignee email to a Planner user ID (via Office 365 Users UserProfile) and set CreateTask_V3 body/assignments.
- Cadence
- Change the Recurrence interval (default 30 minutes).
- Scope
- Add a $filter on GetItems to process only rows where a Sync column is true.
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.01Create vs update
True when the row has no Planner task ID yet (create branch).
EXPR.02Due date
Formats the due date, leaving blank when no value.
EXPR.03Write-back (new task)
Passes the whole row object so the dynamic-schema PatchItem stays clean and no columns are blanked.
EXPR.04Row id for PatchItem
The sheet row key used to target the write-back.
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.