Skip to content

Formula fields

Formula fields compute a value from other fields in the same record. They're read-only — Stackify recalculates the value automatically whenever a field the formula depends on changes.

Create a formula field

  1. Click the + button at the right end of the column header row (or edit an existing field from the Edit card panel).
  2. Choose the Formula field type.
  3. Enter an expression, e.g. [Unit price] * [Quantity].
  4. The editor validates your formula as you type and shows a live preview using values from an existing record.
  5. Click Save field.

Browse functions and fields while typing

Click ƒ Browse above the formula box to open a panel with two tabs, Functions and Fields. It highlights the functions and fields most likely to be relevant based on what you've already typed — for example, referencing a date field surfaces the date functions first.

Referencing fields

Wrap a field name in square brackets to reference it: [Field Name]. Field names are matched exactly, including case and spacing. Formula fields can also reference other formula fields, as long as there's no circular reference (A depending on B depending on A).

Function reference

Every function available in the formula editor is listed below, grouped the same way as the ƒ Browse panel, with an example for each.

Logic

IF(condition, if_true, if_false) — returns one of two values depending on a condition. Both branches must be the same type.

IF([Quantity] > 100, "Bulk", "Standard")
→ "Bulk"        (when Quantity is 150)

IFERROR(expr, fallback) — returns fallback if expr produces a runtime error, such as dividing by zero.

IFERROR([Total] / [Quantity], 0)
→ 0             (when Quantity is 0, instead of an error)

ISBLANK(value) — true when the field is empty.

IF(ISBLANK([Due Date]), "No due date", "Scheduled")
→ "No due date" (when Due Date is empty)

AND(a, b) / OR(a, b) — same as && / ||.

AND([In Stock], [Price] > 0)
→ true          (when both conditions hold)

Math

ROUND(number, decimals) — round to N decimal places.

ROUND([Price] * 1.25, 2)
→ 12.50         (when Price is 10)

ABS(number) — absolute value.

ABS([Balance])
→ 42            (when Balance is -42)

SQRT(number) — square root.

SQRT([Area])
→ 4             (when Area is 16)

CEILING(number) — round up to the nearest integer.

CEILING([Weight])
→ 6             (when Weight is 5.2)

FLOOR(number) — round down to the nearest integer.

FLOOR([Weight])
→ 5             (when Weight is 5.9)

MOD(number, divisor) — remainder after division.

MOD([Order Number], 2)
→ 1             (when Order Number is 2025, i.e. an odd number)

MIN(a, b) / MAX(a, b) — smaller/larger of two numbers (two-argument only).

MAX([Retail Price], [Cost] * 1.1)
→ 24.20         (when Retail Price is 19.99 and Cost is 22)

NUMBER(value) — coerce text to a number.

NUMBER([SKU Suffix])
→ 42            (when SKU Suffix is the text "42")

Text

CONCAT(a, b, ...) — join values together, coercing each argument to text. The & operator does the same thing.

CONCAT([First Name], " ", [Last Name])
[First Name] & " " & [Last Name]
→ "Ada Lovelace"

UPPER(text) / LOWER(text) — change case.

UPPER([Country Code])
→ "SE"          (when Country Code is "se")

TRIM(text) — remove leading and trailing spaces.

TRIM([Imported Name])
→ "Acme AB"     (when Imported Name is "  Acme AB  ")

LEFT(text, n) / RIGHT(text, n) — first/last N characters.

LEFT([Postal Code], 3)
→ "112"         (when Postal Code is "11253")

LEN(text) — number of characters.

LEN([Description])
→ 128

TEXT(value) — convert a number, boolean, or date to text.

CONCAT("Order #", TEXT([Order Number]))
→ "Order #2025"

Date

TODAY() — today's date (UTC). Recalculates daily; fields that use it are marked with a "result may change daily" indicator.

DATEDIFF([Due Date], TODAY(), "day")
→ 5             (when Due Date is 5 days from now)

NOW() — current date and time (UTC). Also marked as recalculating.

DATEDIFF(start, end, unit) — difference between two dates. unit is "day", "month", or "year".

DATEDIFF([Start Date], [End Date], "day")
→ 14

DATEPARSE(text, format) — parse a text field as a date.

DATEPARSE([Imported Date], "%Y-%m-%d")
→ 2026-03-01    (when Imported Date is the text "2026-03-01")

YEAR(date) / MONTH(date) / DAY(date) — extract date parts.

YEAR([Order Date])
→ 2026

ADDDAYS(date, n) / ADDMONTHS(date, n) / ADDYEARS(date, n) — add (or subtract, with a negative n) a number of days, months, or years. ADDMONTHS clamps to the end of the month when needed.

ADDDAYS([Order Date], 14)
→ 2026-03-15    (when Order Date is 2026-03-01)

MAKEDATE(year, month, day) — construct a date from three numbers.

MAKEDATE([Year], 1, 1)
→ 2026-01-01    (when Year is 2026)

DATEFORMAT(date, format) — format a date as text. See format tokens below.

DATEFORMAT([Order Date], "DD/MM/YYYY")
→ "07/05/2026"

WEEKDAY(date) — ISO weekday: 1 = Monday … 7 = Sunday.

IF(WEEKDAY([Delivery Date]) >= 6, "Weekend", "Weekday")
→ "Weekend"

WEEKNUM(date) — ISO week number (1–53).

WEEKNUM([Order Date])
→ 19

QUARTER(date) — quarter of the year, 1–4.

QUARTER([Order Date])
→ 2             (when Order Date is in May)

DATEFORMAT tokens

Token Meaning Example
YYYY 4-digit year 2026
YY 2-digit year 26
MM Zero-padded month 05
M Month, no padding 5
MMM Short month name May
MMMM Full month name May
DD Zero-padded day 07
D Day, no padding 7
WW ISO week number 21
Q Quarter 2

Unknown tokens are passed through literally.

Geo

Geo functions only appear in the ƒ Browse panel when the card has at least one Map point field.

LAT(map_point) / LNG(map_point) — latitude/longitude of a map point in decimal degrees.

LAT([Store Location])
→ 59.33

DISTANCE(point_a, point_b) — distance in kilometres between two map points (Haversine formula), rounded to 3 decimal places.

DISTANCE([Store Location], [Warehouse Location])
→ 12.4

MAKEPOINT(lat, lng) — construct a map point from latitude and longitude numbers, for comparing against a fixed coordinate instead of another field.

DISTANCE([Store Location], MAKEPOINT(59.33, 18.07))
→ 3.2           (distance from the store to central Stockholm)

Error handling

If a formula hits a runtime error (for example, dividing by zero), the cell shows as empty rather than breaking the record. Wrap the expression in IFERROR(...) to control what's shown instead:

IFERROR([Total] / [Quantity], "N/A")

Limitations

  • Formula fields are read-only — you can't type a value directly into a formula cell, and they're excluded from import mappings.
  • Formula fields are excluded when saving a card as a template — the template captures the field definitions of regular fields only.
  • Formula fields can reference other formula fields, but not themselves or each other in a cycle. Stackify shows a "circular reference" error if you try.