Formulas
A formula field computes its value from other fields on the same row. Use one to join a full name, band a score, or pull a domain out of a website.
Add a formula field
- Open a table.
- Click + on the right edge of the grid header row and pick Formula.
- Name the field and write the expression in the sidebar. The preview shows the result on the first 12 rows of the view you're on before you save.
- Click Create field.
To change it later, open the field header menu and pick Edit formula.
Write an expression
Refer to a field by its name in braces. Start typing { and pick the field
from the list.
{First name} & " " & {Last name}
Field names are only how you write and read the formula. If you rename First name, the formula keeps working and shows the new name.
| Piece | Example | Notes |
|---|---|---|
| Field | {Company} | The field's value on this row |
| Text | "at" | In double quotes |
| Number | 100, 2.5 | |
| True or false | true, false | |
| Join text | {Job title} & " at " & {Company} | & joins the shown text of both sides. An empty field joins as nothing |
| Math | {Amount} * 1.2 | +, -, *, / |
| Compare | {Score} >= 80 | ==, !=, >, <, >=, <=. Dates compare with dates and with text like "2026-07-01" |
A blank field never counts as 0. {Amount} * 2 is blank when Amount is
empty, and a dashboard sum skips it.
Functions
Function names are not case sensitive. Optional arguments are marked with ?.
Logic
| Function | What it does |
|---|---|
IF(condition, then, else) | then when the condition is true, otherwise else |
AND(a, b, ...), OR(a, b, ...), NOT(a) | Combine conditions |
SWITCH(value, match, result, ..., default?) | The result for the first match |
ISBLANK(value) | True when the value is empty, including an empty multi-select. ISEMPTY and ISNULL do the same |
ISERROR(expression) | True when the expression cannot be computed |
BLANK() | An empty value |
COALESCE(value, fallback, ...) | The first value that is not empty |
FIRST_NONBLANK(step, step, ...) | The first step that is not blank (see Stacked formula) |
Text
| Function | What it does |
|---|---|
CONCAT(a, b, ...) | Joins values, like & |
LOWER(text), UPPER(text), TRIM(text) | Change case, remove outer spaces |
LEN(text) | Number of characters |
CONTAINS(text, search), STARTS_WITH(text, prefix) | True or false. On a multi-select, CONTAINS({Tags}, "vip") is true when one of the options is vip |
LEFT(text, count), RIGHT(text, count), MID(text, start, count) | Part of the text |
FIND(needle, text, start?), SEARCH(needle, text, start?) | Position of the needle. SEARCH ignores case |
SUBSTITUTE(text, old, new) | Replaces every old with new |
REGEX_MATCH(text, "pattern") | True when the pattern matches |
REGEX_EXTRACT(text, "pattern") | The first match |
REGEX_REPLACE(text, "pattern", replacement) | Replaces every match |
Numbers
| Function | What it does |
|---|---|
ROUND(number, digits?), ROUNDUP(...), ROUNDDOWN(...) | Round to a number of digits |
ABS, CEILING, FLOOR, INT, SQRT | Single-number math |
MIN, MAX, SUM, AVERAGE | Across several values on the row |
MOD(number, divisor), POWER(number, exponent), LOG(number, base?) | Remainder, power, logarithm |
Dates
Units are "year", "month", "week", "day", "hour", and "minute".
Dates are computed in UTC.
| Function | What it does |
|---|---|
TODAY(), NOW() | Today's date, or the current date and time |
DATEADD(date, count, "unit") | A date moved forward (or back, with a negative count) |
DATETIME_DIFF(later, earlier, "unit") | Whole units between two dates |
DATETIME_FORMAT(date, "us") | A date as text: "iso", "us", "european", or "friendly" |
YEAR(date), MONTH(date), DAY(date) | Part of a date |
IS_BEFORE(date, other), IS_AFTER(date, other) | True or false |
Clean up
Each returns a cleaned copy and leaves the original field as it is. A result with nothing left is blank.
| Function | What it does |
|---|---|
CLEAN_TEXT(text, remove_emoji?) | Trims, collapses spaces, and removes invisible characters. With true, removes emoji and symbols too |
COMPANY_NAME(text) | "Acme, Inc." becomes "Acme": no leading "The", legal suffixes, or trailing punctuation |
PERSON_NAME(text) | "dr. jane doe, MBA (she/her)" becomes "Jane Doe" |
FIRST_NAME(text), LAST_NAME(text) | The first or last name of PERSON_NAME |
DOMAIN(url_or_email) | "https://www.acme.co.uk/about" and "[email protected]" both become "acme.co.uk" |
LINKEDIN_URL(url) | One form for a profile or company link: https://www.linkedin.com/in/jane-doe |
IS_FREE_EMAIL(email), IS_ROLE_EMAIL(email) | True for a free mailbox like Gmail, or a shared inbox like info@ |
COUNTRY(text), US_STATE(text) | A two-letter code: "Deutschland" is "DE", "california" is "CA" |
TITLE_SENIORITY(title) | Founder, C-Level, VP, Head, Director, Manager, or IC |
TITLE_DEPARTMENT(title) | Sales, Marketing, Customer Success, Product, Design, Data, Engineering, IT, Finance, HR, Legal, Operations, or Executive |
JSON
JSON_LOOKUP({Payload}, "/company/name") reads one value out of a JSON field.
Formulas you can't filter or chart
Most formulas work everywhere a field does: in the grid, filters, sorts, and dashboards. A formula that uses any of these functions shows in the grid but can't be filtered or charted:
MOD, POWER, SQRT, LOG, ROUNDUP, ROUNDDOWN, SWITCH, BLANK,
ISERROR, JSON_LOOKUP, SUBSTITUTE, FIND, SEARCH, LEFT, RIGHT, MID,
REGEX_MATCH, REGEX_EXTRACT, REGEX_REPLACE, TODAY, NOW, DATEADD,
DATETIME_DIFF, DATETIME_FORMAT, YEAR, MONTH, DAY, IS_BEFORE,
IS_AFTER, CLEAN_TEXT, COMPANY_NAME, PERSON_NAME, FIRST_NAME,
LAST_NAME, DOMAIN, LINKEDIN_URL, IS_FREE_EMAIL, IS_ROLE_EMAIL,
COUNTRY, US_STATE, TITLE_SENIORITY, and TITLE_DEPARTMENT.
A filter or dashboard block on such a formula says it is not supported rather
than showing a wrong answer. To filter on the result anyway, change the formula
to use functions from the other rows of the tables above, for example CONTAINS
instead of REGEX_MATCH for a plain word.
Stacked formula
A Stacked formula tries a list of steps in order and keeps the first one that is not blank. Use it for a waterfall like "work email, else personal email, else the email found by enrichment".
- Click + on the grid header and pick Stacked formula.
- Add each step. A step is any expression, often just a field like
{Work email}. - Move steps up or down to set the priority. The top step wins when it has a value. Use Remove step to drop one.
- Click Create field.
A Stacked formula holds up to 8 steps. An empty cell or empty text counts as
blank, so the next step is tried. It is a formula like any other, written as
FIRST_NONBLANK({Work email}, {Personal email}, {Found email}).
Tips
- Use the preview to check a formula on real rows before you save.
- Keep long formulas readable by building them in steps across several formula fields.
- A formula field can't be edited cell by cell. Change the expression instead.