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

# Pipeline stages

> Set up your sales pipeline, move contacts through its stages, and use stages to target broadcasts.

A pipeline stage is a label you define and control — where a contact sits in your own sales
process. Every workspace starts with three stages: **Lead**, **Engaged** and **Customer**.
You can rename them, add your own, reorder them, and give each one a colour.

<Note>
  **A stage is not a lifecycle stage.** Two of the default stages happen to be called
  **Lead** and **Customer**, but they have nothing to do with the **Leads / Clients**
  lifecycle on the contacts list. Nothing syncs the two. Moving a contact into the
  **Customer** stage does not make them a client, and converting a contact to a client does
  not move them along your pipeline. See [Contacts overview](/contacts/overview) for the
  lifecycle side.
</Note>

## Set up your stages

Stages are configured on the pipeline itself, not in Settings.

<Steps>
  <Step title="Open the pipeline">
    Go to **Contacts** and switch to **Pipeline View**. Each stage is a column.
  </Step>

  <Step title="Add the stages you use">
    Select **Add stage**, give it a **Stage name**, and pick a colour. Add as many as your
    process needs — a clinic might use **Enquiry → Consultation booked → Treating**, a salon
    **New → Booked → Regular**.
  </Step>

  <Step title="Rename, recolour and reorder">
    Edit any stage in place to change its name or colour, and reorder the columns so they
    read left to right in the order your work actually happens.
  </Step>

  <Step title="Remove what you don't use">
    **Delete stage** removes the column. The contacts in it are not deleted — they move to
    **No Stage**, which is where every contact starts until you place them.
  </Step>
</Steps>

## Move contacts through the pipeline

There are several ways a contact gets a stage.

<Columns cols={2}>
  <Card title="Drag on the pipeline" icon="hand-pointer">
    On **Pipeline View**, drag a contact card from one column to another. This is the fast
    way to work a list.
  </Card>

  <Card title="From the contact" icon="user">
    Open a contact and use **Pipeline stage** to pick a stage. Useful when you're already
    reading the conversation history.
  </Card>

  <Card title="When you add or edit a contact" icon="user-pen">
    The new contact and edit contact form has a **Stage** select, reachable from **List
    View** and from a pipeline card's edit action.
  </Card>

  <Card title="On CSV import" icon="file-csv">
    The importer's `stage` column matches an existing stage **by name**. See
    [Import contacts from CSV](/contacts/import-csv).
  </Card>

  <Card title="From an automation" icon="robot">
    The **Update Contact Stage** flow node moves a contact when they reach that step, and an
    AI node can be given the **Move CRM stage** tool. See [Automations](/automation/overview).
  </Card>

  <Card title="Over the API" icon="code">
    `PUT /api/v1/contacts/{contact}/stage` sets it programmatically, and behaves exactly
    like a change made in the app.
  </Card>
</Columns>

<Warning>
  A stage name in a CSV must match one of your stages **exactly**. A name that doesn't match
  is not created and is not reported — the contact simply imports with no stage. Check your
  stage names before a large import.
</Warning>

<Accordion title="Only some of my contacts appear on the pipeline">
  The pipeline board shows at most 300 contacts and has no pages. If your workspace has more
  than that, the board silently shows the 300 most recently added contacts. Nothing is lost — the
  missing contacts are still on **List View**, where you can filter by **Stage** and page
  through everything. Use the pipeline as a working board, not as a full contact list.
</Accordion>

## How stages are used elsewhere

Stages are a filter, and that is their real value.

* **Segments.** A segment can require a **Contact stage**. A segment is a saved filter, not a
  fixed list, so it is re-evaluated every time it runs — move a contact into a stage today
  and they are in that segment's next broadcast without you touching the audience. See
  [Tags and segments](/contacts/tags-and-segments) and
  [Broadcast audiences](/broadcasts/audiences).
* **The contacts list.** Filter by **Stage** on **List View**, including **No stage**, to
  find everyone you haven't placed yet.
* **Webhooks.** A stage change made by dragging on the pipeline, by the **Pipeline stage**
  picker on a contact, or via the stage API endpoint sends a `contact.stage_changed` event
  carrying both the new stage and the previous one, so an external system can react to it.
  A stage set on the contact form, or by sending a `stage` field to the general contact
  update endpoint, sends a `contact.updated` event instead. A stage set by the **Update
  Contact Stage** flow node or the AI **Move CRM stage** tool sends no webhook at all. See
  [Webhooks](/api-reference/webhooks).

<Tip>
  The most reliable way to make a pipeline do work for you is to pair it with a segment: a
  stage says where someone is, and a segment turns that into a WhatsApp broadcast audience
  you never have to rebuild.
</Tip>

## Related

<Columns cols={2}>
  <Card title="Tags and segments" icon="tags" href="/contacts/tags-and-segments">
    Turn a stage into a reusable broadcast audience.
  </Card>

  <Card title="Contacts overview" icon="address-book" href="/contacts/overview">
    How the lifecycle axis differs from your pipeline.
  </Card>

  <Card title="Import contacts from CSV" icon="file-csv" href="/contacts/import-csv">
    Bring contacts in with a stage already set.
  </Card>

  <Card title="Automations" icon="robot" href="/automation/overview">
    Flows, triggers and what they can act on.
  </Card>
</Columns>
