Skip to main content

Overview

Computed fields (also called formula fields) let you automatically calculate and display values based on other fields in the same record. Instead of manually updating a field every time related data changes, Reevo computes the result for you - keeping your CRM data accurate and consistent without extra work. Computed fields are useful for scoring records, formatting display values, flagging conditions, calculating date differences, and categorizing data based on field combinations. Any logic you’d otherwise track in a spreadsheet can usually be expressed as a computed field. Reevo evaluates computed fields when a record is created or updated. The formula references fields on the same record using a simple {{domain.field_name}} syntax, and the result is stored as a standard field value you can filter, sort, and report on.

Step-by-Step Instructions

Note: Only administrators can create and manage computed fields.

Creating a Computed Field

  1. Navigate to Settings > [Object] > Add field
Navigate to Add field and select Create computed field
  1. Click Add Computed Field
Computed field creation modal with formula editor
  1. Enter a Display Name for the field
  2. Write your formula in the Formula Editor
    • Use {{domain.field_name}} syntax to reference fields - e.g. {{contact.title}}
    • The editor provides autocomplete as you type field names
    • Use the Preview panel to test the formula against live record values
  3. Click Create
Important notes:
  • Formulas are single-record only - they can only reference fields on the same record, not related records
  • The updated_at field is intentionally excluded from all domains to prevent circular recalculation triggers
  • {{pipeline.*}} syntax still works for backward compatibility, but use {{opportunity.*}} going forward - this is what autocomplete will suggest

Editing or Deleting a Computed Field

  1. Navigate to Settings > [Object] > Computed Fields
  2. Click the ellipsis (…) next to the field
  3. Select Edit to update the name, output type, or formula expression
  4. Select Delete to remove the field - this removes it from all records and cannot be undone

Formula Reference

Variable Syntax & Domains

Every formula references fields using a two-part variable: the domain (which object type you’re pulling from) and the field name (the specific field on that object). This scoped syntax ensures Reevo knows exactly which record and field to evaluate at compute time. Use double-brace syntax: {{domain.field_name}} Components:
  1. domain - The entity type: contact, account, or opportunity
  2. field_name - The specific field name in snake_case
Contact fields
  • {{contact.first_name}}
  • {{contact.last_name}}
  • {{contact.title}}
  • {{contact.department}}
  • {{contact.primary_phone_number}}
  • {{contact.linkedin_url}}
Account fields
  • {{account.display_name}}
  • {{account.estimated_annual_revenue}}
  • {{account.estimated_employee_count}}
  • {{account.official_website}}
  • {{account.description}}
  • {{account.status}}
Opportunity fields
  • {{opportunity.amount}}
  • {{opportunity.status}}
  • {{opportunity.anticipated_closing_at}}
  • {{opportunity.next_step_details}}

Supported Input Field Types

Not every field type in Reevo can be used inside a formula. The table below shows which field types are supported and what data type they become once referenced in an expression. For example, a phone number field is treated as plain text in the formula engine - you can concatenate or extract from it, but not do math on it.
Field TypeMaps to in Formula
Text, Text Area, Long TextTEXT
Email, Phone, URLTEXT
Numeric, Currency, PercentNUMBER
Boolean CheckboxBOOLEAN
TimestampDATETIME
Local DateDATE
Local Time, Time of DayTIME
Single SelectTEXT (the selected value)
UUIDTEXT
Cannot reference: Multi-select, List, Dict, Nested Object, Geo Location, Rich Text Area

Data Types & Operators

Each data type supports a specific set of operators. Using the wrong operator for a type is the most common cause of formula errors - for example, using + to join two text strings will fail because + is reserved for numeric addition. Use & or CONCAT() for text.
TypeOperatorsNotes
TEXT& = !=Use & or CONCAT() for string joining - + will error
NUMBER+ - * / = != > < >= <=Stored as Decimal for exact precision
BOOLEAN= != AND OR NOTUse AND(), OR(), NOT() functions for logic
DATE+ - = != > <Date + Number adds days; Date - Date returns days
DATETIME+ - = != > <DateTime - DateTime returns a duration value
Output limits:
  • Text: 255 characters max
  • Numbers: up to 18 digits precision

Function Reference

Functions are the building blocks of formulas. They take inputs, apply logic, and return a result. Reevo organizes functions into four categories based on what kind of data they work with.

Logical

Logical functions control the flow of your formula - returning different values depending on whether conditions are met. Use IF for simple true/false branching, CASE when you have multiple possible values to match against, and ISBLANK/BLANKVALUE to handle records where a field hasn’t been filled in yet.
FunctionSyntaxDescription
IFIF(condition, value_if_true, value_if_false)Returns one of two values based on a condition
ANDAND(logical1, logical2, ...)TRUE only if all conditions are TRUE
OROR(logical1, logical2, ...)TRUE if at least one condition is TRUE
NOTNOT(logical)Reverses a logical value
CASECASE(value, case1, result1, ..., default)Matches a value against multiple cases
ISBLANKISBLANK(value)TRUE if value is empty or null
BLANKVALUEBLANKVALUE(value, default)Returns default if value is blank

Math

Math functions operate on NUMBER values. They’re most useful for scoring (rounding a weighted score), financial calculations (commission tiers), and threshold checks (flagging deals above a certain size). Note that SUM and AVG are available but only accept literal values - they don’t aggregate across related records. Use Rollup Fields for that.
FunctionSyntaxDescription
ROUNDROUND(number, num_digits)Rounds to specified decimal places
ABSABS(number)Absolute value
MAXMAX(number1, number2, ...)Largest value
MINMIN(number1, number2, ...)Smallest value
MODMOD(number, divisor)Remainder of division
CEILINGCEILING(number)Rounds up to nearest integer
FLOORFLOOR(number)Rounds down to nearest integer

Text

Text functions let you build, inspect, and transform string values. They’re commonly used to construct display names, classify records based on keywords in a field (using CONTAINS), or extract a clean domain from a messy URL. All text comparisons are case-sensitive.
FunctionSyntaxDescription
CONCATCONCAT(text1, text2, ...)Joins text strings
CONTAINSCONTAINS(text, substring)TRUE if text includes substring (case-sensitive)
BEGINSBEGINS(text, prefix)TRUE if text starts with prefix (case-sensitive)
FINDFIND(search_text, within_text)Position of substring
LEFTLEFT(text, num_chars)Leftmost characters
RIGHTRIGHT(text, num_chars)Rightmost characters
MIDMID(text, start, num_chars)Characters from middle of string
LENLEN(text)Length of string
TRIMTRIM(text)Removes leading/trailing spaces
SUBSTITUTESUBSTITUTE(text, old, new)Replaces a substring
PROPERPROPER(text)Converts to title case
VALUEVALUE(text)Converts text to number
HYPERLINKHYPERLINK(url, label)Creates a clickable link
TEXTTEXT(value, format)Formats a value as text - formats: “currency”, “date”, “datetime”, “number”
DOMAINDOMAIN(url)Extracts domain from a URL - e.g. DOMAIN({{account.official_website}}) returns “reevo.ai”

Date

Date functions let you work with time-based fields - calculating how many days until a close date, labeling deals by fiscal quarter, or flagging records that are overdue. TODAY() and NOW() are dynamic and evaluated at computation time, so formulas using them stay current as long as records are periodically re-saved or backfilled.
FunctionSyntaxDescription
TODAYTODAY()Current date
NOWNOW()Current date and time
DATEDATE(year, month, day)Build a date from parts
YEARYEAR(date)Year component
MONTHMONTH(date)Month (1-12)
DAYDAY(date)Day of month
QUARTERQUARTER(date)Quarter (1-4)
WEEKDAYWEEKDAY(date)Day of week

Example Formulas

These examples show how to combine fields, functions, and logic to solve real CRM use cases. Copy and adapt them as a starting point - the formula editor will validate your syntax in real time.

Contact

Full display name with title and department CONCAT(IF(ISBLANK({{contact.title}}), "", CONCAT({{contact.title}}, " ")), {{contact.first_name}}, " ", {{contact.last_name}}, IF(ISBLANK({{contact.department}}), "", CONCAT(" - ", {{contact.department}}))) Output: “VP John Smith - Sales” Seniority score based on title (Number) IF(OR(CONTAINS({{contact.title}}, "CEO"), CONTAINS({{contact.title}}, "Chief"), CONTAINS({{contact.title}}, "President")), 100, IF(OR(CONTAINS({{contact.title}}, "VP"), CONTAINS({{contact.title}}, "Vice President")), 80, IF(CONTAINS({{contact.title}}, "Director"), 60, IF(CONTAINS({{contact.title}}, "Manager"), 40, 20)))) Is decision maker (Boolean) OR(CONTAINS({{contact.title}}, "CEO"), CONTAINS({{contact.title}}, "CFO"), CONTAINS({{contact.title}}, "CTO"), CONTAINS({{contact.title}}, "VP"), CONTAINS({{contact.title}}, "President"), CONTAINS({{contact.title}}, "Owner"))

Account

Account tier by revenue (Text) IF(ISBLANK({{account.estimated_annual_revenue}}), "Unknown", IF({{account.estimated_annual_revenue}} >= 10000000, "Enterprise", IF({{account.estimated_annual_revenue}} >= 1000000, "Mid-Market", IF({{account.estimated_annual_revenue}} >= 100000, "SMB", "Startup")))) Extract website domain (Text) DOMAIN({{account.official_website}}) Profile completeness score 0-100 (Number) ROUND((IF(ISBLANK({{account.display_name}}), 0, 20) + IF(ISBLANK({{account.estimated_annual_revenue}}), 0, 20) + IF(ISBLANK({{account.estimated_employee_count}}), 0, 20) + IF(ISBLANK({{account.official_website}}), 0, 20) + IF(ISBLANK({{account.description}}), 0, 20)), 0)

Opportunity

Expected close quarter (Text) IF(ISBLANK({{opportunity.anticipated_closing_at}}), "Not Set", CONCAT("Q", TEXT(QUARTER({{opportunity.anticipated_closing_at}}), "number"), " ", TEXT(YEAR({{opportunity.anticipated_closing_at}}), "number"))) Output: “Q2 2025” Tiered commission (Number) IF(ISBLANK({{opportunity.amount}}), 0, IF({{opportunity.amount}} > 100000, ROUND({{opportunity.amount}} * 0.15, 2), IF({{opportunity.amount}} > 50000, ROUND({{opportunity.amount}} * 0.10, 2), ROUND({{opportunity.amount}} * 0.05, 2)))) Deal readiness score 0-100 (Number) ROUND((IF(ISBLANK({{opportunity.amount}}), 0, 25) + IF(ISBLANK({{opportunity.anticipated_closing_at}}), 0, 25) + IF(ISBLANK({{opportunity.next_step_details}}), 0, 25) + IF({{opportunity.status}} = "DEAL", 25, 0)), 0)

Troubleshooting / FAQs

The + operator is reserved for numeric addition. To join text strings, use CONCAT() or the & operator - e.g. {{contact.first_name}} & " " & {{contact.last_name}}.
This field is intentionally excluded from all domains. Allowing it would create a circular trigger loop: saving a computed field updates the record, which updates updated_at, which re-triggers recomputation. This applies to contact, account, and opportunity.
No - they have different timezone handling and cannot be mixed in arithmetic. Convert DateTime to Date first using DATE(): {{date_field}} - DATE({{datetime_field}}).
Wrap nullable fields with ISBLANK() or BLANKVALUE(). For example: IF(ISBLANK({{contact.title}}), "No Title", {{contact.title}}). For numbers, use BLANKVALUE({{account.estimated_annual_revenue}}, 0) to default to zero.
No. Computed fields are single-record only. For aggregation across related records (e.g. sum of all opportunity amounts on an account), use Rollup Fields.
Not in a circular way. Direct cycles (A-B-A), indirect cycles, and self-references are all blocked at save time.
Formulas recalculate when a record is created or updated. Changes to referenced fields trigger an asynchronous recomputation. TODAY() and NOW() are evaluated at computation time and may require a periodic backfill to stay current.
Yes. Formulas must be under 1,000 characters. There is also a complexity score limit of 10 - the system counts every node in your formula tree (each function call, field reference, and value counts as 1 point). If your formula exceeds this score, you’ll see a warning and the formula won’t save.If you’re hitting the limit, split your logic across multiple computed fields. For example, instead of one large nested formula, create a “Seniority Score” field and an “Is Decision Maker” field separately, then reference them from a third field. Prefer CASE over deeply nested IF chains - it’s more compact and uses fewer nodes.
Yes - one computed field can use another computed field as an input, creating a dependency chain. There is no hard limit on chain length, but cycles are blocked. If Field A references Field B and Field B references Field A (directly or indirectly), the system detects this and prevents the save.
No. Use CONTAINS() for substring checks and BEGINS() for prefix checks. Both are case-sensitive. No regex, wildcards, or case-insensitive matching.