Get AI summaries of any video or article — Sign up free
Sub-Tasks in Notion: The Ultimate Guide thumbnail

Sub-Tasks in Notion: The Ultimate Guide

Thomas Frank Explains·
5 min read

Based on Thomas Frank Explains's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.

TL;DR

Create a self-referential relation in the task database and split it into “parent task” and “subtasks” roles so each row can point to its parent within the same database.

Briefing

Notion task lists can support true subtasks—complete with nested display, default subtask creation, and reliable sorting—by combining a self-referential relation, a template-driven linked database, and a set of formula/rollup properties that enforce parent-child ordering. The payoff is practical: subtasks can be checked off, assigned due dates, and shown directly under their parent task even when those subtasks are due earlier than the parent.

The setup starts with a self-relation inside a task database. A new relation property (e.g., “subtasks”) is created that links the database to itself, then split into two roles: “parent task” for the parent reference and “subtasks” for the child reference. Once that relationship exists, creating a task and then setting its “parent task” field automatically makes it behave like a subtask. A small formula tweak to the task’s “state” display adds a right-arrow indicator when “parent task” is not empty, visually distinguishing subtasks from top-level tasks.

Next comes the template that lets users add subtasks from within a specific task page. A template (e.g., “task with subtasks”) inserts a linked database filtered to show only rows where “parent task contains” the template instance’s name. This relies on self-referential filters: when the template is instantiated, the filter updates to the new task’s name, so the linked list automatically becomes the correct subtask list. With that in place, subtasks appear under the parent task and inherit the parent context without manual re-linking.

Default subtasks are trickier. Notion templates can’t spawn brand-new database rows that are independent of the template page, so adding “default subtasks” directly inside the template results in the same rows being reused and marked done in both places. The workaround is to store default subtasks as a synced checklist (outside the template), then copy them into the database when creating a new instance—using an option/alt-drag copy so the subtasks become unique rows with their own parent relations.

The hardest part is sorting. Simple sorting by due date fails because subtasks can share the same due date as other tasks, and subtasks often have due dates earlier than their parent. The solution uses multiple computed fields: a checkbox-like “subseat” flag to identify non-subtasks, a “subseat name” formula that resolves to the parent’s name (or the task’s own name if it’s top-level), a due-date-to-timestamp conversion, and rollups that fetch the parent’s due timestamp for subtasks. Sorting criteria are then layered: first by the parent-based timestamp, then by the parent-resolved name, then by whether a row is a subtask, and finally by the task’s own due date—producing a stable nested order.

To show subtasks inside projects, an additional rollup (“parent project”) pulls the project from the parent task through the parent-task relation. Filters in the project view then use this rollup so subtasks appear under the correct parent task even though they don’t have a direct project relation. The approach is limited to one level of nesting: rollups make deeper sub-subtasks brittle and prone to breakage, so the recommended design is a single subtask layer.

Cornell Notes

Subtasks in Notion can be implemented by adding a self-referential relation in a task database and using a template that inserts a linked database filtered to the current task instance. A formula-based arrow indicator can mark rows as subtasks when the “parent task” field is filled. Default subtasks require a workaround because templates can’t reliably create independent new database rows; a synced checklist can be copied into the database so each subtask becomes a unique row. Reliable nesting order needs formula + rollup properties that compare parent and child due dates using timestamps, then apply multi-criteria sorting. To display subtasks inside projects, a rollup can inherit the parent’s project so project views include subtasks even without a direct project relation.

How does a Notion task database represent parent/child subtasks without creating a separate database?

Create a relation property that links the database to itself. In practice, a new relation column (e.g., “subtasks”) is added as a self-relation, then configured with two roles: one property for the parent reference (renamed to “parent task”) and the relation used to list children. When a task’s “parent task” is set to another task, that row becomes a subtask of the parent.

What makes a “task with subtasks” template automatically show the right subtasks for each parent task?

The template inserts a linked database with a self-referential filter such as: where “parent task contains” the template instance’s name. When the template is instantiated, Notion updates the filter to match that specific instance, so the linked list shows only subtasks whose “parent task” points to the current parent task.

Why can’t default subtasks be added directly inside a template the way users expect?

Notion templates reuse the same underlying rows. If a “default subtask” is placed inside the template and then a new instance is created, the resulting row is effectively the same task marked done in both the template and the instance. The workaround is to keep default subtasks as a synced checklist outside the template and copy them into the database when creating a new instance (using option/alt-drag to copy rather than move), so each subtask becomes a unique database row with its own parent relation.

Why does sorting by due date alone fail for subtasks?

Subtasks can share due dates with other top-level tasks, causing them to appear under the wrong parent when sorted purely by due date. It also gets worse when subtasks are due earlier than their parent; due-date sorting can place them above unrelated tasks or even above the parent task itself.

What formula/rollup strategy enforces correct nesting order beneath the parent task?

Compute a parent-resolved grouping key and compare due dates using timestamps. The workflow uses: (1) a formula that yields the parent task name for subtasks (or the task’s own name if top-level), (2) a due-date-to-timestamp conversion, (3) a rollup that fetches the parent’s due timestamp for subtasks, and (4) a formula that selects which timestamp to use for sorting. Sorting then uses layered criteria: parent-based timestamp first, then the parent-resolved name, then subtask vs non-subtask ordering, and finally the task’s own due date.

How can subtasks appear inside a project view when subtasks don’t have a direct project relation?

Add a rollup like “parent project” that reaches through the “parent task” relation and pulls the parent’s “project” value. Then adjust the project view filter to include rows where “parent project contains” the project name (and apply the same self-referential filtering in the template). This makes subtasks show up under the correct parent task in project pages.

Review Questions

  1. What specific relation setup is required to make a task row behave as a subtask of another row in the same database?
  2. Which computed fields (formula vs rollup) are necessary to sort subtasks beneath their parent task even when due dates don’t match?
  3. What limitation of Notion templates forces the synced-checklist workaround for default subtasks?

Key Points

  1. 1

    Create a self-referential relation in the task database and split it into “parent task” and “subtasks” roles so each row can point to its parent within the same database.

  2. 2

    Use a template that inserts a linked database filtered by “parent task contains” the template instance name to automatically display the correct subtasks per parent task.

  3. 3

    Add a small state/display formula that appends an arrow (or similar marker) when “parent task” is not empty to visually distinguish subtasks.

  4. 4

    Handle default subtasks with a synced checklist + copy workaround, because template-created rows can’t reliably generate independent new database entries.

  5. 5

    Enforce nested sorting with multi-step formula/rollup logic: convert due dates to timestamps, fetch parent due timestamps via rollups, and sort using parent-resolved keys rather than raw due dates alone.

  6. 6

    To show subtasks inside project views, add a “parent project” rollup that inherits the parent task’s project so subtasks appear without a direct project relation.

  7. 7

    Limit nesting depth to one subtask level, since rollup-based inheritance becomes fragile for deeper sub-subtask structures.

Highlights

A self-referential relation plus a linked-database template can turn Notion tasks into a parent/child subtask system with automatic nesting.
Default subtasks can’t be reliably generated as independent database rows from a template; copying from a synced checklist is the practical workaround.
Correct subtask ordering requires parent-aware sorting using timestamp conversions and rollups, not just due-date sorting.
Project views can include subtasks by rolling up the parent task’s project value, even when subtasks have no direct project relation.
Rollup-based designs are best kept to a single subtask nesting level to avoid brittle behavior.

Topics

  • Notion Subtasks
  • Self-Referential Relations
  • Template Linked Databases
  • Formula Sorting
  • Rollups and Project Views

Mentioned