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

# Flows Overview

> Tables for structured data, Workflows for orchestration — together, the automation core of Connie.

## What are Flows?

**Flows** is Connie's product name for the combined Tables + Workflows system. Tables hold your structured data; Workflows orchestrate logic and AI on top of that data. Together they let you build anything from a one-off enrichment pipeline to a long-running multi-agent system — without writing infrastructure code.

If you've used Airtable or Notion databases, Tables will feel familiar. If you've used n8n, Zapier, or LangGraph, Workflows will feel familiar. Connie folds both into one product so you don't have to wire two systems together.

***

## Tables

A **Table** is a typed grid of rows. Columns are called **properties**; rows are called **items**.

<CardGroup cols={2}>
  <Card title="Typed columns" icon="table-columns">
    Text, number, select, date, relation, formula, JSON, and more. Each property has a type that determines how cells render and validate.
  </Card>

  <Card title="Filtering & sorting" icon="filter">
    Client-side filters, sorts, column visibility, and pagination powered by TanStack Table. Save filter sets as views.
  </Card>

  <Card title="Relations" icon="link">
    Link rows across tables — a contact belongs to a company, a deal belongs to an account. Relations render as clickable chips.
  </Card>

  <Card title="Formulas" icon="calculator">
    `prop("Column Name")`-style expressions with math, string, and logic operators. Includes an **AI formula assistant** that writes formulas from a prompt.
  </Card>
</CardGroup>

### Importing data

Tables ship with first-class importers:

* **CSV upload** — drag-and-drop with auto-detected column types, a mapping step, and dedup modes (skip / overwrite / allow duplicates)
* **Apollo** — pull contacts directly from an Apollo search
* **Pipe0** — connect a Pipe0 pipeline as a source
* **People** — bring Apollo contacts into a Contacts-shaped table

### Transforms

Once data is in, the column menu surfaces transforms that would normally require SQL:

* **Text to columns** — split a single column into multiple by delimiter
* **Split name** — turn `Full Name` into `first_name` + `last_name`
* **Run formula** — evaluate a formula across the whole column
* **Duplicate column** — copy a property with all its data
* **Bulk delete / bulk duplicate / bulk empty** — apply across thousands of rows

***

## Workflows

A **Workflow** is a directed acyclic graph (DAG) of nodes. You build it visually in the Flow Builder — drag nodes onto a canvas, wire them with edges, configure each node inline.

### Node types

| Type | Examples |
| - | - |
| **Triggers** | Manual, cron, webhook, table-row-created, table-row-updated |
| **AI nodes** | LLM call, agent (multi-turn tool use), AI analyzer |
| **Actions** | Send email, HTTP call, write to table, send notification |
| **Branching** | Decision, router (route by condition to one of N paths) |
| **Loops** | Repeat over a list, with parallel or sequential execution |
| **Sub-agents** | Spawn another workflow as a node — compose flows from flows |
| **Tools** | Any tool from the Tools module — Slack, GitHub, Linear, Stripe, custom |

***

## Triggers

Three ways a workflow starts:

1. **Manual** — hit the **Run** button in the Flow Builder
2. **Scheduled** — cron expression on a trigger node, evaluated server-side
3. **Data event** — when a row is created or updated in a watched table, Supabase Realtime fires the workflow with the row payload

Triggers are **disarmable** without deletion — flip the `is_trigger_enabled` toggle to pause a flow while you debug it, then re-enable.

***

## The Flow Builder

The builder is a Reactflow-powered visual editor:

* **Drag-drop nodes** from the side panel onto the canvas
* **Inline config** — click a node, edit its inputs in a side panel
* **Live test** — run a single node with mocked input to verify its config before wiring it in
* **Live execution status** — when the workflow runs, each node lights up (`running` / `completed` / `error`) in real time as state streams via Supabase Realtime

***

## Live runs

When a workflow runs — whether triggered manually, by data, or by a schedule — its state streams back to every open tab.

* Per-node status badges update as nodes start and finish
* Run history is browsable: pick any past run and replay its state, inputs, and outputs node-by-node

Everything is broadcast over Supabase Realtime, so multiple teammates can watch the same run unfold simultaneously.

***

## Tables ↔ Workflows

The two halves connect at the trigger and write layers:

* **Data triggers** — `table_row_created` / `table_row_updated` triggers fire a workflow when rows change. Used for "on add, enrich" or "on update, sync to CRM"-style automations.
* **Write-back** — the `spreadsheet_write` node persists a row back into a table. Closes the loop on enrichment, scoring, and tagging flows.
* **Query nodes** — read rows from a table mid-flow to make routing decisions or feed AI nodes.

***

## Common workflows

### Enrich every new contact

1. Add a workflow with a `table_row_created` trigger watching the Contacts table
2. Add a LinkedIn-enrich node, wired from the trigger
3. Add a `spreadsheet_write` node to update the row with enriched fields
4. Save and arm — every new contact gets enriched within seconds

### Outbound sequence

1. Build a list table with one row per prospect
2. Create a workflow with a manual trigger that iterates over the list
3. Per-prospect: draft a personalised email with an LLM node, send it via an email action, wait N days, send a follow-up
4. Run once — Connie processes the whole list in parallel batches

### Inbound triage

1. Build a workflow with a `table_row_created` trigger watching your Inbox messages table
2. Add a router node that classifies inbound messages by content
3. Branch into per-category sub-flows — `sales`, `support`, `partnerships` — each handling its own response or routing logic

***

## API reference

<CardGroup cols={2}>
  <Card title="Tables" icon="table" href="/api-reference/tables/list-tables">
    CRUD tables, properties, items, and cells.
  </Card>

  <Card title="Workflows" icon="diagram-project" href="/api-reference/workflows/list-workflows">
    Create, run, and inspect workflow definitions.
  </Card>

  <Card title="Workflow Builder" icon="wand-magic-sparkles" href="/api-reference/workflow-builder/configure-node">
    Configure and test individual nodes from your own client.
  </Card>

  <Card title="Jobs" icon="bolt" href="/api-reference/jobs/list-jobs">
    Inspect and manage workflow runs.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.