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 ConfigurationAvailable columns to reference:
Example conditions:
email != null lead_score > 70 status == "active" && company_size > 100 Step-by-Step: Adding a Condition
Open Column Settings
Right-click on the column header and select "Edit Column" from the menu.
Column header → Right-click → Edit Column
All Steps:
Open Column Settings
Navigate to Run Configuration
Find Condition Expression Field
Write Your Condition
Verify the Expression
Save Configuration
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 to | Status equals "active" |
does not equal | Not equal to | Email does not equal empty |
is greater than | Greater than | Score is greater than 50 |
is less than | Less than | Price is less than 100 |
is greater than or equal to | Greater than or equal | Age is greater than or equal to 18 |
is less than or equal to | Less than or equal | Quantity 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
What it means:
Both conditions must be true
Example:
Email not empty AND score > 50When to use:
Multiple requirements must all be met
What it means:
At least one condition must be true
Example:
Priority = "high" OR value > 10000When to use:
Flexible routing - either criteria can trigger
What it means:
Invert the condition (make true → false)
Example:
NOT is_blockedWhen to use:
Exclude specific cases
🎯 Visual Examples:
Think of it as a checklist - all boxes must be checked ✓
✓ Email valid AND ✓ Company size > 100 → Both must be true
Think of it as multiple paths - any path can work ✓
Priority = "high" OR Value > 10000 → Either one triggers
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:
What it does:
Only run if email column has a value
Use case:
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:
Column executed successfully
Condition was false - cell skipped
Execution failed with error
Currently executing
🔍 Key Visual Differences:
💡 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
Click the skipped cell to see why it was skipped
Cell Details
SkippedState
Timestamp
2024-10-24 15:42:11
⚠️ Why was it skipped?
Condition Expression:
Evaluated As:
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:
- Click the gray cell showing "Skipped (Condition failed)"
- Detail panel opens on right
- 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-timeThe column header shows aggregate statistics for all rows:
Premium Enrichment
Hover over header for details
💰 Cost Savings from Skipping:
🔍 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 1Condition:
No condition set (Always runs) All rows get basic company lookup
Premium Enrichment
Tier 2Condition:
company_size > 50 (Company size > 50) Only medium/large companies
Enterprise Enrichment
Tier 3Condition:
company_size > 1000 (Company size > 1000) Only enterprise companies
💰 Total Cost with Tiered Processing:
❌ 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
Column:
Send Welcome Email
Condition:
status == "new" && email_valid == trueWhat 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
Column:
Send Renewal Email
Condition:
status == "expiring" && days_until_expiry <= 30What 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
Column:
Send Win-Back Email
Condition:
status == "churned" && lifetime_value > 5000What 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:
New customer joins
Status = "new" → Welcome Email column runs → Other columns skip
Subscription expiring soon
Status = "expiring" → Renewal Email column runs → Other columns skip
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
✓ HealthcarePattern 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
Configure Condition
SETUPWrite your condition expression in the column settings
Action:
Open column settings → Add condition
⚠️ 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:
- Configure condition in column settings
- Save configuration (don't run yet)
- Check a few test rows:
- Look at data values in those rows
- Mentally evaluate if condition would be true/false
- Run on single row (use row-level run)
- Check result:
- Did it skip as expected?
- Did it run as expected?
- Adjust condition if needed
- 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
| Operator | Meaning | Example |
|---|---|---|
| equals | Equal | Status equals "active" |
| does not equal | Not equal | Email does not equal empty |
| is greater than | Greater | Score is greater than 50 |
| is less than | Less | Price is less than 100 |
| is greater than or equal to | Greater or equal | Age is greater than or equal to 18 |
| is less than or equal to | Less or equal | Quantity is less than or equal to 10 |
Logical
| Operator | Meaning | Example |
|---|---|---|
| AND | Both must be true | Email not empty AND score > 50 |
| OR | At least one true | Priority = "high" OR value > 10000 |
| NOT | Invert condition | NOT is_blocked |
Text Operations
| Operation | Meaning | Example |
|---|---|---|
| contains | String contains substring | Email contains "@acme.com" |
| starts with | String starts with | Email starts with "admin" |
| ends with | String ends with | Domain ends with ".com" |
Array Operations
| Operation | Meaning | Example |
|---|---|---|
| length | Count items | Tags length is greater than 0 |
| is empty | No items | Tags 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 SavedBasic Validation
FreeCondition:
Always (no condition)Purpose:
Validate email format, check domain
Company Enrichment
$1.00 per callCondition:
email_valid == truePurpose:
Look up company data
Premium Enrichment
$5.00 per callCondition:
company_size > 100 && industry in [Tech, Finance, Healthcare]Purpose:
Deep company research
Send to Sales
FreeCondition:
premium_enrichment completed && decision_maker_found == truePurpose:
Add to sales CRM
💰 Total Savings Breakdown:
⚡ 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! 🚀