Skip to content

5.1 Conditional Expressions

You've mastered dependencies and data flow—now you can build multi-step automations where data flows reliably from column to column. But here's the thing: not every row needs every step.

Imagine you're enriching leads:

  • For valid emails → enrich with premium API ($1 per call)
  • For invalid emails → skip enrichment (save $1)

With 10,000 leads where 2,000 have invalid emails, you've just saved $2,000 by skipping unnecessary operations.

This is conditional execution—and it's one of the most powerful cost-saving, performance-optimizing features in Taibles.


The Concept: Smart Automation That Skips What It Doesn't Need

What is Conditional Execution?

Simple definition: A column only runs if certain conditions are met.

The power:

  • Skip expensive API calls when data isn't needed
  • Route different rows down different paths
  • Implement business logic without code
  • Optimize costs automatically
  • Speed up processing by doing less

The Mental Model

Think of conditions as quality gates or decision points:

Row arrives at column

Is condition true?

  YES → Execute column

  NO → Skip (marked as "Skipped")

Key insight: Skipped cells are still "processed" for dependency purposes. Downstream columns can continue—they just see empty data from the skipped column.


When to Use Conditions

Scenario 1: Cost Optimization

Problem: Premium enrichment API costs $5 per call

Solution: Only enrich high-value leads

Condition: Only if lead score is greater than 70

Result: Save thousands by skipping low-quality leads


Scenario 2: Data Quality Gates

Problem: Bad data breaks downstream processes

Solution: Only proceed if data is valid

Condition: Only if email exists and contains @ symbol

Result: Prevent errors from propagating


Scenario 3: Tiered Processing

Problem: Not all leads need the same depth of research

Solution: Different paths for different tiers

  • Basic tier: All leads → always runs
  • Premium tier: Only qualified leads (score > 50)
  • Enterprise tier: Only hot leads (score > 80)

Result: Appropriate effort per lead


Scenario 4: Status-Based Routing

Problem: Different actions for different statuses

Solution: Branch based on status

  • Send welcome email: Only new customers
  • Send renewal email: Only expiring customers
  • Send win-back email: Only churned customers

Result: Right message to right customer


Setting Up Conditions in the UI

Let's see how to actually configure conditions on your columns.

Column Configuration

Run Configuration
Enrich Email
1
email != null && email.includes("@")
Press CTRL+SPACE for autocomplete✓ Valid expression

Available columns to reference:

emailcompany_sizestatuslead_scoreemail_valid

Example conditions:

email != null
lead_score > 70
status == "active" && company_size > 100

Step-by-Step: Adding a Condition

1
2
3
4
5
6
7
1

Open Column Settings

Right-click on the column header and select "Edit Column" from the menu.

Column header → Right-click → Edit Column

All Steps:

1

Open Column Settings

2

Navigate to Run Configuration

3

Find Condition Expression Field

4

Write Your Condition

5

Verify the Expression

6

Save Configuration

7

Test on One Row


Writing Condition Expressions

Conditions are written using simple comparison expressions that evaluate to true or false.

Comparison Operators

Comparison Operators

Operator Meaning Example
equals
Equal toStatus equals "active"
does not equal
Not equal toEmail does not equal empty
is greater than
Greater thanScore is greater than 50
is less than
Less thanPrice is less than 100
is greater than or equal to
Greater than or equalAge is greater than or equal to 18
is less than or equal to
Less than or equalQuantity is less than or equal to 10

💡 Tip: When you type conditions in the editor, you can use plain English like "equals" or the symbol "==" - both work the same way!

Logical Operators

Logical Operators

AND (&&)

What it means:

Both conditions must be true

Example:

Email not empty AND score > 50

When to use:

Multiple requirements must all be met

OR (||)

What it means:

At least one condition must be true

Example:

Priority = "high" OR value > 10000

When to use:

Flexible routing - either criteria can trigger

NOT (!)

What it means:

Invert the condition (make true → false)

Example:

NOT is_blocked

When to use:

Exclude specific cases

🎯 Visual Examples:

AND:

Think of it as a checklist - all boxes must be checked ✓

✓ Email valid AND ✓ Company size > 100 → Both must be true

OR:

Think of it as multiple paths - any path can work ✓

Priority = "high" OR Value > 10000 → Either one triggers

NOT:

Think of it as opposite day - flip the result ⟲

NOT is_blocked → If is_blocked = false, condition is true

Example Conditions

Simple Condition Examples

📧

Check if Value Exists

Condition:

email != null

What it does:

Only run if email column has a value

Use case:

Prevent processing empty data
1 of 8

Understanding Skipped Cells

When a condition evaluates to false, the cell is marked as Skipped.

What You See

Cell States Comparison

Here's how skipped cells look compared to other cell states:

john@acme.com
Normal (Done)

Column executed successfully

Skipped (Condition failed)
Skipped (Condition Failed)

Condition was false - cell skipped

!Unsuccessful
Error (Unsuccessful)

Execution failed with error

Processing...
Running

Currently executing

🔍 Key Visual Differences:

Skipped: Gray ✕ symbol, italic text, light gray background
!
Error: Blue ! symbol, "Unsuccessful" badge, blue background
Success: Green ✓ checkmark, actual data value displayed

💡 Important: Skipped cells are NOT errors! They're intentionally skipped because your condition was false. This is normal and expected behavior that saves you time and money.

Visual indicators:

  • Cell shows a gray ✕ symbol
  • Text displays "Skipped (Condition failed)" in gray italic
  • Cell background is light gray
  • Clearly different from errors (which show blue "Unsuccessful")

What This Means

  • ✅ Cell is "processed" (not stuck waiting)
  • ✅ Downstream columns can continue
  • ✅ No API calls made (no cost incurred)
  • ✅ No execution time wasted
  • ✅ Dependencies consider it "done"

Downstream Behavior

Columns depending on a skipped column still run—they just receive empty or null data from the skipped column.


Inspecting Why Cells Were Skipped

Table View

Click on a skipped cell to see details:

Premium Enrichment

Acme Corp, 500 employees
Skipped (Condition failed) ← Click me
TechStart Inc, 250 employees
👆

Click the skipped cell to see why it was skipped

Cell Details

Skipped

State

Skipped (Condition failed)

Timestamp

2024-10-24 15:42:11

⚠️ Why was it skipped?

Condition Expression:

lead_score > 50

Evaluated As:

35 > 50

Result:

false (condition not met)

Action Taken:

Skipped execution (no API call made, no cost incurred)

💡 This shows you:

  • ✅ The exact condition that was checked
  • ✅ The actual values from this row
  • ✅ The evaluation result (true/false)
  • ✅ Why it was skipped

To see why a cell was skipped:

  1. Click the gray cell showing "Skipped (Condition failed)"
  2. Detail panel opens on right
  3. Look for "Condition" section

You'll see:

  • ✅ The exact condition expression
  • ✅ The actual values that were checked
  • ✅ The evaluation result (true/false)
  • ✅ Why it was skipped

Column Statistics

The column header shows you aggregate counts of how rows were processed.

Column Statistics

Real-time

The column header shows aggregate statistics for all rows:

Premium Enrichment

Hover over header for details

Done:
1,24726%
Running:
120%
Skipped:
3,45673%
!Failed:
50%

💰 Cost Savings from Skipping:

Rows skipped:3,456
Cost per API call:$5.00
Total saved: $17,280

🔍 Quick Insights:

  • 73% of rows were skipped - excellent optimization!
  • Only 26% needed processing - condition working perfectly
  • Saved $17,280 by not calling the API for skipped rows

Quick insights:

  • See how many rows met the condition (processed)
  • See how many were skipped (saved costs!)
  • Calculate optimization: Skipped ÷ Total = % saved

Example: 3,456 skipped out of 4,720 total = 73% of rows skipped = excellent optimization!


Simple Condition Examples

Example 1: Check if Value Exists

Expression: Email is not empty

What it does: Skips if email column is empty

Use case: Don't send emails when there's no address


Example 2: Numeric Threshold

Expression: Company size is greater than 100

What it does: Skips companies with ≤100 employees

Use case: Only enrich large companies


Example 3: Text Match

Expression: Status equals "active"

What it does: Skips rows where status is not "active"

Use case: Only process active customers


Example 4: Boolean Check

Expression: Email valid equals true

What it does: Skips rows where email_valid is false or empty

Use case: Data quality gate before sending


Example 5: Combining Conditions (AND)

Expression: Email is not empty AND company size is greater than 100

What it does: Both conditions must be true

Use case: Multiple quality gates


Example 6: Combining Conditions (OR)

Expression: Priority equals "high" OR value is greater than 10000

What it does: Either condition can be true

Use case: Flexible routing—process if EITHER criteria met


Example 7: String Contains

Expression: Email contains "@acme.com"

What it does: Checks if email is from target domain

Use case: Only process specific company domains


Example 8: Array Length Check

Expression: Tags length is greater than 0

What it does: Checks if array has items

Use case: Only process rows with tags


Advanced Condition Patterns

Now let's explore more sophisticated condition logic.

Pattern 1: Multiple Required Fields

Use case: Only process if all required data is present

Conditions:

  • Email is not empty AND
  • First name is not empty AND
  • Company is not empty

What it does: All three fields must have values

Visual: Think of it as a checklist—all boxes must be checked


Pattern 2: Tiered Processing

Create different enrichment levels based on company size:

Tiered Processing Example

🔵

Basic Enrichment

Tier 1

Condition:

No condition set (Always runs)

All rows get basic company lookup

Cost:$0.50 per call
Rows:10,000
Filters to 3,000 rows
🟣

Premium Enrichment

Tier 2

Condition:

company_size > 50 (Company size > 50)

Only medium/large companies

Cost:$2.00 per call
Rows:3,000
Filters to 200 rows
🟡

Enterprise Enrichment

Tier 3

Condition:

company_size > 1000 (Company size > 1000)

Only enterprise companies

Cost:$10.00 per call
Rows:200

💰 Total Cost with Tiered Processing:

Basic (10,000 × $0.50):$5,000
Premium (3,000 × $2.00):$6,000
Enterprise (200 × $10.00):$2,000
Total cost: $13,000

❌ Without Tiered Processing:

If you ran enterprise enrichment on all 10,000 rows:

10,000 × $10.00 = $100,000

🎉 Savings with Tiered Processing:

Smart conditions = appropriate effort per lead

$87,000

87% cost reduction!

Column: Basic Enrichment

  • Condition: Always (no condition set)
  • → All rows get basic enrichment

Column: Premium Enrichment

  • Condition: Company size from Basic Enrichment is greater than 50
  • → Only if basic enrichment found medium companies

Column: Enterprise Enrichment

  • Condition: Company size from Basic Enrichment is greater than 1000
  • → Only if company has 1000+ employees

Result: Three-tier processing based on company size


Pattern 3: Status-Based Routing

Use case: Different actions for different customer statuses

Status-Based Routing Example

Different actions triggered based on customer status - each column has its own condition:

🎯

Customer Row

Status determines path

👋 Status: new

Column:

Send Welcome Email

Condition:

status == "new" && email_valid == true

What it does:

Welcome new customers with onboarding email

Email Subject:

"Welcome to Acme! Let's get started"

Runs when: When customer status is "new" and email is valid

Status: expiring

Column:

Send Renewal Email

Condition:

status == "expiring" && days_until_expiry <= 30

What it does:

Remind customers to renew their subscription

Email Subject:

"Your subscription expires in 30 days"

Runs when: When subscription is expiring within 30 days

💔 Status: churned

Column:

Send Win-Back Email

Condition:

status == "churned" && lifetime_value > 5000

What it does:

Win back high-value churned customers

Email Subject:

"We miss you! Special offer inside"

Runs when: When customer churned with lifetime value > $5,000

📋 Example Scenarios:

Scenario 1

New customer joins

Status = "new" → Welcome Email column runs → Other columns skip

Scenario 2

Subscription expiring soon

Status = "expiring" → Renewal Email column runs → Other columns skip

Scenario 3

High-value customer churns

Status = "churned" + LTV > $5k → Win-Back Email column runs → Other columns skip

Right Message, Right Customer, Right Time

Each customer gets exactly the email they need based on their status - no manual sorting required!


Pattern 4: Complex Business Logic

Use case: Qualify leads based on multiple criteria

Conditions (all must be true):

  • Email valid equals true
  • Company size is greater than 50
  • Industry is one of: Technology, Finance, or Healthcare
  • Website is not empty

Breakdown:

Core requirements (all must be true):
  ✓ Email must be valid
  ✓ Company must have 50+ employees
  ✓ Website must exist

Industry (at least one):
  ✓ Technology OR
  ✓ Finance OR
  ✓ Healthcare

Pattern 5: Range Check

Use case: Only process orders in specific value range

Expression: Order total is greater than or equal to 100 AND order total is less than or equal to 1000

What it does: Order total must be between $100 and $1,000

Use case: Focus on mid-range orders


Pattern 6: Exclude Specific Values

Use case: Skip processing for certain sources

Expression: Source does not equal "spam" AND source does not equal "test"

What it does: Skip rows from "spam" or "test" sources

Use case: Data quality filtering


Pattern 7: Date-Based Conditions

Use case: Only process recent records

Expression: Created date is greater than or equal to yesterday

What it does: Only rows created yesterday or today

Other patterns:

  • Only today's records: Created date equals today
  • Only this week: Days since created is less than or equal to 7

Pattern 8: Nested Object Checks

Use case: Check properties in nested objects safely

Conditions:

  • Company data is not empty AND
  • Company data name is not empty AND
  • Company data metrics is not empty AND
  • Company data metrics employees is greater than 100

What it does: Safely checks nested properties before accessing deep values

Why this matters: Prevents errors when checking properties that might not exist


Testing Conditions Before Deploying

Best Practice: Testing Conditions Before Deploying

1

Configure Condition

SETUP

Write your condition expression in the column settings

Action:

Open column settings → Add condition

Step 1 of 8

⚠️ Why test first? Testing on a single row first prevents mistakes from affecting thousands of rows. It's much easier to fix a condition when you catch the error early!

Best practice workflow:

  1. Configure condition in column settings
  2. Save configuration (don't run yet)
  3. Check a few test rows:
    • Look at data values in those rows
    • Mentally evaluate if condition would be true/false
  4. Run on single row (use row-level run)
  5. Check result:
    • Did it skip as expected?
    • Did it run as expected?
  6. Adjust condition if needed
  7. Run on all rows when confident

Common Mistakes and How to Avoid Them

Mistake 1: Forgetting to Handle Empty Values

Wrong: Company size is greater than 50

Problem: Fails if company_size is empty or null

Right: Company size is not empty AND company size is greater than 50

Lesson: Always check for existence before comparing


Mistake 2: Confusing AND with OR

Wrong: Priority equals "high" AND value is greater than 10000

Problem: Both must be true (too restrictive)

Right: Priority equals "high" OR value is greater than 10000

Lesson: Use OR when "either one" should trigger, AND when "both" required


Mistake 3: Not Testing Edge Cases

Wrong: Deploy condition on 10,000 rows without testing

Right: Test on a few rows first, verify behavior

Lesson: Always test with edge cases:

  • Empty values
  • Null values
  • Zero values
  • Unexpected formats

Mistake 4: Overly Complex Conditions

Wrong: One condition with 15 ANDs and ORs

Right: Break into multiple columns with simpler conditions

Lesson: If condition is hard to read, split into steps:

  • Column 1: Basic validation (simple condition)
  • Column 2: Quality check (simple condition, depends on Column 1)
  • Column 3: Final processing (simple condition, depends on Column 2)

Quick Reference: Condition Operators

Comparison

OperatorMeaningExample
equalsEqualStatus equals "active"
does not equalNot equalEmail does not equal empty
is greater thanGreaterScore is greater than 50
is less thanLessPrice is less than 100
is greater than or equal toGreater or equalAge is greater than or equal to 18
is less than or equal toLess or equalQuantity is less than or equal to 10

Logical

OperatorMeaningExample
ANDBoth must be trueEmail not empty AND score > 50
ORAt least one truePriority = "high" OR value > 10000
NOTInvert conditionNOT is_blocked

Text Operations

OperationMeaningExample
containsString contains substringEmail contains "@acme.com"
starts withString starts withEmail starts with "admin"
ends withString ends withDomain ends with ".com"

Array Operations

OperationMeaningExample
lengthCount itemsTags length is greater than 0
is emptyNo itemsTags is empty

Real-World Example: Lead Qualification Pipeline

Let's put it all together with a complete example.

Real-World Example: Lead Qualification Pipeline

$37,000 Saved
1
✉️

Basic Validation

Free

Condition:

Always (no condition)

Purpose:

Validate email format, check domain

Total rows:10,000
Processed:10,000
Skipped:0
8,000 rows continue
2
🏢

Company Enrichment

$1.00 per call

Condition:

email_valid == true

Purpose:

Look up company data

Total rows:10,000
Processed:8,000
Skipped:2,000
Savings: $2,000
1,000 rows continue
3
🔍

Premium Enrichment

$5.00 per call

Condition:

company_size > 100 && industry in [Tech, Finance, Healthcare]

Purpose:

Deep company research

Total rows:8,000
Processed:1,000
Skipped:7,000
Savings: $35,000
1,500 rows continue
4
📤

Send to Sales

Free

Condition:

premium_enrichment completed && decision_maker_found == true

Purpose:

Add to sales CRM

Total rows:1,000
Processed:1,500
Skipped:8,500

💰 Total Savings Breakdown:

Company Enrichment (2,000 skipped × $1.00):$2,000
Premium Enrichment (7,000 skipped × $5.00):$35,000
Total Saved: $37,000

⚡ Speed Benefits:

  • • Skipped 9,000 unnecessary API calls
  • • Processed only qualified leads
  • • Pipeline runs much faster

🎯 Quality Benefits:

  • • Only 1,500 qualified leads to sales
  • • Sales team focuses on best leads
  • • Higher conversion rate
🎉

Smart Conditions = Massive ROI

By intelligently skipping inappropriate leads at each stage, you saved $37,000 on 10,000 leads while maintaining quality. This is the power of conditional execution!

Column 1: Basic Validation

  • Condition: Always (no condition)
  • Purpose: Validate email format, check domain

Column 2: Company Enrichment

  • Condition: Email valid equals true
  • Purpose: Look up company data (costs $1 per call)
  • Saves: Skip 2,000 invalid emails = $2,000 saved

Column 3: Premium Enrichment

  • Condition: Company size is greater than 100 AND industry is one of [Technology, Finance, Healthcare]
  • Purpose: Deep company research (costs $5 per call)
  • Saves: Skip 7,000 small/wrong-industry companies = $35,000 saved

Column 4: Send to Sales

  • Condition: Premium enrichment completed AND decision maker found equals true
  • Purpose: Add to sales CRM
  • Saves: Skip 8,500 unqualified leads = cleaner pipeline

Total savings: $37,000 on 10,000 leads by intelligent skipping!


Summary: Mastering Conditional Execution

You've now learned how to use conditional expressions to build smart, cost-effective automations:

The Concept: Skip operations selectively to optimize cost and performance

Setting Conditions: Where to configure and how to write expressions

Simple Patterns: 8 common condition patterns for everyday use

Advanced Patterns: 8 sophisticated patterns for complex logic

What Happens: Understanding the "Skipped" state

  • How skipped cells behave
  • How to inspect why cells were skipped
  • How downstream columns are affected

Best Practices: Testing, avoiding mistakes, keeping conditions simple

Real-World Impact: Saving thousands by intelligent automation


Next Up: More Advanced Run Configuration

Now that you understand conditional execution, Section 5.2 will show you:

  • Rate limiting to avoid API throttling
  • Scheduling columns to run at specific times
  • Manual vs automatic execution modes
  • Retry strategies for failed operations

Let's keep optimizing! 🚀

Built with VitePress