HomeGoogle DocsSpreadsheetCreate a Habit Tracker in Google Sheets: Step-by-Step Guide

Create a Habit Tracker in Google Sheets: Step-by-Step Guide

In this tutorial, I’ll show you exactly how to create a habit tracker in Google Sheets and share a free template you can copy and start using today. One of the key features of this template is that it uses array formulas for automation and simplicity.

With Google Sheets, you can easily build a monthly habit tracker that is both functional and motivating. In this guide, you’ll learn how to:

  • Format your sheet
  • Apply the necessary formulas
  • Set up conditional formatting rules that make the tracker visually appealing

Why Track Your Habits?

There are many benefits to using a habit tracker:

  • It helps you stay committed to your goals.
  • It highlights areas where you can improve.
  • It keeps you motivated with visible progress.
Habit Tracker Template Layout in Google Sheets

How to Create a Habit Tracker That You’ll Actually Use in Google Sheets

Creating a habit tracker in Google Sheets is straightforward, but to make it engaging enough to use regularly, we’ll add a few fun and functional features:

  • Smiley icon for goal completion – See a smiley when you hit your targets.
  • Score highlighting – Instantly spot when you reach your goals.
  • Drop-down month selector – Select the current month, and the tracker automatically adjusts.
  • Today’s column highlighting – Quickly find the current day.
  • Tick boxes for habits – Mark tasks as complete in one click.
  • Highlight rules – Hide unused checkboxes for a clean look.

We won’t use sparklines for progress bars because they can make the tracker feel too formal.

Let’s get started.

Step 1: Basic Setup – Naming the File, Creating a Drop-Down, and Adding Habits

  1. Open a new spreadsheet at https://sheets.new.
  2. Rename it: Go to File > Rename (Windows shortcut: Alt + F + R, Mac shortcut: Ctrl + Option + F + R) and name it habit tracker.
  3. Create a month selector drop-down in cell B1:
    • Select cell B1 → Insert > Drop-down.
    • Replace “Option 1” with “January” and “Option 2” with “February.”
    • Add all month names. Optionally, set colors for each month.
    • Click Done.

Habit entry area:

  • My template tracks up to 15 habits per day.
  • Title cell B2 as Habits.
  • Enter your habits in B3:B17. Example:
Wake up at 7 am
Treadmill for 45 minutes
Drink 15 ounces of water
Read 20 pages
Swim in the pool
Do yoga
Sleep at 10 pm
Sample Habits with Month Drop-down

Step 2: Add Checkboxes to Track Your Progress

First, make sure your sheet has enough columns — you’ll need columns for 31 days plus 2 additional columns at the end for formulas and progress calculations.

Then, select the range C3:AG17 (covering all possible days) and go to Insert > Tick box.

These checkboxes will later be masked in unused rows and columns using conditional formatting rules, keeping the tracker clean and relevant to your selected month and available habits.

Habit Tracker with Checkboxes Added

Step 3: Formulas for Your Habit Tracker

We’ll use 8 array formulas in total to make the habit tracker fully automated.

1. Sequence Numbers (A3) – Auto Number Your Habits

=SEQUENCE(COUNTA(B3:B17))

Generates numbers for each habit entered in column B.

2. Sequence Dates (C2) – Automatically Generate Month Dates

=SEQUENCE(1, DAY(EOMONTH(DATE(YEAR(TODAY()), MONTH(B1&1), 1), 0)))

This formula automatically adjusts to the number of days in the month selected in cell B1.

Explanation:

  • DATE(YEAR(TODAY()), MONTH(B1&1), 1) → Returns the first day of the selected month in the current year.
  • EOMONTH(..., 0) → Returns the last day of that month.
  • DAY(...) → Extracts the day number from the end date, which equals the total number of days in the month.

3. Days of the Week (Optional, C1) – Show Weekday Headers

=ArrayFormula(LET(
   sdt, DATE(YEAR(TODAY()), MONTH(B1&1), 1), 
   dts, SEQUENCE(1, DAY(EOMONTH(sdt, 0)), sdt), 
   TEXT(dts, "ddd")
))

This formula displays short day names (e.g., Mon, Tue, Wed) above the corresponding date numbers.

Sequence Numbers, Dates, and Weekday Headers (Formula Output)

Explanation:

  • DATE(YEAR(TODAY()), MONTH(B1&1), 1) → Returns the first day of the selected month in the current year.
  • LET(sdt, ...) → Assigns that first day to the variable sdt for reuse.
  • DAY(EOMONTH(sdt, 0)) → Finds the total number of days in the selected month.
  • SEQUENCE(1, total_days, sdt) → Generates a horizontal sequence of dates starting from sdt for the entire month.
  • TEXT(dts, "ddd") → Converts each date in the sequence into its 3-letter weekday abbreviation.
  • ARRAYFORMULA(...) → Applies the formula across the entire sequence automatically.

4. Monthly Progress % per Habit (AH3) – Track Habit Completion

=BYROW(FILTER(FILTER(C3:AG17, B3:B17<>""), C2:AG2>0), LAMBDA(row, COUNTIF(row, TRUE)/COUNTA(row)))

This formula calculates the monthly completion percentage for each habit.

Explanation:

  • FILTER(C3:AG17, B3:B17<>"") → Removes unused habit rows (where column B is blank).
  • Outer FILTER(..., C2:AG2>0) → Removes unused day columns (where the date row is empty or zero).
  • BYROW(..., LAMBDA(row, ...)) → Processes the filtered data one row (habit) at a time.
  • COUNTIF(row, TRUE) → Counts the number of days the habit was completed (checked boxes).
  • COUNTA(row) → Counts the total number of days tracked for that habit (checked and unchecked boxes).
  • COUNTIF / COUNTA → Calculates the completion percentage for that habit.

Note:

After entering this formula, format the result as a percentage:

  1. Select AH3:AH17.
  2. Go to Format > Number > Percent.

5. Daily Progress % for All Habits (C18) – See Daily Completion Rates

=BYCOL(FILTER(FILTER(C3:AG17, B3:B17<>""), C2:AG2>0), LAMBDA(col, COUNTIF(col, TRUE)/COUNTA(col)))

Calculates daily progress across all habits. Follow the same explanation as in Formula 4, except this one works by columns instead of rows.

Note:

Format the result as a percentage:

  1. Select C18:AG18.
  2. Go to Format > Number > Percent.

6. Total Monthly Progress % (AH18) – Your Overall Monthly Score

=LET(ftr, FILTER(FILTER(C3:AG17, B3:B17<>""), C2:AG2>0), COUNTIF(ftr, TRUE)/COUNTA(ftr))

Shows your final score for the month.

Explanation:

This formula uses the same nested FILTER logic as in previous formulas to remove unused rows and columns. The filtered range is stored in the variable ftr using LET.

  • COUNTIF(ftr, TRUE) counts all completed habits in the month.
  • COUNTA(ftr) counts all habits tracked in the month (completed or not).
  • Since it does not use BYROW or BYCOL, the calculation is done on the entire range as a whole rather than grouping by rows or columns.

Note:

Format the result as a percentage:

  1. Select AH18.
  2. Go to Format > Number > Percent.

7. Smiley Icons for Goals (AI3) – Celebrate Habit Achievements

=ARRAYFORMULA(IF(AH3:AH17>=80%, "🥰",))

Adds smileys for habits with ≥80% completion.

8. Smiley Icons for Daily Goals (C19) – Track Daily Wins with Icons

=ARRAYFORMULA(IF(C18:AG18>=80%, "🥰",))
Daily Progress (Vertical) for All Habits, Monthly Progress (Horizontal) for Each Habit, and Smiley Icons

Step 4: Conditional Formatting Rules

We’ll use these rules to hide unused checkboxes, highlight progress, and show today’s column.

Mask unused habit rows — Range: C3:AG17

=$B3=""

Set the text color to match the background color and fill color to none so unused checkboxes appear hidden.

Mask unused days in short months — Range: AE3:AG17

=AE$2=""

Set the text color to match the background color and fill color to none.

Highlight high-score rows — Range: C3:AG17

=AND(C$2<>"", $AH3>=80%)

Use a distinct fill color for this rule.

Highlight high-score columns — Range: C3:AG17

=AND($B3<>"", C$18>75%)

Use a different fill color from the one above.

Highlight today’s column — Range: C3:AG17

=AND(MONTH($B$1&1)=MONTH(TODAY()), C$2=DAY(TODAY()))

Use a third distinct fill color so it’s visually clear from the other two highlights.

Note: If a cell meets multiple conditions, the color from the rule that appears higher in the Conditional formatting rules list will take priority. You can drag rules up or down to adjust the priority.

Highlight Rules for Masking Checkboxes

How to apply any of these conditional formatting rules:

  1. Select the target range.
  2. Go to Format > Conditional formatting.
  3. In the Format rules panel, choose Custom formula is.
  4. Enter the formula shown above for that rule.
  5. Set your preferred fill color or text color.
  6. Click Done.

Step 5: Using the Habit Tracker Template

Once you’ve finished setting it up:

  • Select the current month in B1.
  • Enter your own habits in B3:B17.
  • Clear checkboxes for a fresh start.
  • Track daily by ticking boxes.
  • Duplicate the sheet each month to keep a history.

Habit Tracker Template

If you’re looking for more tools to track habits, focus, and consistency, check out:

Explore more Google Sheets templates in our complete collection.

Prashanth K V
Prashanth K V
Your Trusted Google Sheets and Excel Expert Prashanth K V is a Diamond Product Expert in Google Sheets, officially recognized by Google for his contributions to the Docs Editors Help Community and featured in the Google Product Experts Directory. Explore his blog to learn advanced formulas, automation tips, and problem-solving techniques to elevate your spreadsheet skills.

Top Discussions

More like this

Sheetogram: Free Nonogram Game for Google Sheets (10×10 Puzzle Template)

Recently, I built Sheetogram, a Nonogram game for Google Sheets, as a passion project....

How to Generate Unique 10×10 Nonogram Puzzles in Google Sheets

Creating nonogram puzzles in Google Sheets is surprisingly easy. All you need is a...

How to Build a Dynamic Nonogram Clue Generator in Google Sheets

Over the past few months, I've built a couple of games in Google Sheets,...

2 COMMENTS

  1. Hi, this sheet is awesome! I understand its capabilities for tracking progress monthly, but I wanted to see if there was a way to track progress annually. This would involve compiling all the progress within each monthly tab and essentially creating a dashboard to showcase your annual progress. Is there a way to do this?

    • You can right-click on the tab name and duplicate it. This way, you can create a habit tracker for each month.

      For the dashboard, we may need to use complex functions to combine data and aggregations, which could make the template more intricate to use.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.