The Best Way to Create Recurring Tasks in Notion (2023)

My work is reader-supported; if you buy through my links, I may earn an affiliate commission.

Play Video

This tutorial will show you the exact, step-by-step process to create recurring tasks in Notion and completely automate them.

That means you’ll be able to check off a task, and everything else simply happens for you – the due date gets moved, the Done checkbox becomes un-checked, and the task is ready and waiting for you the next time you need to do it.

Yes, seriously.

The method I’ll show you in this article requires no coding and can be done for free. Additionally, once you’ve completed the initial setup, you’re good to go – your recurring tasks will just work.

Here’s a breakdown of what we’ll be doing:

  1. Set up recurring tasks inside of Notion
  2. Automate those recurring tasks using Make.com (free, formerly known as Integromat)

The automation here is driven by the Notion API, and by using Make.com we’re able to leverage that API without writing any code. Neat!

Before you can automate your recurring tasks, you’ll need to set up a system to add recur settings to those tasks in the first place – e.g. “Every other day”, or “Every 2 months”.

Fortunately, we’ve done this work for you. My team and I have added a set of powerful recurring task features to Ultimate Tasks, my free task manager template. I recommend starting by adding the template to your workspace:

The Ultimate Task and Project Management Template for Notion

Use this template to move ALL of your task and project management into Notion.

Get it Free

Ultimate Tasks also has a ton of other features that will allow you to manage your tasks and projects completely in Notion:

  • Projects (with built-in progress bars)
  • Sub-Tasks
  • Smart Lists (Today, Next 7 Days, etc.)
  • Cold Tasks (long-overdue tasks get out of your way)

Ultimate Tasks also comes with a detailed wiki that includes tutorials and deeply detailed reference docs.

For the rest of the tutorial, I’ll assume you’re using Ultimate Tasks (or its big brother, Ultimate Brain).

However, if you want to implement the recurring tasks features from Ultimate Tasks into your own template, you can see all of them in my Advanced Recurring Task Dates template. This template exists as an educational proof-of-concept, so it’s less useful as an actual task manager.

To set up a recur interval for a task, open the task as a page. You’ll see a Due Date property, as well as three properties for setting up a recurring task:

These give you all the tools you need to set almost any recur interval you could want.

  • Recur Interval – A simple number property that works with Recur Unit.
  • Recur Unit – The available recur units, including
    • Day(s)
    • Week(s)
    • Month(s)
    • Month(s) on the Last Day
    • Month(s) on the Last Weekday
    • Month(s) on the First Weekday
    • Year(s)
  • Days (Only if Set to 1 Day(s)) – this will let you set a task to recur on specific days on the week – e.g. Mon/Wed/Fri
    • Recur Unit must be set to Day(s) and Recur Interval must be set to 1.

Once you set up a recur interval, you’ll also see a property called Next Due. This shows the next due date for the recurring task.

Here are a few examples of recur intervals you could set up using these three properties:

Due Every 3 Days:

  • Recur Interval : 3
  • Recur Unit: Day(s)

Due Every 2 Months on the Last Weekday

  • Recur Interval: 2
  • Recur Unit: Month(s) on the Last Weekday

Due Every Tuesday and Thursday

  • Recur Interval: 1
  • Recur Unit: Day(s)
  • Days (Only if Set to 1 Day(s)): Tuesday, Thursday

As you can see, there are many combinations of these three properties that will let you create most of the useful recur intervals that you could create in other apps like Todoist, Asana, or ClickUp.

You can “complete” a recurring task directly inside of Notion simply by changing the Due Date property to the date displayed in the Next Due property after you finish the task.

Note that you do not need to click the Done checkbox property in this case, as it won’t do anything. If you want to be able to click Done and have the task automatically update its Due Date, then continue on to the next portion of the tutorial.

With the release of the Notion API, we can now automate all sorts of processes inside of Notion that used to be done manually. This includes processing recurring tasks!

While you could code an app to handle this (if you’re a programmer), it’s also possible with no-code tools. In this tutorial, we’ll use Make.com (formerly known as Integromat), which works for free up to a limit (around 969 recurring tasks a month)

Essentially, an app can have an API (Application Programming Interface) that allows outsiders – including indie developers and even other apps – to work with certain pieces of its code.

Here’s an example of an API in action. In Slack, I can use the Giphy extension – which leverages the Giphy API – to paste a gif right in one of my conversations.

There are several tools – we can call them integration builders – that let you connect different app APIs together without having to write code yourself.

These include Zapier, IFTTT, Make.com, and others.

Amongst these, Make.com is one of the most powerful. It’s not as easy to use as IFTTT (the most basic, user-friendly one) or Zapier, but it gives you a lot more flexibility than those other tools do.

For that reason, automating recurring tasks in Notion with Make.com involves a more complicated setup than it does with Automate.io. However, the upside is that we can do it using their free plan.

In this section of the guide, I’ll walk you through the exact steps to create an automated recurring tasks script in each tool.

Unfortunately, this process is currently not possible using Zapier, due to the fact that Zapier hasn’t updated their Notion integration to support triggering a Zap when a database is updated.

Before we go on, I want to briefly explain how automation of recurring tasks works – both in Notion an in basically any productivity app.

When you set up a recurring task and check it off as “Done”, here’s what happens from the app’s perspective:

  • The user has checked “Done”, so run the recurring tasks script
  • Update the Due Date as specified by the user’s recur interval (e.g. “every other day”)
  • Uncheck the “Done” box

There’s another way an app could handle recurring tasks: Instead of editing the task you checked off, it could create a duplicate of that task with the new due date. However, most productivity apps use the method I’ve just described instead.

My Ultimate Tasks template contains all the logic needed to calculate the Next Due Date right within the template itself. This is very useful – it allows you to use the manual method of updating recurring tasks if you want, but it also saves us the trouble of adding very complex date calculation code to our automation.

Here’s all that our automation will be doing.

  • Step 1: Search through your tasks database in Notion, looking for tasks that have been marked Done and that have a date displayed in the Next Due property.
  • Step 2: For each found task that fits those two criteria, update the Due Date property to have the date displayed in the Next Due property, and then un-check the Done checkbox property.

That’s it!

For automated recurring tasks to work, you’ll need to set up a UTC Offset property in your workspace.

Feel free to skip this, but here’s a technical explanation for those who are curious.

When a Notion formula outputs a date, the Notion API will always see that date from the perspective of UTC time.

This presents a problem, because our Next Due formula has advanced logic that takes into account whether or not a task was overdue when it was completed.

Most task management apps do this, including Todoist and Asana. If they didn’t, then you can run into a situation like this:

  • A task is due Jan 1, and is set to recur every 3 days. Normally, it should be next due on Jan 4.
  • You ignore it for a long time, and finally check it off on May 6.
  • Now it shows as due Jan 4 – still way, way overdue.

A smarter task manager would realize that the task is overdue and take this into account. Instead of updating the due date to Jan 4, it should update it to be due on May 7.

Our Next Due formula does this, which is great… except it clashes with the Notion API’s insistence on seeing the output of Next Due in UTC time.

Here’s the problem… UTC time is often in a different day than your local time zone is.

For example, if it’s 7pm in Denver on May 6, it’s actually 2am in UTC time… on May 7, the next day.

This means that the your automated recurring tasks script (which we’ll build below) looks at the output of Next Due using the Notion API… and sees the task as overdue. You checked the task off on time (at 7pm), but the API sees it as 2am the next day.

Note: Our recurring tasks solution doesn’t officially support task times. They’ll work most of the time, but there are weird situations where they won’t (such as the day that Daylight Savings Time happens). But even without times on your tasks, the API looking at your workspace from UTC time-perspective can cause it to see your workspace from the perspective of the next day (or the previous, if you’re east of the UTC time zone and it’s very early in the morning).

That’s where our UTC Offset property comes in. Since I’m in Denver, I set my offset to -7, which subtracts 7 hours from the output of Next Due (but only if it’s being viewed from the perspective of UTC time – we thought ahead on that one).

This means the Notion API now sees the output of Next Due the same way we see it. In other words, the offset forces the API to look at Next Due as if it were in my local time zone (Denver).

Fortunately, Ultimate Tasks, Ultimate Brain, and my Advanced Recurring Tasks proof-of-concept templates all come with a UTC Offset property by default, so all you’ll need to do is edit it so that it matches your time zone.

If you happen to be using an older version of one of my templates that doesn’t contain this property, please see this upgrade guide to learn how to add it.

A UTC offset is just the number hours that your local time zone is behind or ahead of UTC (Coordinated Universal Time).

I live in Denver, Colorado, so my standard UTC offset (when not affected by Daylight Savings Time, the scourge of the modern world) is -7.

Hence, you see -7 in the UTC Offset property above.

You can find your own UTC Offset at the Time and Date website. Type in your location, then find the UTC Offset for your standard (not Daylight Savings) time zone.

Here, you can see that I’ve identified UTC-7 as my offset.

By default, my templates have their UTC Offset property set to 0. You’ll want to change it to match your actual UTC Offset.

In your All Tasks database, find the UTC Offset property by opening up any task and then clicking the more properties button:

You’ll find UTC Offset in under the ⏱ Recurring Divider property:

Edit UTC Offset so it contains your standard UTC offset (again, not your daylight savings time offset).

If you’re unable to edit this value, you’ll need to unlock the database you’re working on first.

With your UTC Offset set, you’re now ready to build your automation!

Make.com is a powerful integration builder that gives you near-direct access to Notion’s API (as well as the APIs for many other apps).

Recommended
Make.com

My favorite no-code automation builder that can create workflows between hundreds of apps.

Has a bit of a learning curve, but it significantly more powerful (and cheaper) than Zapier. Has a great free tier too.

Sign Up for Free
I'm a heavy Make.com user and an affiliate. I'll earn a commission if you sign up through this link and upgrade to a paid account (at no extra cost to you).

Here are the steps you need to follow to create your recurring tasks automation using Make.com.

First, create a Make.com account if you don’t have one. You can stick with the free plan, as it’ll work perfectly for our purposes.

The only thing to be aware of regarding the free plan is its Operation limit. The free plan limits you to 1,000 operations per month.

We’ve found that it costs one operation each time you run the script (called a Scenario) we’ll be building, as well as one operation per recurring task that is updated.

By default, Make.com will set your Scenario to run every 15 minutes – however, that would result in 2,976 operations per month – without counting the operations needed to actually update your tasks!

For that reason, I set my Scenario to run once a day at 11:55pm (it needs to be before midnight). That’s 31 max operations per month, leaving 969 left over to update my tasks (and I don’t have even close to 969 recurring tasks in a month).

Armed with that knowledge, head to your Scenarios tab and Create a New Scenario.

Click the large + button and search for Notion.

From the list of actions that pops up, select Search Objects.

This will create the first part of a two-step automation that will help us automatically process recurring tasks.

The next step is to connect your Scenario to your Notion account. Click the Add button under Connection:

Ensure Notion Public is selected under Connection Type. The Connection Name doesn’t matter, so you can leave it as My Public Notion Connection if you want.

Now you’ll authenticate with Notion. Be sure you’ve selected the correct Workspace that contains your copy of Ultimate Tasks, then hit Select Pages.

Next, select your copy of Ultimate Tasks, or a page that contains it.

Remember that Notion has cascading permissions, which means that sub-pages inherit the permissions of their parent page unless you change them manually.

This works in our favor, as what we really need to give Make.com access to is the All Tasks database contained within Ultimate Tasks.

Once you’ve selected the correct page, click Allow Access.

Now we need to get the Database ID from our All Tasks database. This will tell our Scenario precisely with database to search.

You can find your Database ID by navigating to your All Tasks database within Ultimate Tasks.

Important: You must be on the actual All Tasks database page. Ensure that you’re not merely on another page that contains a Linked Database view.

Copy the URL of the All Tasks database to your clipboard. You can do this with Ctrl/⌘ + L or by hitting the three-dot menu in the top-right corner and then clicking Copy Link.

From there, you can find the Database ID by copying the part of the URL directly after the / character in notion.so/ and before the ? character:

Here’s my database’s URL:

https://www.notion.so/97a4d9506d1840d2a00e186a3d2d632f?v=2cf8cd2d0caa47fd88e61de05cf9ee59

Which means my Database ID is:

97a4d9506d1840d2a00e186a3d2d632f

Head back to your Scenario. Ensure that Search Objects is set to Database Items, and then paste your Database ID into the Database ID field. Note: The example ID shown in this post will not work for you – your Database ID must be from your own All Tasks database.

Next, add three Filters, ensuring the second and third are added as AND rules.

Filter 1:

  • Done (Checkbox)
  • Equals
  • True (drag the pink true Keyword from the popup. Ensure the gear-icon tab is active.)

Filter 2:

  • Next Due (Formula)
  • Formula sub-heading → Text – Is not empty (boolean) – Important: Select this option from under the Formula subheading in the dropdown menu.
  • True (drag the pink true Keyword from the popup. Ensure the gear-icon tab is active.)

Filter 3:

  • Next Due (Formula)
  • Formula sub-heading → String – Does not equal
  • Paste Error in Recur Interval: Non-Whole or Negative Number in the third field. This is an error that Next Due will display in Notion if you happen to set your Recur Interval property to an incorrect number, like 1.5 or -42.

Finally, set the Limit to 100 and hit OK.

Note: Database needs to be from your own database. The example ID shown here will NOT work for you.

Before we move onto the next step, head back to your copy of Ultimate Tasks and ensure there is at least one recurring task that has been marked Done.

Your Make.com Scenario needs to find at least one Done recurring task in order to complete the search we just set up and grab data that we’ll need to finish building the automation.

Once you’ve done this, head back to your Scenario and hit the Run Once button in the bottom-left corner. Additionally, hit the Save icon in order to save your work.

If everything worked as expected, you should see a green checkmark under your Notion icon, as well as a number in the upper corner (this is the number of Done recurring tasks that the search found in your All Tasks database).

Additionally, there should be no errors displayed in the Log. If there are, the most likely error is that you didn’t have a recurring task in your All Tasks database that was marked Done before you hit Run Once. In this case, mark a recurring task Done and then hit Run Once again.

Next, we’ll create the second half of our Scenario which will actually update our All Tasks database and process the completed recurring tasks that were found in the search.

To the right of your Notion icon, click Add Another Module.

Click Notion, then choose Update a Database Item from the list of actions.

Under Enter a Database ID, change the dropdown option to Enter Manually.

Paste the same Database ID from before (the one from your All Tasks page URL) in the Database ID field.

Next, drag the id object from the pop-up and drop it into the Page ID field.

Note: The id object may also be called Page ID. I’ve seen it listed both ways, but it works either way.

Next, click Add Item under Fields. For Item 1, set it up as follows:

  • Key: Due (simply type this – it’s the name of your Due property in Ultimate Tasks)
  • Value Type: Date

In the Start Time field, do the following:

First, click over to the calendar menu icon in the popup, then drag in the parseDate(;) function to the Start Time field.

Next, click back to the star menu icon in the popup. Under properties_value and then Next Due, find the string object and drag it between the ( and ; in parseDate(;).

Finally, between the ; and ) symbols in parseDate(;), paste MMMM DD, YYYY.

The other fields – End Time and Include Time – can be left blank. This function simply updates the Due Date property in Ultimate Tasks with the date displayed in Next Due. Remember: Next Due is the Formula property that does all of the recurring date calculation directly in Notion for us!

Add one more item with the following values:

  1. Key: Done
  2. Value Type: Checkbox
  3. Value: No

This part of the function will automatically uncheck the Done checkbox.

Hit OK.

There’s just one more thing to do. Click the three dots between your two Scenario steps to create a filter. Give it the following settings:

  • Label: Check Results
  • Condition: Drag the id object into this field. Note: It may also be called Page ID.
  • Criteria: Exists

This filter will keep the Scenario from throwing an error (and sending you an annoying email) in the event that it doesn’t find any completed recurring tasks when it performs its search.

At this point, you can hit Run Once in order to test your script. Watch your All Tasks database: Any Done recurring tasks should be automatically un-checked and have their Due dates updated.

Once you’ve verified the test was successful, there’s one quick step left before we approach the finish line.

Right-click the very first module you set up in the beginning—the Notion Search Objects module—and click Add error handler.

In the box that pops up, click Commit.

This will tell Make that the scenario has completed successfully, even if the Search Objects module fails to find anything.

You wouldn’t normally want to silence error messages, so it’s important that this step comes last, after everything’s already working.

The reason we need to do this is that a scheduled Make scenario automatically turns off if it gives an error too many times in a row. Since the Search Objects module fails if it doesn’t find anything, this would happen if you just happened to go a few days without completing any of your recurring tasks, and you’d have to come back to Make.com to turn it on again.

With that out of the way, it’s time to set your Scenario’s schedule.

I recommend running it once per day to minimize the actions it takes up.

Note that your Scenario must run during the current day, so I recommend setting it to 11:55pm.

This way, your scheduled Scenario runs will only use a maximum of 31 Operations per month (one per day), leaving 969 (1,000 – 31) leftover to process your completed recurring tasks.

Note that on Make.com’s free plan, 15 minutes is the smallest interval you can use for your Scenarios. Keep this in mind when building other Scenarios that may need more frequent updating or faster response times.

Finally, switch the Scenario to On, and save your work.

Congratulations! You’ve just set up completely automated recurring tasks in Notion.

The last thing you may want to do is edit the Type property in your All Tasks database if you’re using Ultimate Tasks or Ultimate Brain. Replace its formula with this one:

if(empty(prop("Recur Interval")), "⏳One-Time", "⏳One-Time")

These templates contain filters that will prevent tasks with a Type of 🔄Recurring from leaving your task views when the Done checkbox is checked.

This is a bit of error-prevention, since many users don’t know that checking Done on a recurring task won’t do anything by default.

But now that you’ve set up automatic recurring tasks, checking Done actually does do something!

So we can now get rid of this error-checking, and the easiest way to do it is to edit the Type formula as described above. Otherwise, you’d have to go around and edit the filters in every view of Ultimate Tasks.

I’d love to add Zapier to this tutorial, and by all accounts you should be able to automate your recurring tasks using their platform.

There’s just one problem – Zapier’s Notion integration only supports the New Database Item trigger as of this writing.

This means we can’t have an automation trigger when a page or database item is updated, which is crucial for automating recurring tasks.

Until Zapier adds the triggers that Make.com already has, we won’t be able to use them for this purpose – or for any other Zap that needs a page/database item updated trigger.

That’s the end of this tutorial, but if you want to learn more and take your Notion workspace to the next level, check out some of my other tutorials:

Also, if you enjoy this content and want more, consider joining my Notion Tips email list! I’ll keep you up to speed on my Notion courses, but also let you know when I publish new free tutorials and templates:

Notion Tips Newsletter

Get updates about my Notion templates and tutorials. Easily unsubscribe at any time.

Thanks for Subscribing!

A confirmation email just went out to the email address you provided. Once you click the confirmation link in it, you’ll be on the list! I’ll also send you a link to all my free Notion templates.

🤔 Have an UB Question?

Fill out the form below and I’ll answer as soon as I can! ~Thomas

🤔 Have a Question?

Fill out the form below and I’ll answer as soon as I can! ~Thomas