How to Build a Notion Habit Tracker Template From Scratch
Key takeaways
- Use two databases, one for habits and one for a daily log, so adding a habit is a new checkbox instead of a formula rewrite.
- A Notion formula cannot reference itself, so streaks need a Last Done date plus dateBetween() logic or a manually bumped number property.
- Rollups on a Weekly Log database calculate percent-checked completion rates automatically every time you tick a box.
- Use checkboxes for binary one-sitting habits and number properties compared against a target for measurable habits like pages read.
- Duplicate the tracker page with ‘Duplicate content only’ and archive log entries rather than deleting them to preserve streak history.
Build your own Notion habit tracker template in about an hour: one database for habits, a checkbox-streak formula, rollups for weekly completion rates, and a monthly dashboard you duplicate each month. This is a build-along with actual formula syntax, so you end up with a tracker shaped around your habits instead of someone else’s.
What database structure do you need before adding a single habit?
Two databases, not one table
Build two databases: Habits (one row per habit) and Daily Log (one row per day). The Daily Log holds the checkboxes you tap each day; the Habits database holds the streak formulas that read those checkboxes. One flat table forces you to add a new column for every habit and every formula, which is exactly the kind of upkeep that makes a tracker die in week two.
The properties each database needs
Daily Log: a Date property (one per day), plus one Checkbox per habit. Habits: a Name, a Relation to Daily Log, a Number property for current streak, and a Formula property where the streak logic will live. Every formula in later sections uses prop(), if(), and dateBetween(), all documented in Notion’s formula reference.
Why relations beat a single flat table for ADHD brains
A relation means adding a habit is one new checkbox, not a formula rewrite. If a tool change costs you five minutes instead of an evening, you actually make it. That matters: the freshness of a new system is real motivation fuel, and a structure you can tweak keeps that quick win available.
How do you write the checkbox-streak formula in Notion step by step?
The basic done/not-done formula
Start with the checkbox itself. A formula property reading if(prop("Done"), "✅", "⬜") gives you instant visual feedback per habit. That alone is enough for week one; add scoring once the habit survives.
Counting consecutive days with if() and date math
The honest version first: a Notion formula cannot reference itself, so no single formula can “remember” yesterday’s checkbox. The pattern that works is a date property plus math. Give each habit a Last Done date you update when you check it, then compute the streak with if(dateBetween(today(), prop("Last Done"), "days") == 0, prop("Streak"), if(dateBetween(today(), prop("Last Done"), "days") == 1, prop("Streak") + 1, 0)). Read it as three cases: you already logged today, so keep the streak; you logged yesterday, so the streak grows by one; otherwise it resets to zero. The catch is that Streak has to be a plain number property you bump manually, or you accept the monthly-duplicate approach later in this guide, where each new page starts fresh and the formula does the counting from real dates instead. Either way, the reset-to-zero branch is the part that makes a streak feel like a boss battle rather than a participation trophy.
Turning streaks into XP: a points formula you can copy
Score a completed habit as if(prop("Done"), 25 + min(prop("Streak"), 7) * 5, 0): 25 XP for showing up, 5 bonus XP per streak day, capped at a week so one lucky run can’t carry the month. It’s the same idea behind the XP loop we built into SideQuest, and capping the bonus is what keeps quick wins from outshining daily consistency.
How do rollups calculate weekly completion rates automatically?
Setting the relation between Habits and Daily Log
Create a second database called Weekly Log with one row per week. Add a relation property on Weekly Log pointing to your Daily Log database, then filter the relation to entries whose date falls inside that week. Notion’s official guide covers relation setup and filtering options in detail (Notion Help: relations and rollups). Once linked, each Weekly Log row can see every daily entry for that week.
Choosing the rollup: percent checked per week
On the Weekly Log row, add a rollup targeting the relation. Set it to “Percent checked” on your checkbox property, or “Percent per group checked” if you track multiple habits and want one percentage per habit. The math runs every time you tick a box, so there is zero manual counting.
Displaying the number so a quick win is visible at a glance
Format the rollup as a percentage and set the number style to a progress bar. A bar at 71% reads instantly as “almost there,” which is the dopamine hit you need to stay on task. If the rollup feels fiddly to configure on your own, send a question and we’ll walk through it.
Which habits work better as checkboxes versus numbered properties?
The decision rule: if a habit is done or not done in one sitting, use a checkbox. If progress comes in measurable chunks, use a number. A single property type per habit keeps your streak formula simple and your daily check-in fast, which matters when you’re opening this tired or distracted.
Checkbox habits: binary and dopamine-fast
Checkboxes give you a quick win with one tap. Water (a glass counts, done), medication, and a 10-minute tidy all work here. The XP hit lands instantly.
Number habits: when partial credit keeps momentum
Numbers reward partial effort, so a bad day still moves something. Pages read, minutes focused, and glasses of water tracked precisely all fit.
| Habit | Type | Example entry |
|---|---|---|
| Read | Number | 12 pages |
| Meds | Checkbox | ✓ |
| Deep work | Number | 45 minutes |
How the formula changes for numbered properties
Compare the number against a daily target property: prop("Pages") >= prop("Target") returns true, feeding the same streak logic. One honest caveat: targets add setup friction, so start with checkboxes and promote habits to numbers only when partial credit genuinely keeps you on task.
How do you add a monthly review dashboard without cluttering the tracker?
Linked views keep the daily page clean
Build the dashboard as a separate page and pull the habit database in three times as linked views. Your daily page stays a flat checkbox grid; the review lives elsewhere, so opening the tracker on a tired evening means seeing today’s quests only.
The three views worth building: streaks, weekly rate, misses
View one sorts by your streak formula so your longest-running habits sit on top. View two filters to this week and shows the rollup completion rate, giving you a quick win when the number beats last week’s. View three shows only misses, which is where honest review happens. Task paralysis often kicks in when a review page looks like homework, so keep each view to one question (ADHD task paralysis types and fixes).
A boss-battle style monthly goal row
Add one row to the database named after your monthly boss battle, like “Ship the side project demo.” It uses the same checkboxes, so progress rolls up automatically. If you later copy the page for a new month, Notion’s own docs cover duplicating pages and databases.
How do you duplicate the tracker for a new month without losing history?
Duplicate the page, not the databases
Right-click your tracker page and choose Duplicate, then select “Duplicate content only” when Notion asks. This copies the page layout and views but leaves the original databases intact, so you are not spawning five copies of the same habit definitions every month.
What to archive and what to keep
Keep one master Habits database and one master Log database. At month end, select all of that month’s log entries and move them into an Archive database (drag them in, or use a template button that filters by month). Your habit definitions, XP rules, and formula columns stay put. The new month’s page just gets fresh filtered views pointing at the same masters.
Keeping streak history intact across months
Because streak formulas read the Log database, archiving rather than deleting preserves the full chain. If a streak formula breaks, check that the archive view isn’t excluded from the formula’s data source. One honest caveat: rollups that filter by “this month” need the new page’s date property updated, or your weekly completion rates will read zero until you fix it.
When is a DIY tracker better than downloading a template?
Build it when your habits are unusual or you tweak constantly
If your habits don’t fit neat daily checkboxes—say, three gym sessions a week or a variable writing target—a template built for “drink water, meditate, read” fights you. Building the database yourself means the streak formula, rollups, and review dashboard match how you actually plan it. And for ADHD readers, tweaking the system is often the dopamine hit that keeps you opening it.
Where the DIY tracker honestly falls short: no notifications, no mobile-first loop
Notion won’t nag you. There’s no reminder at 9pm when you haven’t checked off your quests, and opening a database on a phone mid-commute is clunkier than tapping a native app. If you need external prompts to stay on task—something ADDitude recommends structuring deliberately for ADHD brains (external structure strategies)—a tracker you have to remember to open will lose to one that opens itself.
When a dedicated gamified app beats a spreadsheet in disguise
Habitica and SideQuest handle the XP, streaks, and boss battle loops natively, with push notifications doing the prompting for you. If you’ve abandoned three tools in 30 days, install the app. If you’d rather level up inside a system you built, keep building.
How do you keep the tracker alive past week two?
Reduce opening friction: widgets and pinned views
If opening Notion takes more than two taps, the tracker dies. Put your daily habit view in a pinned tab on mobile, or add a Notion widget to your home screen showing today’s checkboxes. The rule from earlier sections applies: if you’re tired or distracted, you still have to be able to tick a box in under five seconds.
The 30-day rule applied to your own template
You already delete any app you haven’t used in 30 days. Apply the same test to your own build. If a habit property went untouched for a month, delete it rather than letting it pile guilt onto the dashboard. A tracker with six habits you actually tick beats twenty you ignore.
Pairing Notion with SideQuest for the dopamine loop
Notion is structure, not dopamine. For the XP-and-level-up loop that keeps you opening anything at all, pair it with SideQuest: Task RPG: log a real-world win in the app, earn XP, and treat your Notion dashboard as the monthly review layer. XP and momentum live in the game; history lives in Notion. One honest caveat: two systems is two places to forget, so if week two stalls, cut SideQuest first and keep the tracker.
FAQ
What’s the fastest Notion habit tracker setup for someone who keeps quitting?
Skip streaks and rollups entirely for week one. Create a single Daily Log database with a date property and one checkbox per habit, plus the basic if(prop("Done"), "✅", "⬜") formula for visual feedback. Add the streak formula and weekly rollup only after the habit survives two weeks. One checkbox habit you actually tick beats a full system you abandon.
Can a Notion formula count a streak automatically?
Not fully. A Notion formula cannot reference itself, so no single formula can remember yesterday’s checkbox. The workarounds are a manually bumped Streak number property paired with a Last Done date and dateBetween() logic, or the monthly-duplicate approach, where each fresh page lets the formula count from real dates instead of its own history.
How do I reset the tracker for a new month without losing history?
Duplicate the tracker page and choose ‘Duplicate content only,’ which copies the layout but leaves your master databases intact. Archive that month’s log entries rather than deleting them, since streak formulas read the Log database and deletion breaks the chain. Update any date filters on the new page, or your weekly completion rates will read zero.
Do all my habits need to be checkboxes?
No. Use a checkbox when a habit is done or not done in one sitting, like medication or a 10-minute tidy. Use a number property when progress comes in measurable chunks, like pages read or minutes of deep work, and compare it against a target property feeding the same streak logic. Start with checkboxes and promote habits later.
Is building my own tracker worth it over downloading a template?
Yes, if your habits are unusual or you tweak constantly: three gym sessions a week or a variable writing target fights a template built for drink-water-meditate-read. A DIY build also gives you the dopamine of adjusting the system. If you need push notifications or have abandoned three tools in 30 days, a dedicated gamified app is the better call.