Blog

Airtable: Conditional IF Formulas for Status Fields

FE
Filla EditorialintermediateNov 10, 2025

Create status fields with conditional logic

You need a status field that updates automatically based on other field values. Instead of manually updating a status field, use formulas to calculate status from dates, checkboxes, numbers, or other fields.


Basic IF formula for status

The simplest status formula checks one condition:

IF({Completed}, "Done", "In Progress")

This returns "Done" if the {Completed} checkbox is checked, otherwise "In Progress".


Two-condition status (nested IF)

When you need to check multiple conditions, nest IF statements:

IF(
  {Completed},
  "Done",
  IF(
    {Started},
    "In Progress",
    "Not Started"
  )
)

This creates a three-state status:

  • "Done" if completed
  • "In Progress" if started but not completed
  • "Not Started" if neither

Multiple conditions with SWITCH

For more than 2-3 conditions, SWITCH() is cleaner than nested IFs:

SWITCH(
  TRUE(),
  {Completed}, "Done",
  {In Review}, "Reviewing",
  {Started}, "In Progress",
  "Not Started"
)

How it works:

  • SWITCH(TRUE(), ...) evaluates conditions in order
  • Returns the first matching value
  • The last value is the default fallback

Status based on dates

Overdue, due today, upcoming

SWITCH(
  TRUE(),
  AND({Due Date}, {Due Date} < TODAY()), "Overdue",
  AND({Due Date}, IS_SAME({Due Date}, TODAY(), 'day')), "Due Today",
  AND({Due Date}, {Due Date} > TODAY()), "Upcoming",
  "No Due Date"
)

Days until due

SWITCH(
  TRUE(),
  AND({Due Date}, {Due Date} < TODAY()), "Overdue",
  AND({Due Date}, DATEDIFF(TODAY(), {Due Date}, 'days') = 0), "Due Today",
  AND({Due Date}, DATEDIFF(TODAY(), {Due Date}, 'days') = 1), "Due Tomorrow",
  AND({Due Date}, DATEDIFF(TODAY(), {Due Date}, 'days') <= 7), "Due This Week",
  AND({Due Date}, DATEDIFF(TODAY(), {Due Date}, 'days') > 7), "Due Later",
  "No Due Date"
)

Status based on multiple fields

Combine conditions with AND() and OR():

All conditions must be true (AND)

IF(
  AND(
    {Approved},
    {Payment Received},
    {Contract Signed}
  ),
  "Ready to Start",
  "Pending"
)

Any condition can be true (OR)

IF(
  OR(
    {High Priority},
    {Urgent},
    {VIP Client}
  ),
  "Priority",
  "Standard"
)

Complex combinations

SWITCH(
  TRUE(),
  AND({Completed}, {Approved}), "Complete",
  AND({Completed}, NOT({Approved})), "Pending Approval",
  AND({Started}, {Payment Received}), "In Progress",
  {Payment Received}, "Ready to Start",
  "Not Started"
)

Status based on numeric values

Percentage complete

SWITCH(
  TRUE(),
  {Progress} >= 100, "Complete",
  {Progress} >= 75, "Almost Done",
  {Progress} >= 50, "Halfway",
  {Progress} > 0, "In Progress",
  "Not Started"
)

Score-based status

SWITCH(
  TRUE(),
  {Score} >= 90, "Excellent",
  {Score} >= 80, "Good",
  {Score} >= 70, "Fair",
  {Score} >= 60, "Needs Improvement",
  "Poor"
)

Status based on text fields

Contains specific text

SWITCH(
  TRUE(),
  FIND("Error", {Notes}), "Error",
  FIND("Warning", {Notes}), "Warning",
  FIND("Complete", {Notes}), "Complete",
  "Normal"
)

Exact match

SWITCH(
  {Category},
  "A", "High Priority",
  "B", "Medium Priority",
  "C", "Low Priority",
  "Unknown"
)

Status based on linked records

Count linked records

SWITCH(
  TRUE(),
  COUNT({Tasks}) = 0, "No Tasks",
  COUNT({Tasks}) = COUNT({Completed Tasks}), "All Complete",
  COUNT({Completed Tasks}) > 0, "In Progress",
  "Not Started"
)

Check if linked record exists

IF(
  {Assigned To},
  "Assigned",
  "Unassigned"
)

Priority status patterns

Urgency based on due date and priority

SWITCH(
  TRUE(),
  AND({High Priority}, {Due Date} < TODAY()), "Critical",
  AND({High Priority}, DATEDIFF(TODAY(), {Due Date}, 'days') <= 3), "Urgent",
  {High Priority}, "High Priority",
  AND({Due Date}, {Due Date} < TODAY()), "Overdue",
  "Normal"
)

Risk level

SWITCH(
  TRUE(),
  AND({Budget Overrun}, {Behind Schedule}), "High Risk",
  OR({Budget Overrun}, {Behind Schedule}), "Medium Risk",
  "Low Risk"
)

Workflow status patterns

Simple workflow

SWITCH(
  TRUE(),
  {Completed}, "Complete",
  {In Review}, "Review",
  {In Progress}, "Active",
  {Assigned}, "Assigned",
  "Backlog"
)

Approval workflow

SWITCH(
  TRUE(),
  AND({Submitted}, {Approved}), "Approved",
  AND({Submitted}, {Rejected}), "Rejected",
  {Submitted}, "Pending Review",
  {Draft}, "Draft",
  "Not Started"
)

Common patterns

Default to empty string

Instead of showing "Not Started" or "Unknown", return empty:

SWITCH(
  TRUE(),
  {Completed}, "Done",
  {Started}, "In Progress",
  ""
)

Include status emoji

SWITCH(
  TRUE(),
  {Completed}, "✅ Done",
  {In Review}, "👀 Reviewing",
  {Started}, "🔄 In Progress",
  "⏳ Not Started"
)

Status with count

IF(
  COUNT({Tasks}) > 0,
  "Active (" & COUNT({Tasks}) & " tasks)",
  "No Tasks"
)

Best practices

1. Use SWITCH for 3+ conditions

Nested IFs become hard to read. SWITCH(TRUE(), ...) is cleaner:

// Hard to read
IF({A}, "A", IF({B}, "B", IF({C}, "C", "Default")))

// Easier to read
SWITCH(TRUE(), {A}, "A", {B}, "B", {C}, "C", "Default")

2. Order conditions by priority

In SWITCH(TRUE(), ...), conditions are evaluated top to bottom. Put the most specific or important conditions first:

SWITCH(
  TRUE(),
  AND({A}, {B}), "Both",      // Most specific first
  {A}, "A Only",               // Then less specific
  {B}, "B Only",
  "Neither"                    // Default last
)

3. Handle blank values

Always account for blank or missing values:

SWITCH(
  TRUE(),
  AND({Due Date}, {Due Date} < TODAY()), "Overdue",
  {Due Date}, "Upcoming",
  "No Due Date"  // Handles blank
)

4. Keep status values consistent

Use the same status values across your base for easier filtering and grouping. Consider creating a single select field with your status options, then reference it in formulas if needed.

5. Test edge cases

Test your formulas with:

  • Blank/null values
  • Dates in the past, present, and future
  • Zero and negative numbers
  • Empty linked record lists

Troubleshooting

Status not updating

Problem: Status field shows old values.

Solution: Check if referenced fields are formula fields. Formula fields recalculate, but if they reference other formulas, there may be a delay. Also ensure your conditions are correctly structured.

Wrong status showing

Problem: Status doesn't match expected conditions.

Solution:

  1. Check field names match exactly (case-sensitive)
  2. Verify date comparisons account for time zones
  3. Test each condition individually
  4. Check for blank values interfering with logic

Formula too complex

Problem: Formula is hard to read or maintain.

Solution: Break into multiple formula fields, or use SWITCH() instead of deeply nested IF() statements.


Quick reference

Goal Pattern
Simple two-state IF({Condition}, "Yes", "No")
Three-state IF({A}, "A", IF({B}, "B", "C"))
Multiple conditions SWITCH(TRUE(), {A}, "A", {B}, "B", "Default")
All conditions true IF(AND({A}, {B}), "Both", "Not Both")
Any condition true IF(OR({A}, {B}), "Either", "Neither")
Date-based status SWITCH(TRUE(), {Date} < TODAY(), "Past", "Future")
Count-based status SWITCH(TRUE(), COUNT({List}) = 0, "Empty", "Has Items")
Text contains IF(FIND("Text", {Field}), "Found", "Not Found")

When to use formulas vs single select

Use formula status when:

  • Status can be calculated from other fields
  • You want automatic updates
  • Status logic is complex but deterministic
  • You need consistency across records

Use single select status when:

  • Status requires manual input
  • Status doesn't depend on other fields
  • You need users to choose from a dropdown
  • You want to track status changes over time (with automations)

Advanced: Dynamic status with calculations

Status with percentage

IF(
  {Progress} >= 100,
  "Complete",
  {Progress} & "% Complete"
)

Status with time remaining

IF(
  AND({Due Date}, {Due Date} < TODAY()),
  "Overdue by " & DATEDIFF({Due Date}, TODAY(), 'days') & " days",
  IF(
    {Due Date},
    DATEDIFF(TODAY(), {Due Date}, 'days') & " days remaining",
    "No due date"
  )
)

FAQ

Should I use IF or SWITCH for status formulas in Airtable?

Use IF() for simple two-state checks (like done vs. not done). For three or more conditions, SWITCH(TRUE(), ...) is easier to read and maintain. Both produce the same result, but SWITCH keeps complex logic organized.

Can I use conditional formulas with single select fields?

Yes. Reference the single select field directly in your formula: IF({Status} = "Active", "Open", "Closed"). You can also use SWITCH({Status}, "Active", "Open", "Closed", "Done", "Unknown") to map each option to a computed value.

Why does my IF formula return blank instead of the expected status?

The most common cause is a blank or null field value that none of your conditions account for. Always add a default fallback at the end of your formula. With SWITCH, the last value (after all condition pairs) serves as the default. With IF, make sure your else branch handles the empty case.

Can I combine a formula status field with colors or grouping in views?

Formula fields display as plain text, so they do not support the built-in color options of single select fields. However, you can group and filter views by formula field values. If you need colors, consider using the formula to write a value that matches a single select option, then copy it over with an automation.


Build Better Airtable Forms with Filla

Conditional status formulas work best when the data behind them is clean. Filla helps you collect structured form responses that feed directly into your status logic.

  • Conditional form fields that adapt based on previous answers
  • Required fields and validation to prevent incomplete records
  • Multi-step layouts to guide submitters through complex entries
  • Direct connection to your Airtable base with no middleware needed

Start free and connect your first form to any Airtable base.

Create Your First Form Free


References

Community discussion on conditional IF formulas for status fields: Requesting help with conditional IF formula for makeshift status field