Workflows

Last updated: March 2026

Automate business processes with a visual node-based workflow builder. Workflows react to data changes, execute multi-step logic, generate documents, send emails, and integrate with external services - all without writing code.

What Are Workflows

Workflows are automated sequences of actions that run in response to data events or manual triggers. Each workflow belongs to a specific Entity and operates on its entries. When a trigger fires - for example, a new contact is created or an order is updated - the workflow engine walks through a directed graph of nodes, executing each step in order.

The workflow builder uses a visual canvas powered by React Flow. You drag nodes onto the canvas, connect them with edges, and configure each node through a side panel. The result is a clear, readable map of your business logic that anyone on the team can understand and maintain.

Workflows support branching with conditional logic, looping over lists, querying and mutating data across entities, generating PDF documents from templates, sending emails, and making HTTP requests to external APIs. Every execution is logged with per-node timing and input/output snapshots, giving you full visibility into what happened and why.

Tip

Each workflow has an active/inactive toggle. Deactivate a workflow to pause it without deleting its configuration - useful during testing or when you need to temporarily stop automation.

Building a Workflow

Creating a workflow involves choosing a trigger, adding nodes to the canvas, connecting them with edges, and configuring each node. Follow these steps to build your first workflow.

1

Create a new workflow

Navigate to Designer > Entities, select the entity you want to automate, and open the Workflows tab. Click "New Workflow" and give it a descriptive name (e.g., "Send welcome email on contact creation").

2

Choose a trigger

Every workflow starts with a Trigger node. Select the trigger type that determines when the workflow runs: BEFORE_CREATE, AFTER_CREATE, BEFORE_UPDATE, AFTER_UPDATE, BEFORE_DELETE, AFTER_DELETE, or MANUAL. You can optionally scope the trigger to a specific application using the triggerAppContext setting.

3

Add nodes to the canvas

Right-click the canvas or use the toolbar to open the node palette. Nodes are organized by category: Control Flow, Data Manipulation, Entity Operations, Generation, External, and Utility. Drag nodes onto the canvas to add them.

4

Connect nodes with edges

Drag from an output handle on one node to an input handle on another to create a connection. Edges define the execution order. For conditional nodes like If Condition, you get separate output handles for the "true" and "false" branches. Edges are deletable - click an edge and press Delete to remove it.

5

Configure each node

Click a node to open its configuration panel. Each node type has specific settings - for example, Set Field requires a field name and value expression, while Send Email requires a template selection and recipient. Use the expression input to reference dynamic values from earlier nodes or the trigger entry.

6

Set workflow options

Open the workflow settings to configure stopOnError (halt the workflow if any node fails) and timeout (maximum execution time in milliseconds). Set the workflow order to control execution priority when multiple workflows share the same trigger.

7

Activate the workflow

Toggle the workflow to "Active" to enable it. Inactive workflows are saved but will not fire on trigger events. You can test the workflow with sample data before activating it in production.

Tip

Use the code editor view (toggle in the toolbar) to inspect or edit the raw workflow definition as JSON. This is useful for copying workflows between entities or making bulk edits to node configurations.

Triggers Reference

The trigger determines when a workflow executes. "Before" triggers run synchronously before the database operation commits, allowing you to validate or transform data before it is saved. "After" triggers run asynchronously after the operation has completed, making them ideal for side effects like sending notifications or syncing external systems. Manual triggers run only when explicitly invoked by a user or API call.

You can further narrow when a trigger fires by setting a triggerAppContext. When configured, the workflow only executes if the data operation originated from the specified application, letting you apply different automation rules depending on where the action took place.

TriggerTimingUse Cases
BEFORE_CREATEBefore a new entry is savedValidate required fields, auto-fill defaults, enforce naming conventions, generate sequential codes
BEFORE_UPDATEBefore an existing entry is savedValidate transitions (e.g., status changes), prevent unauthorized field edits, compute derived values
AFTER_CREATEAfter a new entry is committedSend welcome emails, create related entries, notify team channels, sync to external CRM
AFTER_UPDATEAfter an existing entry is committedTrigger follow-up tasks, update dashboards, send change notifications, recalculate aggregates
BEFORE_DELETEBefore an entry is removedCheck for dependent records, archive data before deletion, enforce delete restrictions
AFTER_DELETEAfter an entry is removedClean up related data, notify stakeholders, update counters, sync deletion to external systems
MANUALOn-demand via user action or APIBulk operations, data migration, on-demand report generation, ad-hoc email campaigns
Warning

BEFORE triggers block the save operation until the workflow completes. Keep them fast and focused on validation or transformation. Long-running work like HTTP requests or PDF generation should use AFTER triggers instead.

Node Types Reference

Nodes are the building blocks of a workflow. Each node performs a specific action and passes its output to the next connected node. Nodes are organized into six categories based on their function.

CategoryNodeDescription
Control FlowTriggerThe starting point of every workflow. Defines the event that initiates execution and provides the entry data to downstream nodes.
Control FlowIf ConditionEvaluates a condition and branches execution into "true" and "false" paths. Supports compound conditions with AND/OR logic and a full set of comparison operators.
Control FlowStopHalts workflow execution immediately. Use after a failed validation in a BEFORE trigger to prevent the save, or to exit early from a branch.
Control FlowLoopIterates over a list (e.g., query results or a multi-select field) and executes connected nodes once per item. The current item is available as a variable inside the loop body.
Data ManipulationSet FieldSets a single field value on the current entry or a variable. Accepts static values or dynamic expressions referencing other fields and node outputs.
Data ManipulationCalculateEvaluates a mathematical or string expression and stores the result in a variable. Supports arithmetic operators, string concatenation, and built-in functions.
Data ManipulationTransformModifies multiple fields on the current entry in a single step. Useful for bulk transformations like normalizing data formats or computing several derived fields at once.
Entity OperationsCreate EntryCreates a new entry in any entity. Map fields using static values or expressions. Returns the created entry so subsequent nodes can reference its ID and fields.
Entity OperationsUpdate EntryUpdates an existing entry in any entity by ID. Specify which fields to change using expressions. Only the provided fields are modified; others are left untouched.
Entity OperationsQuery EntriesRetrieves entries from any entity using filter conditions. Returns a list of matching entries that can be passed to a Loop node or used in expressions.
Entity OperationsDelete EntryDeletes an entry from any entity by ID. Use with caution - combine with a Query node and conditions to target the correct records.
GenerationGenerate PDFGenerates a PDF document from a pre-configured PDF template. The template receives the current entry data and any additional variables you provide. The generated file is attached to the entry or stored in the media library.
GenerationSend EmailSends an email using an email template. Supports two modes: SEND (delivers the email immediately and automatically) and REVIEW (creates a draft in the mail inbox for manual review before sending). Recipients, subject, and body are populated from the template with dynamic data substitution.
ExternalHTTP RequestMakes an HTTP request to an external API. Configure the method (GET, POST, PUT, PATCH, DELETE), URL, headers, and body. The response is available to downstream nodes for further processing.
UtilityLogWrites a debug message to the execution log. Accepts an expression so you can log variable values, entry fields, or node outputs. Useful during development and troubleshooting.
Note

Nodes can be rearranged freely on the canvas - their position is visual only. Execution order is determined entirely by edge connections, starting from the Trigger node.

Conditions & Branching

The If Condition node is the primary tool for branching logic. It evaluates one or more conditions against entry fields, variables, or node outputs and routes execution down the "true" or "false" path accordingly.

Each condition consists of three parts: a left operand (the field or expression to evaluate), an operator, and a right operand (the comparison value). Multiple conditions can be combined using AND logic (all conditions must be true) or OR logic (at least one condition must be true).

You can nest branching by chaining multiple If Condition nodes in sequence, creating complex decision trees. For example, you might first check if a deal status changed to "Won", then branch again based on the deal value to apply different follow-up workflows.

OperatorDescriptionExample
equalsExact match (case-sensitive)status equals "active"
not_equalsNot an exact matchrole not_equals "admin"
containsString includes substringemail contains "@company.com"
not_containsString does not include substringname not_contains "test"
starts_withString begins with valuecode starts_with "INV-"
ends_withString ends with valuefilename ends_with ".pdf"
greater_thanNumeric greater thanamount greater_than 1000
greater_than_or_equalNumeric greater than or equalquantity greater_than_or_equal 1
less_thanNumeric less thandiscount less_than 50
less_than_or_equalNumeric less than or equalage less_than_or_equal 65
inValue is in a listcountry in ["FR","DE","ES"]
not_inValue is not in a liststatus not_in ["archived","deleted"]
existsField has a non-null valueassignee exists
not_existsField is null or undefinedcompletedAt not_exists
is_emptyField is empty string or empty arraytags is_empty
is_not_emptyField has contentdescription is_not_empty
Tip

Use the "exists" and "not_exists" operators to guard against null values before performing comparisons. This prevents unexpected behavior when optional fields are not set.

Testing & Debugging

Webooto provides several tools to help you test workflows before they run in production and debug issues when they arise.

The test workflow feature lets you run a workflow with sample data without triggering it from an actual data event. You provide a mock entry payload, and the engine executes the full node graph, reporting the result of each step. This is the safest way to verify your logic before activating a workflow.

The debug overlay displays execution trace information directly on the canvas. After a test run or a real execution, each node shows its status (success, failure, or skipped), execution time, and a summary of its input and output data. This visual feedback makes it easy to identify exactly where a workflow diverged from your expectations.

For advanced users, the code editor view shows the raw workflow definition. You can inspect node configurations, expression syntax, and edge connections in a structured format. This is particularly helpful when troubleshooting complex expressions or when you need to compare two workflow versions.

1

Open the test runner

In the workflow builder toolbar, click the "Test" button. A panel opens where you can provide sample entry data in JSON format or select an existing entry from the entity.

2

Run the test

Click "Run" to execute the workflow with your sample data. The engine processes each node in order and collects execution traces. The canvas updates in real time to show progress.

3

Review the debug overlay

After execution, each node on the canvas displays a status badge. Click any node to see its detailed trace: input data, output data, execution duration, and any error messages. Green indicates success, red indicates failure, and gray indicates the node was skipped.

4

Fix and re-run

If a node failed, update its configuration and run the test again. You do not need to deactivate or save the workflow between test runs - the test runner always uses the current canvas state.

Note

Test executions are recorded in the execution history just like real runs, but they are tagged as "test" so you can distinguish them from production executions.

Execution History & Analytics

Every workflow execution is recorded with a comprehensive trace. The execution history gives you a chronological log of all runs for a workflow, including the trigger event, the entry that was processed, the overall result, and detailed per-node traces.

Each execution record includes per-node information: the status of each node (success, failure, or skipped), its execution time in milliseconds, and snapshots of the input and output data at that step. This level of detail lets you reconstruct exactly what happened during any run, making root-cause analysis straightforward.

The analytics dashboard provides aggregate statistics across all executions of a workflow. At a glance, you can see the total number of executions, the count of successes and failures, the overall success rate, the average execution time, and the number of executions in the last 24 hours. Use these metrics to identify unreliable workflows, spot performance regressions, and track automation ROI.

When a workflow execution fails, you can replay it directly from the execution log. The replay feature re-runs the workflow using the original trigger data and entry state, which is invaluable for transient errors like temporary API outages or rate-limit hits.

MetricDescription
Total executionsThe cumulative number of times the workflow has run since creation.
Success countThe number of executions that completed all nodes without errors.
Failure countThe number of executions where at least one node encountered an error.
Success rateThe percentage of executions that completed successfully (successes / total).
Avg execution timeThe mean duration across all executions, measured in milliseconds.
Recent 24h countThe number of executions that occurred in the last 24 hours.
Tip

Set up a monitoring workflow that queries the execution stats of your critical workflows and sends an alert email when the success rate drops below a threshold.