> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cortado.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflows

> Automate follow-ups, tasks, and record updates when leads, quotes, invoices, and events change

## Workflows Overview

Workflows are automations you build once and let Cortado run for you — a follow-up email when a quote sits unopened, a task when a new lead arrives, a reminder a few days before a quote expires.

When workflows are enabled for your organization, **Workflows** appears in the main sidebar. That page has two tabs:

* **Active runs** — automations currently in flight across the organization. You can stop a run from here.
* **Workflows** — every definition you have, filterable by All, Active, or Inactive. Turn a workflow on or off, open it to edit, or start a new one.

<Note>
  Workflows are available when they're enabled for your organization. If you don't see the sidebar item, ask your admin. Building, editing, and retrying workflows also requires the **Automations** permission on your role — see [Staff](/guides/staff).
</Note>

## Creating a Workflow

From the **Workflows** tab, click **New workflow** (or install one from the template gallery). The editor is a canvas: one trigger starts the flow, then you add steps from the palette.

<Steps>
  <Step title="Name the workflow">
    A name is required before you can publish. Name it for the outcome ("Quote expiry reminder") rather than the trigger.
  </Step>

  <Step title="Choose a trigger">
    Pick the record type, then the event that starts the run. See [Triggers](#triggers).
  </Step>

  <Step title="Add steps">
    Drag blocks onto the canvas — wait, branch, send an email, create a task, update a field, or stop. See [Steps you can add](#steps-you-can-add).
  </Step>

  <Step title="Publish">
    Cortado checks the setup before it goes live and blocks publish with a clear message if something is unfinished (a missing name, an empty email, an incomplete branch).
  </Step>
</Steps>

You can start from a **template** instead of a blank canvas. The gallery installs a ready-made automation — **Post-quote follow-up**, **Stale lead re-engagement**, **Overdue payment reminder**, or **Final reminders before quote expires** — that you then edit to match your voice.

## Triggers

A workflow starts when something happens on a record. The trigger picker is two steps: choose the record type, then the event.

Leads are labeled **Lead** throughout the builder (not "Inquiry").

Common triggers include:

| Record      | When it fires                                                  |
| ----------- | -------------------------------------------------------------- |
| **Lead**    | Created, or moved to a different pipeline stage                |
| **Quote**   | Sent, accepted, expired, or expiring soon                      |
| **Invoice** | Overdue                                                        |
| **Payment** | Received                                                       |
| **Contact** | Created                                                        |
| **Booking** | Created (including when a quote is accepted), or stage changed |
| **Event**   | Created                                                        |

**Quote expiring soon** is the one trigger that needs a lead time: how many days before the expiration date to run (1–90, default 3). Every other trigger fires at the moment the event happens.

You can also add **entry conditions** on the trigger so the workflow only starts when a field matches — for example, only wedding leads, or only quotes above a certain total. Branch steps later in the flow can check a field on a related record too (a quote workflow branching on the lead it came from).

## Steps You Can Add

The palette groups blocks into Flow, Communication, and Records.

### Flow

* **Wait** — pause minutes, hours, days, or weeks before the next step.
* **Branch** — split into two paths based on a condition on the live record.
* **Switch** — route one field through several named paths.
* **Stop** — end this path.

### Communication

* **Send email** — email someone on the record. Choose a **saved template** (its subject and body are used as-is; edit the template if you need different copy) or write the message in the step. You pick who it goes to (for example, the contact email), plus optional CC, BCC, and a fallback address if that field is empty.
* **Send webhook** — POST a signed JSON event to an endpoint you registered under **Settings > Integrations > Webhooks**. Pick the endpoint on the step; the URL and signing secret stay on the endpoint. Failed deliveries are retried; if the other system rejects the request, the step fails. See [Webhooks](/guides/integrations/webhooks).

Paragraph breaks and signature line breaks in a Send email step are preserved in the email the customer receives — a name, title, and business on separate lines stay stacked instead of collapsing into one run-on paragraph. Saved templates already use the rich editor and keep their formatting.

### Records

* **Create task** — a follow-up assigned to a teammate (or left unassigned).
* **Update field** — set a field on the triggering record (stage, event type, tags, and similar).

<Tip>
  Write emails you'd be happy to receive. A short, specific follow-up with a clear next step outperforms a long template that tries to cover every case.
</Tip>

## Watching Runs

Open **Workflows > Active runs** to see what's in flight. Each workflow also has its own run history, including a **Cancelled** view for runs you stopped or that got stuck and were cleared.

* Turning a workflow **off** immediately cancels its pending runs.
* Failed or incomplete runs can be retried from history.
* Manual runs are badged so you can tell them apart from trigger-fired ones.

## Running a Workflow Yourself

A **Run Workflow** action on lead, event, quote, invoice, and contact pages starts an eligible, enabled workflow against that record immediately — you don't wait for the lifecycle trigger to match.

* Only workflows whose trigger type matches the record are listed (a lead page shows lead-triggered workflows).
* Manual runs **skip the trigger's conditions** — the dialog warns you, because the workflow executes even if those filters wouldn't normally match.
* If this same workflow is already running for that record, Cortado refuses a second start until it finishes.
* The action is hidden when workflows aren't enabled for the organization. It's visible but disabled if your role doesn't include **Automations** manage access.

## Best Practices

1. **Start from a template** — install a gallery workflow, send a test to yourself, then edit copy and timing.
2. **Name for the outcome** — "Final reminder before quote expires" is easier to find in run history than "Quote workflow 3".
3. **Keep Send email steps short** — one ask, one link, a signature with line breaks. Preview a run before you turn the workflow on for everyone.
4. **Use Quote expiring soon instead of guessing** — set the lead time (for example, 3 days) rather than a long Wait after Quote sent.
5. **Prefer conditions on the trigger** — filter at the start so you don't send a nurture sequence to a lead who already booked.
6. **Turn it off when you're iterating** — disabling a workflow cancels pending runs immediately, so a half-edited reminder doesn't go out overnight.

<CardGroup cols={2}>
  <Card title="Settings" icon="gear" href="/guides/settings">
    Where organization defaults and permissions live.
  </Card>

  <Card title="Staff" icon="users" href="/guides/staff">
    The Automations permission that controls who can build and run workflows.
  </Card>

  <Card title="Quotes" icon="file-invoice" href="/guides/quotes">
    Quote validity and sending — common workflow triggers.
  </Card>

  <Card title="Compose Emails" icon="envelope" href="/guides/compose-emails">
    One-off emails when an automation isn't the right tool.
  </Card>

  <Card title="Webhooks" icon="webhook" href="/guides/integrations/webhooks">
    Register endpoints for the Send webhook step.
  </Card>
</CardGroup>
