How to Build Notion Formula for Time Tracking With Pause Support
🔍 WiseChecker

How to Build Notion Formula for Time Tracking With Pause Support

You want to track how long you spend on a task inside Notion but need the ability to pause the timer when you take a break. Notion does not have a built-in stopwatch feature, but you can build a time-tracking system using formulas, rollups, and a manual pause mechanism. This article explains how to create a database that logs start and pause times and calculates the total elapsed time minus pauses. You will set up a formula that respects pause intervals and produces accurate duration values.

By the end, you can track work sessions across multiple days, pause and resume without losing data, and view total time in hours and minutes.

Key Takeaways: Building a Notion Timer With Pause Logic

  • Database schema with Start Time, Pause Start, Pause End, and Resume Time: Four date properties that let you record each session segment manually.
  • Formula property with nested if statements: Calculates total seconds by subtracting pause blocks from the main time block.
  • Formatting the output with round and floor: Converts raw seconds into a readable “Xh Ym” string.

ADVERTISEMENT

How the Pause-Aware Time Tracking Feature Works

Notion formulas operate on property values within a single database row. To support pauses, you must store multiple timestamps in separate date properties: a start time, one or more pause start times, and one or more pause end times. The formula then subtracts the total pause duration from the total elapsed time between start and the current moment or an end time.

This method requires you to manually update the pause properties when you stop and restart work. It does not use a real-time stopwatch. Instead, the formula recalculates the duration whenever any property changes, giving you an up-to-date total each time you edit the row.

Prerequisites

You need a Notion workspace with database access. The formula uses the dateBetween, if, empty, now, round, and floor functions. No integrations or third-party tools are required.

Steps to Build the Time Tracking Database With Pause Support

  1. Create a new database
    Open Notion and create a new database. Use the Table layout for clarity. Name the database Time Tracker.
  2. Add the required date properties
    Add these four date properties:
    Start Time (Date type) — when the session began.
    Pause Start (Date type) — when you paused work.
    Pause End (Date type) — when you resumed work.
    End Time (Date type) — when the session ended. Leave empty if the session is still running.
  3. Create the formula property
    Add a new property, set the type to Formula, and name it Total Duration. Paste the following formula into the editor:
    let(
    start, prop("Start Time"),
    pauseStart, prop("Pause Start"),
    pauseEnd, prop("Pause End"),
    end, prop("End Time"),
    nowOrEnd, if(empty(end), now(), end),
    totalSeconds, dateBetween(nowOrEnd, start, "seconds"),
    pauseSeconds, if(and(empty(pauseStart), empty(pauseEnd)), 0, dateBetween(pauseEnd, pauseStart, "seconds")),
    netSeconds, totalSeconds - pauseSeconds,
    hours, floor(netSeconds / 3600),
    minutes, round((netSeconds % 3600) / 60),
    format("" + hours + "h " + minutes + "m")
    )

    This formula calculates the total seconds between start and end (or now if end is empty), subtracts the pause duration, and formats the result as hours and minutes.
  4. Test the formula with sample data
    Create a new row. Set Start Time to 9:00 AM, Pause Start to 10:00 AM, Pause End to 10:15 AM, and End Time to 12:00 PM. The formula should display 2h 45m (3 hours total minus 15 minutes pause).
  5. Add a Resume Time property for multiple pauses (optional)
    If you need more than one pause, add a second set of pause properties: Pause Start 2 and Pause End 2. Update the formula to subtract both pause blocks. Example addition inside the formula:
    pauseSeconds2, if(and(empty(prop("Pause Start 2")), empty(prop("Pause End 2"))), 0, dateBetween(prop("Pause End 2"), prop("Pause Start 2"), "seconds")),
    netSeconds, totalSeconds - pauseSeconds - pauseSeconds2,
  6. Use the database for live tracking
    When you start a task, fill in Start Time. When you pause, fill in Pause Start. When you resume, fill in Pause End. When the session ends, fill in End Time. The formula updates automatically.

ADVERTISEMENT

Common Mistakes and Limitations to Avoid

Formula returns “NaN” or empty

This happens when Start Time is empty. The formula requires a start value to calculate dateBetween. Always fill in Start Time first.

Pause duration is negative

If Pause End is earlier than Pause Start, the formula subtracts a negative number and adds time instead of removing it. Ensure you enter pause end after pause start.

Only one pause supported in the basic formula

The formula as written handles a single pause block. For multiple pauses, you must extend the formula with additional pause property pairs as shown in step 5. Notion formulas cannot loop, so you must manually add each pair.

Time zone issues

Notion dates are stored in UTC but display in your local time zone. The formula uses the underlying UTC values, so the calculated duration is correct regardless of your time zone. However, if you enter a date without a time, Notion defaults to midnight UTC, which may produce unexpected results. Always include the time when filling date properties.

Notion Date Properties Used in Time Tracking: Input vs Formula Behavior

Property User Input Required How the Formula Uses It
Start Time Yes — set once at session start Base anchor for the dateBetween calculation
Pause Start Yes — set when pausing Start of the pause block; if empty, pause seconds are zero
Pause End Yes — set when resuming End of the pause block; must be later than Pause Start
End Time Optional — leave empty for live tracking If empty, the formula uses now(); if set, it uses that fixed time

Each property is a standard Notion date field. The formula does not require special formatting.

Why This Method Works Without Real-Time Updates

Notion formulas only recalculate when a property in the row changes. The now() function updates only when you edit the row or when the formula editor is saved. This means the displayed duration is not a live ticking timer. To see the current duration, you must make any edit to the row — for example, adding a space to a text property. This limitation is inherent to Notion’s formula engine. For true real-time tracking, a dedicated time-tracking app integrated via Notion API would be needed.

Despite this limitation, the method provides accurate elapsed time for reporting and billing. You can create a template row with pre-filled properties and duplicate it for each new task.

ADVERTISEMENT