Real Automation Problems with Microsoft To Do Reminders

Real Automation Problems with Microsoft To Do Reminders

1. When Microsoft Power Automate Flows Delay Instead of Trigger

Technically, Microsoft To Do is supposed to send reminders at the set time. What that actually means in Power Automate is: “We’ll try to check the task at some indeterminate next interval.” I had a flow set up to catch To Do tasks with a due time and fire off a Slack DM at that moment. Worked in test. Then I waited. At the scheduled time, nothing happened.

I assumed latency from the cloud connector. Nope. The delay was from the trigger itself — Power Automate’s polling behavior doesn’t even catch new tasks unless you manually resave the flow or wait up to fifteen minutes. There’s no webhook-level granularity unless you’re using Graph API directly.

This meant that if I created a task with a due time just five minutes in the future, the reminder automation wouldn’t catch it. That’s not in the documentation anywhere, but it behaves like a caching bug. The trigger “When a task is added” does not always fire for rapid-fire updates.

Eventually, I had to abandon that part of the flow and use a daily-check loop with a “Filter array” step to find tasks due in the next X minutes. Not pretty, less real-time, but at least predictable.

2. Reminders Do Not Sync Across Account-Linked Devices Reliably

This one’s subtle until it ruins your setup. I created a recurring weekly reminder in Microsoft To Do on the desktop app. Later, I checked it on iOS. Reminders looked fine — but weirdly, the due time was off by one hour. Time zone was correct, but somehow the recurrence created a shadow version of the task locally.

Turns out, Microsoft To Do sometimes generates local device copies of recurring tasks during syncs. These aren’t reflected in Power Automate or in Graph — so you could have reminders firing locally that the automation never sees.

I only noticed this when one of my team members, using a shared To Do list, marked a task complete. On their device, the recurrence didn’t return. On mine, it duplicated. The automation that depended on task states completely misfired. It sent a follow-up chat message for a task that technically didn’t exist anymore in one place but still showed up marked incomplete elsewhere.

This is maddening if you’re trying to build flows that rely on task completion or recurrence, especially in shared or cross-platform cases.

3. Using Microsoft Graph to Bypass Flow Delay Fails Without Permissions

I tried to get slick. If the Flow delay is baked in, I could build a custom connector or just bypass Power Automate entirely and hit the Microsoft Graph API on a Node schedule. Generate a token, pull recent tasks with a filter on dueDateTime, done. Except… the authentication setup isn’t trivial.

What the docs don’t tell you clearly is: you’ll need application-level permissions, not delegated, if you want to hit other users’ To Do lists — even shared ones where your own account has access. Delegated permissions will silently get you zero results unless you’re logged in as the actual task owner.

This killed the shared reminder bot I wanted to build for the team. Because we needed one Azure AD app with broad calendar/task access, not per-user OAuth dancing. The workaround people post in Microsoft forums — to loop user tokens through Graph — flat-out doesn’t scale unless you’re okay with storing user refresh tokens indefinitely.

There’s a GitHub snippet someone shared that did this via EWS for calendars, but Tasks in To Do don’t have equivalent endpoints in that API family. Dead end.

4. Automating Recurring Reminders Breaks After Task Modification

I found this out the dumbest way possible. Had a recurring Monday 9am reminder to “update team velocity board.” The reminder itself was just a To Do task, recurring weekly, and a Flow looked for tasks due on Mondays to schedule an email nudge via Outlook.

One Monday, I moved the task to Tuesday manually — just once. Microsoft To Do handles this fine as a one-off recurrence exception. But the next recurrence didn’t generate. Literally, the reminder just disappeared the following week. So the Flow had no task to find and no email got sent.

This isn’t visible anywhere unless you’re watching the recurrence metadata via API. The recurrence array disappears if the last instance is nudged too far. Docs call this expected, but I doubt any normal human reads that far into an SDK page.

“If you modify the dueDateTime, the server interprets the update as a distinct task and may detach it from its recurrence series.”

The fix? Don’t manually edit recurring task due times. Instead, move them via skip/reschedule inside the mobile app’s task detail panel. It somehow retains the recurrence metadata that way.

5. Completing a Recurring Task Before Its Due Time Kills the Flow

Here’s the random chaos I found while editing automations late on a Thursday with nine Chrome tabs open. A recurring To Do task was checked off a day early. The Flow looking for tasks due today fired an hour later, didn’t find it (marked complete), and skipped the notification. Fine. Expected. But the next instance never showed up. It just… vanished.

I thought maybe the task got flagged weirdly by completing ahead of its scheduled dueDateTime. Sure enough, calling the Graph API against that list showed no recurrence series tied to it. It detached and became a standalone task — and because the Flow wasn’t built to recreate recurrences, it died quietly.

Here’s what I had to adjust to recover it:

  • Set the Flow to detect early-completed tasks and verify recurrence metadata
  • If a recurrence field is missing, re-create a new task for the next week manually
  • Move recurrence management outside To Do — which kind of defeats the point

Why does this happen? Edge case tied to how To Do defines instances. Completing prior to dueTime may clear the startTime field entirely, which Flow needs to understand the recurrence window.

6. Custom Labels Cannot Be Filtered in Microsoft To Do Flows

I had a whole Label-based tagging system set up: @admin, @deepwork, @repairs. The idea was to trigger sets of reminders based on label. Turns out Microsoft Power Automate doesn’t support filtering To Do tasks by label.

You can filter by list, theme, due date, or status. Not a single trigger or condition references labels — probably because the API doesn’t publish them in the task object payload by default. Even using the “Get tasks” action and expanding properties doesn’t help. The labels sometimes show up under subtasks, weirdly.

Eventually went with a painful workaround: prefixing task titles manually with brackets — like [admin] or [follow-up] — and filtering strings in Flow’s “contains” logic. It’s janky. But it worked better than nothing.

The automation reads that prefix, routes the task to the right reminder mechanism. But I still get occasional false positives if a task description coincidentally contains the same string.

7. Task ID Reuse Confuses Downstream Zapier Workflows

This one burned me on a Friday afternoon before launch: an item in my To Do list was completed, and a new recurring instance was generated. Power Automate saw it as a legit new task — but Zapier, connected via Office365 hooks, grabbed the new version with the same internal Task ID.

Apparently, recurring To Do tasks intelligently reuse the original internal task ID for subsequent instances. So if you’re zapping based on task IDs to check for duplicates or to prevent double-posting into Slack or Notion — too bad. You get conflicting signals.
It looks like a new task with a new due time, but the ID’s the same, so previously-stored data gets overwritten or skipped.

Quick workaround: harvest creation timestamps, not IDs, as your unique identifiers. Or better — when a task is completed and recreated — compare dueDateTime to previous instance. If it differs by more than your recurrence offset, treat it as new.

This pattern led me to build a small Airtable base that tracked task due times with composite keys (title + dueDateTime). Good enough to avoid duplicate rows on updates. Not bulletproof, but held up way better in real use.

8. Marking Starred Tasks Triggers Flow Runs You Did Not Intend

There’s zero documentation I can find explaining this, but I managed to build a Flow that triggered on any “task updated” for a list. I then added a condition block — proceed only if the task’s dueDateTime was changed within the last hour.
Twice in two days, Flow fired while I was starring tasks.

Clicking the little star in To Do (to flag it as important) registers as a full task update. That’s fine. But the dueDateTime field doesn’t actually change… except, internally, the modified date gets nudged, which the Flow saw as a “recent update.”

I had to build a more defensive condition block using an expression like:

and(equals(triggerBody()?['importance'],'normal'), not(empty(triggerBody()?['dueDateTime'])))

This filters out task updates that are purely cosmetic. But the first day, five people got duplicate reminder emails after I flagged a few backlogged tasks from my phone.