This database is only found in the Creator’s Companion: Ultimate Tasks Edition.
The Tasks database contains all of the tasks you create in Ultimate Tasks. Nearly every page/database view you work with in the template is simply a “window” into this central database, which has its own settings design to pull a subset of the task pages, sort them in a particular way, etc.
Tasks is the primary database in Ultimate Tasks; all other databases in the template support it.
Below you’ll find a reference guide for all properties in the Tasks database. Properties are in alphabetical order.
Properties
Assignee
Type: People
Use this property to set assignees for each task.
Note that Ultimate Tasks is set up for individual use by default; to make this property useful, you’ll want to create filtered views that only show tasks assigned to specific people.
Content
Type: Relation
This Relation connects to the Content database, allowing you to associate a content project with your tasks.
Created
Type: Created Time
The creation time of the task.
Days (Only if Set to 1 Day(s))
Type: Multi_select
Allows you to pick specific days of the week for a task to recur – e.g. Mon/Wed/Fri.
As noted by the property name, this property only take effect if Recur Interval is 1 and Recur Unit is set to Day(s) (or is blank).
If you’d like to translate these options, you’ll need to change them in the Localization Key formula property in this database as well.
Name | Description |
---|---|
Monday | Monday |
Tuesday | Tuesday |
Wednesday | Wednesday |
Thursday | Thursday |
Friday | Friday |
Saturday | Saturday |
Sunday | Sunday |
Description
Type: Rich_text
A simple text property for adding a note about this task.
If you’ve added the Notion AI add-on to your workspace, you can turn AI Autofill on to generate a summary of the task’s details (provided there’s a full description in the task’s page body).
Due
Type: Date
The due date for the task.
Due Stamp (Parent)
Type: Formula
If a task is sub-task, this returns the Due Timestamp value of its parent task. Otherwise, it simply returns this task’s own Due Timestamp value.
This property is the highest-priority sorting criteria for Task views within Projects. It keeps sub-tasks beneath their parent tasks.
!prop("Parent Task")
? prop("Due Timestamp")
: prop("Parent Task").first().prop("Due Timestamp")
Code language: JavaScript (javascript)
Due Timestamp
Type: Formula
Used to aid in correctly sorting tasks and sub-tasks within Projects.
If the task doesn’t have a Due date set, this timestamp will be 100 years in the future. This simply keeps tasks/sub-tasks without a due date below tasks that have one.
!prop("Due")
? now().dateAdd(100, "years").timestamp()
: prop("Due").timestamp()
Code language: JavaScript (javascript)
Edited
Type: Last_edited_time
The last edited time of the task.
Localization Key
Type: Formula
This property allows you to localize your template. If you want to translate the option names in the Days, Recur Unit, and Status properties, you can do so and then change the arrays in this formula to the same values.
This will allow formulas to keep working.
[
/* Rewrite these weekday and recur unit options in your own language, so your second brain can work even better with your first. Make sure to set up the same options in the "Recur Unit" and "Days (Only If Set to 1 Day(s))" properties afterward, so you can select them. Feel free to remove the original names afterward! */
/* ["lunes", "3ª", "mercredi", "木曜日", "piątek", "lørdag", "Double Sunday"] */
["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
/* ["Day(s)", "Week(s)", "Month(s)", "Year(s)", "Month(s) on the Last Day", "Month(s) on the First Weekday", "Month(s) on the Last Weekday"] */
["Day(s)", "Week(s)", "Month(s)", "Year(s)", "Month(s) on the Last Day", "Month(s) on the First Weekday", "Month(s) on the Last Weekday"],
/* This final list is for Status option names. */
["To Do", "Doing", "Done"]
]
Code language: JavaScript (javascript)
Meta Labels
Type: Formula
Used in List views to show if a task is recurring, and/or if it has unfinished sub-tasks.
lets(
recurring,
if(
not empty(prop("Next Due")),
"🔁",
""
),
hasSubtask,
if(
prop("Sub-Tasks").filter(current.prop("Status") != "Done").length() > 0,
"↳",
""
),
[recurring, hasSubtask].join(" ").replace("^\s","").replace("\s$","")
)
Code language: JavaScript (javascript)
Name
Type: Title
The name of the task.
Next Due
Type: Formula
The “next due” date for the task if it is recurring. A date will show here once you have values set in the Due and Recur Interval properties.
The date is calculated the Due date, today’s date, and the values in Recur Interval, Recur Unit, and Days (Only if Set to 1 Day(s)).
if(
!empty(prop("Due"))
and prop("Recur Interval") > 0,
if(
prop("Recur Interval") == ceil(prop("Recur Interval")),
lets(
recurUnit, ifs(
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 0), prop("Recur Unit") == "Day(s)"), "days",
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 1), prop("Recur Unit") == "Week(s)"), "weeks",
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 2), prop("Recur Unit") == "Month(s)"), "months",
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 3), prop("Recur Unit") == "Year(s)"), "years",
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 4), prop("Recur Unit") == "Month(s) on the Last Day"), "monthsonthelastday",
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 5), prop("Recur Unit") == "Month(s) on the First Weekday"), "monthsonthefirstweekday",
or(prop("Recur Unit") == at(at(prop("Localization Key"), 1), 6), prop("Recur Unit") == "Month(s) on the Last Weekday"), "monthsonthelastweekday",
"days"
),
weekdays, match([
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 1 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Monday")), 1, false
),
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 2 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Tuesday")), 2, false
),
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 3 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Wednesday")), 3, false
),
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 4 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Thursday")), 4, false
),
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 5 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Friday")), 5, false
),
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 6 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Saturday")), 6, false
),
if(
or(includes(prop("Days (Only if Set to 1 Day(s))"), at(at(prop("Localization Key"), 0), 7 - 1)), includes(prop("Days (Only if Set to 1 Day(s))"), "Sunday")), 7, false
)
], "[1-7]"),
dateDue, parseDate(formatDate(prop("Due"), "YYYY-MM-DD")),
dateDueEnd, parseDate(formatDate(dateEnd(prop("Due")), "YYYY-MM-DD")),
timeNow, now(),
offsetTimeNow, dateAdd(timeNow, prop("UTC Offset"), "hours"),
inUTC, if(formatDate(now(), "ZZ") == "+0000", true, false),
hasValidOffset, if(!empty(prop("UTC Offset")) and prop("UTC Offset") >= -12 and prop("UTC Offset") <= 14, true, false),
hasRange, dateEnd(dateDueEnd) > dateStart(dateDue),
dueRange, dateBetween(dateDueEnd, dateDue, "days"),
conditionalTimeNow, if(inUTC and hasValidOffset, offsetTimeNow, timeNow),
conditionalDateNow, parseDate(formatDate(conditionalTimeNow, "YYYY-MM-DD")),
recurUnitLapseLength, if(includes(["days", "weeks", "months", "years"], recurUnit), dateBetween(conditionalDateNow, dateDue, recurUnit) / prop("Recur Interval"), false),
lastDayBaseDate, if(
includes(["monthsonthelastday", "monthsonthefirstweekday", "monthsonthelastweekday"], recurUnit),
if(year(conditionalDateNow) * 12 + month(conditionalDateNow) - (year(dateDue) * 12 + month(dateDue)) > 0,
dateSubtract(dateAdd(dateSubtract(dateAdd(dateDue, ceil((year(conditionalDateNow) * 12 + month(conditionalDateNow) - (year(dateDue) * 12 + month(dateDue))) / prop("Recur Interval")) * prop("Recur Interval"), "months"), date(dateAdd(dateDue, ceil((year(conditionalDateNow) * 12 + month(conditionalDateNow) - (year(dateDue) * 12 + month(dateDue))) / prop("Recur Interval")) * prop("Recur Interval"), "months")) - 1, "days"), 1, "months"), 1, "days"),
dateSubtract(dateAdd(dateSubtract(dateAdd(dateDue, prop("Recur Interval"), "months"), date(dateAdd(dateDue, prop("Recur Interval"), "months")) - 1, "days"), 1, "months"), 1, "days")),
"".parseDate()
),
firstDayBaseDate, if(lastDayBaseDate.empty() != true, dateSubtract(lastDayBaseDate, date(lastDayBaseDate) - 1, "days"), "".parseDate()),
firstWeekdayBaseDate, if(lastDayBaseDate.empty() != true,
if(
test(day(firstDayBaseDate), "6|7"),
dateAdd(firstDayBaseDate, 8 - day(firstDayBaseDate), "days"),
firstDayBaseDate
),
"".parseDate()
),
lastWeekdayBaseDate, if(lastDayBaseDate.empty() != true,
if(
test(day(lastDayBaseDate), "6|7"),
dateSubtract(lastDayBaseDate, day(lastDayBaseDate) - 5, "days"),
lastDayBaseDate
),
"".parseDate()
),
nextLastBaseDate, if(lastDayBaseDate.empty() != true,
dateSubtract(dateAdd(dateSubtract(dateAdd(lastDayBaseDate, prop("Recur Interval"), "months"), date(dateAdd(lastDayBaseDate, prop("Recur Interval"), "months")) - 1, "days"), 1, "months"), 1, "days"),
"".parseDate()
),
nextFirstBaseDate, if(lastDayBaseDate.empty() != true, dateSubtract(nextLastBaseDate, date(nextLastBaseDate) - 1, "days"), "".parseDate()),
nextFirstWeekday, if(lastDayBaseDate.empty() != true,
if(
test(day(nextFirstBaseDate), "6|7"),
dateAdd(nextFirstBaseDate, 8 - day(nextFirstBaseDate), "days"),
nextFirstBaseDate
),
"".parseDate()
),
nextLastWeekday, if(lastDayBaseDate.empty() != true,
if(
test(day(nextLastBaseDate), "6|7"),
dateSubtract(nextLastBaseDate, day(nextLastBaseDate) - 5, "days"),
nextLastBaseDate
),
"".parseDate()
),
nextDueStart, ifs(
recurUnit == "days" and length(weekdays) > 0 and prop("Recur Interval") == 1,
if(conditionalDateNow >= dateDue,
ifs(
includes(weekdays, format(day(dateAdd(conditionalDateNow, 1, "days")))), dateAdd(conditionalDateNow, 1, "days"),
includes(weekdays, format(day(dateAdd(conditionalDateNow, 2, "days")))), dateAdd(conditionalDateNow, 2, "days"),
includes(weekdays, format(day(dateAdd(conditionalDateNow, 3, "days")))), dateAdd(conditionalDateNow, 3, "days"),
includes(weekdays, format(day(dateAdd(conditionalDateNow, 4, "days")))), dateAdd(conditionalDateNow, 4, "days"),
includes(weekdays, format(day(dateAdd(conditionalDateNow, 5, "days")))), dateAdd(conditionalDateNow, 5, "days"),
includes(weekdays, format(day(dateAdd(conditionalDateNow, 6, "days")))), dateAdd(conditionalDateNow, 6, "days"),
includes(weekdays, format(day(dateAdd(conditionalDateNow, 7, "days")))), dateAdd(conditionalDateNow, 7, "days"),
"".parseDate()
),
ifs(
includes(weekdays, format(day(dateAdd(dateDue, 1, "days")))), dateAdd(dateDue, 1, "days"),
includes(weekdays, format(day(dateAdd(dateDue, 2, "days")))), dateAdd(dateDue, 2, "days"),
includes(weekdays, format(day(dateAdd(dateDue, 3, "days")))), dateAdd(dateDue, 3, "days"),
includes(weekdays, format(day(dateAdd(dateDue, 4, "days")))), dateAdd(dateDue, 4, "days"),
includes(weekdays, format(day(dateAdd(dateDue, 5, "days")))), dateAdd(dateDue, 5, "days"),
includes(weekdays, format(day(dateAdd(dateDue, 6, "days")))), dateAdd(dateDue, 6, "days"),
includes(weekdays, format(day(dateAdd(dateDue, 7, "days")))), dateAdd(dateDue, 7, "days"),
"".parseDate()
)
),
recurUnit == "monthsonthelastday", if(conditionalDateNow >= lastDayBaseDate, nextLastBaseDate, lastDayBaseDate),
recurUnit == "monthsonthefirstweekday", if(conditionalDateNow >= firstWeekdayBaseDate, nextFirstWeekday, firstWeekdayBaseDate),
recurUnit == "monthsonthelastweekday", if(conditionalDateNow >= lastWeekdayBaseDate, nextLastWeekday, lastWeekdayBaseDate),
includes(["days", "weeks", "months", "years"], recurUnit),
if(dateBetween(conditionalDateNow, dateDue, "days") >= 1,
if(recurUnitLapseLength == ceil(recurUnitLapseLength),
dateAdd(dateDue, (recurUnitLapseLength + 1) * prop("Recur Interval"), recurUnit),
dateAdd(dateDue, ceil(recurUnitLapseLength) * prop("Recur Interval"), recurUnit)
),
dateAdd(dateDue, prop("Recur Interval"), recurUnit)
),
"".parseDate()
),
nextDueEnd, if(hasRange and nextDueStart.empty() != true,
dateAdd(nextDueStart, dueRange, "days"),
"".parseDate()
),
nextDue, if(hasRange and nextDueEnd.empty() != true, dateRange(nextDueStart, nextDueEnd), nextDueStart),
nextDue
),
"".parseDate()
),
"".parseDate()
)
Code language: JavaScript (javascript)
Next Due API
Type: Formula
This formula takes the Date value from the Next Due property, separates the start and end dates (if an end date is present), and formats the output as a JSON string. Used exclusively by Pipedream for automated recurring tasks (you shouldn’t edit it).
if(test(prop("Next Due"), "Error") or empty(prop("Next Due")) or prop("Next Due") == false, "∅", "{\"start\":\"" + formatDate(dateStart(prop("Next Due")), "YYYY-MM-DD") + "\",\"end\":\"" + formatDate(dateEnd(prop("Next Due")), "YYYY-MM-DD") + "\"}")
Code language: JavaScript (javascript)
Parent Content
Type: Rollup
If this page’s task is a sub-task, this Rollup property shows the Content project of the Parent Task (if one is set).
Primarily useful for making the Task With Sub-Tasks database template work as expected.
Parent Project
Type: Rollup
If this page’s task is a sub-task, this Rollup property shows the Project of the Parent Task (if one is set).
Primarily useful for making the Task With Sub-Tasks database template work as expected.
Parent Task
Type: Relation
If the current page is a sub-task, its parent task page will be shown here.
This property is a Relation which connects to another property inside this same Tasks database.
Priority
Type: Status
Priority level for your task. By default, this value only matters in the special Priority View. Priority doesn’t affect task sorting or visibility in other views – but you can add Priority filters or grouping to them if you want.
Name | Description |
---|---|
Group: To-do | |
Group: In progress | |
Low | For low-priority tasks. |
Medium | For medium-priority tasks. |
High | For high-priority tasks. |
Group: Complete |
Project
Type: Relation
This Relation connects to the Projects database, allowing you to associate a project with your tasks.
Project Active
Type: Formula
This property shows whether this task’s project is active (either Doing or Ongoing). Used for views that only show tasks within projects that are active – helpful for filtering out tasks in projects that are planned, but not yet in progress.
lets(
project,
if(
prop("Parent Task"),
prop("Parent Task").first().prop("Project").first(),
prop("Project").first()
),
projectStatus,
project.prop("Status"),
projectLocalizationKey,
project.prop("Localization Key"),
if(
projectStatus == "Doing"
or projectStatus == "Ongoing"
or projectLocalizationKey.at(1).includes(projectStatus),
true,
false
)
)
Code language: JavaScript (javascript)
Recur Interval
Type: Number
How often to make a recurring task recur. By default, this interval is a number of days -e.g an interval of 2 make Next Due two days from Due (or today’s date). You can set a Recur Unit to adjust this.
Recur Unit
Type: Select
Sets the unit of time that will be used by Recur Interval to set Next Due. E.g. if you set Week(s) here, then a Recur Interval of 2 will set a task to recur every 2 weeks.
Name | Description |
---|---|
Day(s) | Recur Interval counts days. |
Week(s) | Recur Interval counts weeks. |
Month(s) | Recur Interval counts months. |
Month(s) on the First Weekday | Recur Interval counts months, from the first weekday. |
Month(s) on the Last Weekday | Recur Interval counts months, from the last weekday. |
Month(s) on the Last Day | Recur Interval counts months, from the last day. |
Year(s) | Recur Interval counts years. |
Recurring Tasks Divider
Type: Formula
This formula property just helps to visually separate the recurring tasks helper properties below (which should not be edited) from the rest above.
repeat("■", 3).style("red") + " Recurring Tasks helper properties".style("b")
Code language: JavaScript (javascript)
Smart List
Type: Select
Allows you to apply special “tags” to a task. By default, the only value is “Someday”.
Tasks marked as Someday will show in the Someday View, and they will be hidden from the Inbox even if they don’t have a Project assigned.
Name | Description |
---|---|
Someday | Tasks you’d like to do someday, but that arent important right now. |
Status
Type: Status
Tracks the status of the task. Most views in Ultimate Tasks show this property as a checkbox.
Checking the checkbox will alternate Status between “To Do” and “Done”. ⌥/Alt + Click the checkbox in order to access all options, including “Doing”.
Name | Description |
---|---|
Group: To-do | |
To Do | Tasks that you need to do. |
Group: In progress | |
Doing | Tasks you’re currently doing. |
Group: Complete | |
Done | Tasks that are done. |
Sub-Task Arrow
Type: Formula
Indents sub-tasks in List views. This template does not use Notion’s native sub-items feature, as it can cause unexpected results and user confusion in this template’s Projects database template.
ifs(
prop("Parent Task"),
"→"
)
Code language: JavaScript (javascript)
Sub-Task Sorter
Type: Formula
Used in Projects, alongside Due Stamp (Parent), to ensure that sub-tasks are sorted correctly beneath their parent tasks.
lets(
subSeedName,
if(
!prop("Parent Task"),
prop("Name").lower(),
prop("Parent Task").first().format().lower()
),
subSeed,
if(
!prop("Parent Task"),
1,
2
),
taskStatus,
if(
prop("Status") == "Done" or prop("Status") == prop("Localization Key").at(2).last(),
2,
1
),
taskStatus + " - " + subSeedName + " - " + subSeed
)
Code language: JavaScript (javascript)
Sub-Tasks
Type: Relation
If the current task page is a Parent Task, all of its sub-tasks will be shown here.
This is a Relation property, which is connected to the Parent Task Relation property in this same Tasks database.
UTC Offset
Type: Formula
Your UTC offset, based on your location (e.g. -6 for Denver during DST time, -7 at other times).
This property is set automatically by Thomas’ automated recurring tasks Pipedream workflow, so you don’t need to edit it. By default, it starts at 0.
0
Code language: JavaScript (javascript)