Skip to main content

Creating Your First Workflow

Build your first automated workflow using Expedify's visual workflow builder. This guide walks you through creating a practical automation from start to finish.

Time to complete: 20-30 minutes


What You'll Build

We'll create a Welcome Email Automation that:

  1. Triggers when a webhook receives data
  2. Validates the incoming email
  3. Sends a personalized welcome email
  4. Returns a success response

This covers the essential concepts: triggers, logic, actions, and variables.


Opening the Workflow Builder

Step 1: Navigate to Workflows

  1. Go to Automation → Workflows
  2. Click + New Workflow
  3. The workflow builder opens with a blank canvas

Understanding the Interface

AreaDescription
Left SidebarNode categories and search
Center CanvasVisual workflow design area
Right PanelProperties for selected node
Top ToolbarSave, test, execute, settings
Bottom PanelExecution logs and history

Node Categories

Workflows are built from nodes organized into categories:

CategoryPurposeExamples
TriggersStart workflow executionWebhook, Database, Scheduler
DataTransform and process dataTransform, Variables, SQL
LogicControl flow and decisionsConditions, Loops, Delays
MessagingSend communicationsEmail, WhatsApp, Slack
ContactsCRM operationsCreate, Update, Search
IntegrationsExternal servicesAPI Request, Google Sheets
Knowledge BaseDocument operationsSearch, Add, Update
OutputReturn resultsText Response, Builder

Building the Workflow

Step 1: Add a Trigger

Every workflow needs a trigger. Let's use a Webhook Trigger.

  1. Click + Add Node in the sidebar
  2. Select Triggers → Webhook Trigger
  3. Drag the node onto the canvas

Configure the Trigger:

  1. Click the node to open Properties Panel
  2. Create or select a webhook
  3. Note the auto-generated webhook URL

The trigger is now listening for incoming HTTP requests.

Step 2: Add Data Validation

Let's validate the incoming data has an email.

  1. Add Logic → Condition Node
  2. Connect: Webhook Trigger → Condition Node
    • Drag from the output handle (right side of webhook)
    • Drop on the input handle (left side of condition)

Configure the Condition:

Field: {{webhooktrigger_1.payload.email}}
Operator: is not empty

The condition now has two outputs:

  • True → Email exists, continue
  • False → Email missing, handle error

Step 3: Transform the Data

Process the validated data.

  1. Add Data → Transform Data Node
  2. Connect: Condition (True branch) → Transform

Configure the Transform:

// Extract and format data
const email = input.payload.email;
const name = input.payload.name || "Friend";

return {
email: email.toLowerCase().trim(),
name: name,
welcomeSubject: `Welcome, ${name}!`,
signupDate: new Date().toISOString()
};

Step 4: Send Welcome Email

Now send the actual email.

  1. Add Messaging → Email Send Node
  2. Connect: Transform → Email Send

Configure the Email:

FieldValue
To{{transformdata_1.email}}
Subject{{transformdata_1.welcomeSubject}}
BodySee template below
IntegrationSelect your email integration

Email Body Template:

Hello {{transformdata_1.name}},

Welcome to our platform! We're excited to have you join us.

You signed up on {{transformdata_1.signupDate}}.

Best regards,
The Team

Step 5: Add Success Response

Return a response to the webhook caller.

  1. Add Output → Text Response
  2. Connect: Email Send → Text Response

Configure the Response:

Message: Successfully sent welcome email to {{transformdata_1.email}}

Step 6: Handle Missing Email (Error Path)

Let's handle the error case when email is missing.

  1. Add another Output → Text Response
  2. Connect: Condition (False branch) → Error Response

Configure the Error Response:

Message: Error: Email address is required
Status Code: 400

The Complete Workflow

Your workflow should now look like this:

┌─────────────────┐
│ Webhook Trigger │
└────────┬────────┘


┌─────────────────┐
│ Condition │
│ (email exists?) │
└───┬─────────┬───┘
│ │
True False
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│Transform│ │ Error │
│ Data │ │Response │
└────┬────┘ └─────────┘


┌─────────┐
│ Email │
│ Send │
└────┬────┘


┌─────────┐
│ Success │
│Response │
└─────────┘

Saving Your Workflow

First Save

  1. Click Save in the toolbar
  2. Enter workflow name: "Welcome Email Automation"
  3. Add description: "Sends welcome email when new user signs up"
  4. Click Save Workflow

Workflow Settings

Before activating, configure additional settings:

SettingRecommended Value
Icon📧
CategoryAutomation
ComplexityBeginner
Tagsemail, welcome, onboarding

Testing Your Workflow

Manual Test

  1. Click Test in the toolbar
  2. Enter sample input:
{
"email": "test@example.com",
"name": "John"
}
  1. Click Run Test
  2. Watch nodes execute in sequence
  3. View results in each node

What to Check

NodeExpected Result
Webhook TriggerReceives test payload
ConditionReturns true (email exists)
Transform DataOutputs formatted data
Email SendShows success message
ResponseReturns success text

Debug Mode

Click any node during test to see:

  • Input: Data flowing into node
  • Output: Data produced by node
  • Duration: Processing time
  • Errors: Any issues encountered

Activating the Workflow

Once testing passes:

  1. Click Activate button
  2. Workflow status changes to Active
  3. Webhook URL is now live

Copy Your Webhook URL:

https://api.expedify.ai/webhooks/incoming/abc123...

This URL can now receive real requests from external systems.


Understanding Variables

Variables pass data between nodes using this syntax:

{{node_alias.output_field}}

Variable Examples

VariableMeaning
{{webhooktrigger_1.payload}}Full webhook body
{{webhooktrigger_1.payload.email}}Email from payload
{{transformdata_1.name}}Name from transform output
{{emailsend_1.success}}Email send status

Finding Variables

  1. Click in any input field
  2. Type {{ to see available variables
  3. Browse by node or search
  4. Click to insert

Variable Tips

✅ Use descriptive node aliases
✅ Access nested properties with dots
✅ Check variable exists before using
✅ Use Transform node to combine variables

❌ Don't reference nodes that haven't executed yet
❌ Don't assume array access without checking length

Workflow Execution States

StateDescription
PendingQueued, waiting to start
RunningCurrently executing
CompletedFinished successfully
FailedError occurred

Viewing Executions

  1. Click Executions tab in bottom panel
  2. See all workflow runs
  3. Click any execution to view details
  4. Replay execution on canvas

Best Practices

Naming Conventions

ElementConventionExample
WorkflowAction + Target"Welcome Email Automation"
Node Aliasverb_noun"transform_user_data"
VariablesClear contextuser.email not just email

Error Handling

Always handle potential failures:

✅ Add condition nodes before critical operations
✅ Use error response paths
✅ Log errors for debugging
✅ Notify team of failures

Common checks:
- Is email valid?
- Does record exist?
- Is API response successful?
- Is data in expected format?

Performance Tips

✅ Keep workflows focused (one purpose)
✅ Use transforms to reduce data early
✅ Add delays between API calls (rate limits)
✅ Test with realistic data volumes

❌ Don't loop over very large arrays
❌ Don't chain too many API calls
❌ Don't store sensitive data in variables

Common Workflow Patterns

Pattern 1: CRM Automation

Database Trigger (new contact)
→ Transform Data
→ Check Lead Score
→ IF high score: Assign to Sales
→ IF low score: Add to Nurture Campaign

Pattern 2: Scheduled Report

Scheduler (daily at 9am)
→ Database Query (get metrics)
→ Transform Data (format report)
→ Email Send (to team)

Pattern 3: Webhook Integration

Webhook Trigger (from Stripe)
→ Condition (payment success?)
→ Update Contact (mark as customer)
→ WhatsApp Send (receipt)
→ Response (200 OK)

Pattern 4: AI Processing

User Message Trigger
→ KB Search (find relevant docs)
→ LLM Node (generate response)
→ Text Response (reply to user)

Troubleshooting

Workflow Not Triggering

  1. Check activation - Is workflow active?
  2. Verify webhook URL - Correct endpoint?
  3. Check payload format - JSON structure correct?
  4. View logs - Any errors in execution panel?

Node Failing

  1. Check inputs - Are variables available?
  2. Verify configuration - All required fields set?
  3. Test integration - Is service connected?
  4. Review error message - What specific error?

Variable Not Found

  1. Check node alias - Spelled correctly?
  2. Verify execution order - Node executed before use?
  3. Check output field - Field exists in output?
  4. Use preview - See what data is available

Email Not Sending

  1. Check integration - Email service connected?
  2. Verify recipient - Valid email address?
  3. Check template - Variables resolving?
  4. View email logs - Delivery status?

Next Steps

With your first workflow complete, continue with:

  1. Using Conditions & Branches - Complex logic
  2. AI Nodes & Prompts - AI integration
  3. Testing Workflows - Debug techniques

Quick Reference

Node Connection

  • Drag from output handle (right)
  • Drop on input handle (left)
  • Click edge to delete

Variable Syntax

{{node_alias.field}}
{{node_alias.nested.field}}
{{node_alias.array[0].field}}

Workflow States

  • Draft - Not activated, testing only
  • Active - Live, receiving triggers
  • Inactive - Paused, not executing

Keyboard Shortcuts

KeyAction
DeleteRemove selected node
Ctrl/Cmd + SSave workflow
Ctrl/Cmd + ZUndo
Space + DragPan canvas
ScrollZoom in/out