Guides
1 / 12
Start hereintermediate30 min

Send Automatic Reminders From a SharePoint List With Power Automate

By

A scheduled Power Automate flow can check a SharePoint list every morning, find the items that are overdue or due soon, and message the person each one is assigned to. It is built from a Recurrence trigger, a Get items action with an OData filter, and a loop. The detail that decides whether people keep the reminders on is filtering in the query rather than in the loop, so the flow only touches rows that genuinely need chasing.

Swipe up to begin
Concept

Why chasing is the job nobody owns

Every list of work has a tail. The renewals nobody renewed, the tickets nobody closed, the documents nobody reviewed. The list is right there in SharePoint and perfectly accurate, and the reason things go overdue is not that the information is missing. It is that looking at the list is somebody's job on top of their actual job, so it happens on Fridays, and only some Fridays.

A scheduled flow makes the chasing happen whether or not anyone remembers. The trick is making it precise enough that people keep it switched on.

Concept

Add the column that makes this work

Before building anything, add a LastReminded date column to your list.

This looks like an optional nicety and it is the entire difference between a reminder people act on and one they mute. A scheduled flow has no memory between runs. Without somewhere to record that an item has already been chased, every run chases everything, and by day three people have a rule sending your reminders to a folder they never open.

While you are there, confirm you have a Status choice column and a Person column for the assignee. Those three columns are what turn a list into something chaseable.

Concept

Set the schedule

Create a Scheduled cloud flow with a Recurrence trigger. Once a day, on weekdays, early enough to be read before the day fills up.

Two settings worth opening the advanced options for: set the time zone explicitly rather than accepting UTC, and set the hour deliberately. A reminder that arrives at 03:00 local time is at the bottom of the inbox by the time anyone looks.

Concept

Fetch only what needs chasing

Add Get items (SharePoint), point it at the list, and open Filter Query under advanced options.

This is the step that matters. The naive version of this flow fetches everything and decides inside the loop what is overdue, which means it touches every row on the list every morning. The right version asks SharePoint to return only the rows that need action:

DueDate lt '@{utcNow()}' and Status ne 'Done'

Replace DueDate and Status with your internal column names, which are not always what the column is called on screen. A column renamed after creation keeps its original internal name, and this is the single most common reason a filter silently returns nothing at all. Check the internal name in list settings by opening the column and reading the URL.

Add the LastReminded clause too, so recently chased items sit out for a few days:

and (LastReminded lt '@{addDays(utcNow(),-3)}' or LastReminded eq null)

Set Top Count to something sane. If the filter ever goes wrong, a cap is what stops the flow emailing four hundred people.

Concept

Stop it running on an empty list

Add a Condition before the loop and check that anything came back:

length(outputs('Get_items')?['body/value'])  is greater than  0

Nothing overdue should mean silence, not a cheerful message saying so. The fastest way to get a reminder flow ignored is to make it send something every single day regardless of whether it matters.

Concept

Message the right person

Inside Apply to each, add Send an email (V2) or a Teams message, and set the recipient from the item's assignee column rather than a fixed address. That is what turns one flow into something that chases everyone about their own work instead of dumping the whole list on one manager every morning.

Keep the message short and put the link in it:

[Title] was due on [DueDate].
Open it: [Link to item]

One item, one line, one link. Resist the urge to summarise the whole list in a table; the point is a specific person and a specific thing.

Concept

Write the reminder down

Still inside the loop, add Update item and set LastReminded to utcNow().

This is the step that closes the loop, and it is the one people forget because the flow appears to work perfectly without it, right up until the complaints start on day three. Test this deliberately: run the flow twice in a row and confirm the second run finds nothing.

Concept

Test the awkward cases

Run it once with one genuinely overdue item and confirm the right person gets the right link. Then test the cases that actually break it: an item with nobody assigned, an item with no due date at all, and a run where nothing is overdue.

Unassigned and null-date rows are what throw errors in real lists, because real lists are always messier than the one you built to test with.

Concept

Where this fits with the rest

This is the third piece of the same Microsoft 365 pattern. Requests arrive and become list items, covered in sending Microsoft Forms responses to a SharePoint list. Items that need a decision go through an approval flow. And the ones that sit there anyway get chased by this.

Build all three against the same list and the list stops being a record of what should have happened.

Concept

Build your first version now

Open Power Automate, add the LastReminded column, and build the straight path: Recurrence, Get items with a filter, a length condition, a loop with one email, and Update item.

Point it at a test list with two rows first. Run it twice. When the second run correctly finds nothing, aim it at the real list.

Try this now

Try this now

Add a LastReminded column to your list before you build anything. It is the difference between a reminder people act on and one they filter to trash in week two.

That’s the whole lesson. Try it on a real task while it is fresh, then come back for the next one.

Our recommendation

Build this in Power Automate if your list already lives in SharePoint, which is the usual case. The Recurrence trigger and the SharePoint Get items action do the whole job with no code, and the reminder arrives in Outlook or Teams where the person already is. Only move to another tool if the list itself is somewhere other than Microsoft 365.

When something else fits better

  • A builder you already use — when the list lives in Airtable, Notion or Google Sheets rather than SharePoint; the scheduled-check-then-notify shape is identical, only the query step changes
  • n8n — when you want the schedule and the credentials on infrastructure you control, or the reminders need to reach somewhere outside Microsoft 365

Questions people actually ask

How do I send a reminder from a SharePoint list on a schedule?
Sending a scheduled reminder from a SharePoint list takes three Power Automate actions: a Recurrence trigger set to the time you want it to run, a Get items action pointed at the list with a filter query that returns only overdue rows, and an Apply to each loop containing the message. No code is required at any step.
What is the OData filter for items due before today?
The filter compares your date column to the current time, written as DueDate lt '@{utcNow()}' in the Filter Query box of the Get items action, with DueDate replaced by your internal column name. Add a status clause such as and Status ne 'Done' so completed rows stop being chased. Internal column names often differ from display names, which is the usual cause of a filter silently returning nothing.
Why does my flow remind people about the same item every day?
A reminder flow repeats because nothing on the item records that it was already chased. Add a LastReminded date column, write the current date to it at the end of the loop, and include it in the filter so items reminded within the last few days are excluded. Without that, a scheduled flow has no memory between runs.
Can the reminder go to the person the item is assigned to?
Yes, if the list has a Person column for the assignee. Inside the loop, reference the assignee email token from the current item as the To address rather than a fixed mailbox. That turns one flow into a flow that chases everyone about their own work instead of sending the whole list to one manager.
How do I stop the flow emailing people about an empty list?
Wrap the notification in a Condition that checks whether Get items returned anything, using length on the value array and continuing only when it is greater than zero. A flow that sends "here are your 0 overdue items" every morning gets muted within a week, and a muted reminder is the same as no reminder.

Drafted with AI assistance from our own research and Search Console data, and reviewed by Rahul A before publishing. Tools and prices change; check the linked official source before you act.