Workflows

Automate repetitive actions across customers, jobs, leads, and tasks with trigger-condition-action workflows.

Overview

Workflows let you define automated rules that run when something happens in Forz. Each workflow follows a When-If-Then structure: a trigger fires (When), optional conditions filter whether it applies (If), and one or more actions execute (Then). Use workflows to send SMS or email notifications, create tasks, apply labels, update statuses, set field values, or fire webhooks — without manual intervention.

Workflows apply to four record types: Customer, Job, Lead, and Task.

Before You Begin

Prerequisites:

  1. The Workflow module is enabled (Settings > Modules).

  2. You have the Workflows: Create permission on your role.

  3. For SMS actions: an SMS credential is configured (Settings > Integrations).

  4. For webhook actions: at least one webhook endpoint is configured (Settings > Webhooks).

Creating a Workflow

Name and Save the Workflow

  1. Navigate to Settings > Workflows.

  1. Click the + New button. A dialog opens.

  1. Enter a Name for the workflow (e.g., "Notify tech on job completion").

  1. Optionally enter a Description to explain what the workflow does.

  2. Click Save.

Expected result: Forz creates the workflow in an inactive state and opens the workflow builder where you add steps.

Add a trigger (When)

The first step in every workflow is a trigger — the event that starts the workflow.

  1. Click Add Step in the workflow builder. The available trigger types appear.

  2. Select a trigger type:

    • Record Created — fires when a new record is created.

    • Record Updated — fires when an existing record is updated.

    • Manual Trigger — fires only when a user runs the workflow by hand. You must select which Roles can trigger it.

  3. Select the Model the trigger applies to: Customer, Job, Lead, or Task.

  4. Click Save.

Expected result: The trigger step appears at position 1 in the workflow builder with a "When" label.

Add a condition (If) — optional

Conditions narrow when the workflow runs. You can add conditions only after the trigger is set (except for manual triggers, which skip conditions).

  1. Click Add Step below the trigger. The available condition types appear.

  2. Select a condition type:

    • Record field changes — fires if any of the selected fields changed during the update.

    • Record field changes to a specific value — fires if a specific field changed to a value matching your operator (Equal to, Not Equal to, Contains, Does not contain).

    • Record field has a specific value — fires if a field currently holds a specific value, regardless of whether it changed.

    • Job Status Changes — fires if the job status changed from one status to another (or from "Any Status"). Only available when the model is Job.

    • Customer Status Changes — only available when the model is Customer.

    • Lead Status Changes — only available when the model is Lead.

    • Task Status Changes — only available when the model is Task.

  3. Configure the condition fields and click Save.

Expected result: The condition step appears with an "If" label between the trigger and any actions.

Add an action (Then)

Actions are what the workflow performs when conditions are met.

  1. Click Add Step below the last step. The available action types appear.

  2. Select an action type and configure it:

Action

What it does

Required fields

Send SMS

Sends a text message via your configured SMS provider.

Credential, From number, To number, Message

Send Email

Sends an email notification.

Subject, To address, Message

Create Job Task

Creates a new task on the job.

Title (Description and Assignee are optional)

Add Labels

Applies one or more labels to the record.

At least one label

Set Field Value

Writes a value to a specific field on the record.

Field, Value

Update Status

Changes the record's status.

Status

Send Webhook

Fires a POST request to a configured webhook endpoint.

Webhook

  1. Click Save.

Expected result: The action step appears with a "Then" label. You can add multiple action steps to a single workflow.

Activating and Deactivating a Workflow

Workflows are inactive by default after creation. An inactive workflow never fires.

  1. Open the workflow from Settings > Workflows.

  2. Click the toggle to switch the workflow between active and inactive.

Expected result: The workflow's active state changes immediately. Active workflows appear at the top of the list; inactive workflows appear below.

Warning: Activating a workflow with a "Record Created" or "Record Updated" trigger means it runs on every qualifying event going forward. Test your workflow logic before activating in a production account.

Editing a Workflow

  1. Navigate to Settings > Workflows.

  2. Click the workflow name to open it.

  3. Click a step to select it and modify its settings.

  4. Click Save after making changes.

Expected result: The step configuration updates. If the workflow is active, changes take effect on the next trigger event.

Deleting a Workflow

  1. Navigate to Settings > Workflows.

  2. Open the workflow you want to remove.

  3. Click Delete.

Expected result: The workflow moves to the trash bin and stops running. Deleted workflows can be restored from the trash bin.

What Happens After a Workflow Runs

When a trigger fires and conditions pass, Forz executes each action step in order:

  • SMS and Email actions — the message is queued and sent. Delivery depends on your SMS credential and email configuration.

  • Create Job Task — a new task appears on the job's task list with the configured title, description, and assignee.

  • Add Labels — labels are appended to the record (existing labels are not removed).

  • Set Field Value — the field is overwritten with the new value.

  • Update Status — the record's status changes, which may trigger other workflows.

  • Send Webhook — Forz sends a POST request to the configured endpoint with the record data.

Warning: An "Update Status" action can trigger another workflow that watches for status changes. Design your workflows carefully to avoid infinite loops.

Common Scenarios

Notifying a technician when a job is assigned

A plumbing company wants to send an SMS to the assigned technician whenever a job is scheduled.

  1. Create a workflow named "SMS tech on scheduling."

  2. Add a Record Updated trigger on the Job model.

  3. Add a Job Status Changes condition with "From: Unscheduled" and "To: Scheduled."

  4. Add a Send SMS action with the technician's phone number and a message like "New job assigned: {{title}}."

  5. Activate the workflow.

Auto-labeling new leads by source

A fire safety company wants to tag every new lead with a "Website" label when it comes in.

  1. Create a workflow named "Label website leads."

  2. Add a Record Created trigger on the Lead model.

  3. Add a Record field has a specific value condition checking the source field equals "Website."

  4. Add an Add Labels action selecting the "Website" label.

  5. Activate the workflow.

Creating follow-up tasks on job completion

An HVAC service company wants a follow-up task created every time a maintenance job is completed.

  1. Create a workflow named "Follow-up after maintenance."

  2. Add a Record Updated trigger on the Job model.

  3. Add a Job Status Changes condition with "From: Any Status" and "To: Complete."

  4. Add a Create Job Task action with title "Schedule 6-month follow-up" and assign it to the account manager.

  5. Activate the workflow.

Troubleshooting

Problem

Solution

Workflow does not fire when a record is updated.

Confirm the workflow is set to Active. Check that the trigger model matches the record type and the conditions match the actual field values.

"Send SMS" action fails silently.

Verify the SMS credential is configured and active in Settings > Integrations. Confirm the "From" number is a valid sender on your SMS provider.

Workflow runs but the action does not produce the expected result.

Open the workflow and verify each step's configuration. For "Set Field Value" actions, confirm the field name matches the record's available fields.