🆕 Calculation fields - Today property

If you ever needed today’s date inside a calculation field, you probably know the workaround.

You create some version of a “Today” record, update it every day with an automation, and connect it through relation fields to thousands of other records that need the current date.
It works, but it comes with a lot of traffic.
In traffic-heavy organizations, that one daily update could trigger thousands of recalculations across linked records and create a lot of record activity. Every. Single. Day.

We’re introducing Today as a built-in property in the new calculation field editor.
No daily automation spike. No relation chain. Much simpler to build with.

:sparkles: How it works

Use Today directly in any calculation field. Tape automatically walks through all records that use Today every night, a few seconds past midnight in your organization’s timezone, and recalculates them. No record write needed.

To support this, we are introducing a timezone setting at the organization level. The default is the timezone of the user who signed up first for your organization. You can change it anytime in Settings → General settings. Keep in mind that if many records use Today, changing the organization timezone can trigger many recalculations at once.

Today is available in the new calculation editor inside the new record experience. Press @ in the editor and look under Property, or just type Today directly.

Today vs. new Date():
new Date() captures the moment a calculation field is saved, then freezes. It only recalculates when a referenced field changes or the value of the calculation field is updated. Today refreshes automatically every night, whether or not anyone touches the record.

:brick: Significant traffic difference in real-world organizations

The traffic difference is significant, and it compounds.
Before Today, a single daily update could trigger relation-based calculations across all linked records.
In larger organizations, this could mean thousands of recalculations once a day, every day, triggered by one automation write.
The examples below show what that looked like in practice, and what Today replaces.

Subscription Tracker

The goal: automatically calculate the next due date based on a subscription’s status and billing cycle.

  • Setup before
    A subscription reminder required multiple automations just to keep dates in sync: one to maintain today’s date, one automation to calculate and write the next due date, and another to trigger the reminder. Every record change could restart the whole chain.

  • Setup with Today
    With Today, the same setup can be handled directly in calculation fields. The next due date and due status stay current automatically every day, without any automation.
    âž” Duplicate this setup from the video

Difference: 0 automations instead of 3. No daily “Today” record creation, no daily writes, no traffic spike, and no unnecessary record activity.

Birthday Reminder

The goal: when a contact’s birthday arrives, a comment appears on their record automatically:
“:tada: Matt Brewer’s 48th birthday :tada:”.

Difference: 1 automation instead of 5. No hidden next birthday date field to maintain, and no yearly write-back loop creating unnecessary record activity.

:rocket: Keep building

Here are some examples:

// Days until deadline
moment(Deadline).diff(moment(Today), 'days')
// Overdue flag
Today > Deadline ? "Overdue" : "On track"
// Age in years
moment(Today).diff(moment(Birthday), 'years')

For ready-to-use patterns with Today, see the community cheat sheet: Part 3: Dates, Markdown & recipes - Today property

Happy building.

3 Likes