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

# Contact → Pipeline

> Automatically create or update Pipeline records from Contact data in your automation workflows.

# Contact → Pipeline

Turns Contact information into Pipeline progress. Use the **Contact → Pipeline** action to take data already stored on the contact — name, phone, labels, custom fields, source — and create or update a record in the right pipeline and stage in a single automation run.

<Info>
  Contact and Pipeline are **Automation concepts**, not standalone pages. You configure the Contact → Pipeline action inside the Automation builder as a step of a workflow.
</Info>

## What each part does

### Contact

**Contact** is the source. It is the customer record that triggered the automation — either an existing contact or one created during the flow.

A Contact carries the data your workflow can use:

* **Identity** — name, phone number, email
* **Labels** — segments such as `Hot Lead`, `VIP`, `Support`
* **Custom fields** — values collected via ask nodes, WhatsApp Flows, or imports (e.g., `city`, `requirement`, `budget`, `priority`)
* **Source & assignment** — channel source, assigned teammate, status
* **Trigger context** — the [Event](/workspace/events/overview) that started the run (e.g., Flow submitted, inbound message)

The workflow does not need to ask for this data again — it is already available as variables in the builder.

### Pipeline

The **Pipeline** action creates or updates a record in the chosen Pipeline and places it in the specified stage.

It takes:

* **Pipeline** — which pipeline to update (e.g., *Leads*, *Sales*, *Support*)
* **Stage** — which stage to place the record in (e.g., *New*, *Qualified*)
* **Field mapping** — which Contact fields to store on the pipeline record (e.g., Title = `{{contact.name}}`, City = `{{contact.customFields.city}}`)
* **Identity binding** — which contact the pipeline record belongs to (usually the triggering contact: "current contact")

After the action runs, the record appears in the selected stage, history is recorded (who/what moved it and when), and any stage-change Events are logged.

### How they connect

```
Incoming customer information
  (message, ask-node answer, WhatsApp Flow, webhook, import, custom field update)
        ↓
Contact — data is stored on the contact record (labels, custom fields)
        ↓
Pipeline action — create/update record in target pipeline & stage using contact fields
        ↓
Updated pipeline record — visible in Pipelines, with history and context
```

The Contact provides the **data**; the Pipeline action performs the **business move**. Keep them as sequential steps in the same workflow — collect or confirm contact data first, then map it into the pipeline.

## When to use Contact → Pipeline

* **Lead qualification:** when a contact has `city` and `requirement` filled, create a record in `Leads → Qualified` with those fields mapped.
* **Support triage:** when a contact is labeled `Urgent`, move it into `Support → In Progress` and map `issue_type` and `priority`.
* **Booking follow-up:** after collecting `preferred time` on the contact, push into `Bookings → Pending Confirmation`.
* **Campaign follow-up:** when a contact clicks or replies, move them from `Leads → New` to `Leads → Contacted` without asking for data again.

If you only need to update a contact field without tracking stage progress, you don't need a Pipeline — use a field update. Use Pipeline when you need to see **where** the contact is in your process.

## How to use Contact → Pipeline

<Steps>
  <Step title="Open Automation and choose the workflow">
    Go to **Workspace → Automation**. Either create a new workflow (**Create a Workflow**) or open an existing one. Confirm you are in the correct channel context (see [Channels](/workspace/channels)) before editing.
  </Step>

  <Step title="Set the trigger">
    Choose the Event that should start this flow — e.g., *Contact created*, *Custom field updated*, *Inbound message*, *WhatsApp Flow submitted*, or *Webhook received*. The trigger determines which Contact data will be available. See [Select a Trigger](/workspace/automation/select-a-trigger).
  </Step>

  <Step title="Ensure Contact data is available">
    If the workflow collects data, place those steps **before** the Pipeline action:

    * An **Ask** node that writes to a custom field (e.g., ask for `city`)
    * A **WhatsApp Flow** that maps to custom fields
    * A **Condition** that checks a label or field value
    * Import or API updates that set fields

    The Pipeline action can only map fields that already exist on the contact at that point in the flow.
  </Step>

  <Step title="Add the Pipeline step and map Contact fields">
    Add an action and select **Pipeline** (sometimes shown as *Create Pipeline Record*, *Update Pipeline*, or *Move to Pipeline*).

    Configure:

    * **Pipeline** — select the destination pipeline (e.g., *Leads*).
    * **Stage** — select the stage to place the record in (e.g., *New* or *Qualified*).
    * **Contact binding** — confirm the record is linked to the triggering contact (usually automatic: "current contact").
    * **Field mapping** — map Contact fields to pipeline fields. Examples:
      * Title = `{{contact.name}}` or `{{contact.name}} - {{contact.customFields.requirement}}`
      * Phone = `{{contact.phoneNumber}}`
      * City = `{{contact.customFields.city}}`
      * Labels = `{{contact.labels}}`
      * Source = `{{contact.source}}`

    <Tip>
      Map only fields that matter for this pipeline stage. Too many fields make the pipeline card hard to scan.
    </Tip>
  </Step>

  <Step title="Add conditions if needed (optional)">
    If the Pipeline move should only happen sometimes, add a condition before the Pipeline step:

    * *If `requirement` is not empty → run Pipeline action*
    * *If `contact.labels` contains `Hot` → move to `Leads → Hot` else `Leads → New`*

    Keep conditions close to the action they guard so the workflow stays readable.
  </Step>

  <Step title="Save and review">
    Review the full chain: Trigger → (contact data steps) → Pipeline. Confirm field mappings reference exactly the right Contact variables.
  </Step>

  <Step title="Test with real data">
    Use a controlled run: trigger the automation with a real phone number and realistic Contact data, then open **Pipelines** and verify the record was created in the expected stage with the correct mapped values. Also check the contact's **Events** history to confirm the stage-change Event was recorded. Only then mark the flow active — see [Manage Live Flows](/workspace/automation/manage-live-flows).
  </Step>
</Steps>

## Example

**Goal:** when a customer submits a WhatsApp Flow with city and requirement, create a Pipeline record in `Leads → Qualified`.

| Step            | Configuration                                                                                                                                                     |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Trigger         | WhatsApp Flow submitted (Flow: *Lead Intake*)                                                                                                                     |
| Contact data    | Flow maps `city` and `requirement` into custom fields on the contact                                                                                              |
| Pipeline action | Pipeline = *Leads*, Stage = *Qualified*, Title = `{{contact.name}}`, City = `{{contact.customFields.city}}`, Requirement = `{{contact.customFields.requirement}}` |

After submission, the contact shows a new card in **Pipelines → Leads → Qualified**. A teammate can then add a [Note](/workspace/inbox/notes) — *"Discussed pricing. Follow up next week."* — and move the card forward as the deal progresses.

Another example — label-based routing:

```
Trigger: Label added = Hot
  → Pipeline action: Pipeline = Sales, Stage = Priority, map name + phone + source
```

## Information passed from Contact into Pipeline

* **Contact identity** — name, phone, email
* **Custom fields** — any text, dropdown, or label fields stored on the contact
* **Labels and source** — useful for segmentation inside the pipeline
* **Assignment and status** — who owns the contact, whether blocked/active
* **Trigger context** — conversation ID, Flow ID, or automation run ID is retained for history where exposed, so the pipeline record links back to the originating interaction

## Limitations and prerequisites

* **Pipeline must exist first.** Create the target pipeline and its stages in **Pipelines** before referencing them in Automation. The builder can only select existing pipelines/stages.
* **Contact must exist.** Most triggers implicitly create or identify the contact. If your flow tries to map a contact before it is identified, the fields will be empty.
* **Field availability matters.** Map only fields that are already set at that point in the flow. If you map an ask-node custom field before that ask node runs, the value will be empty — keep steps ordered.
* **One Pipeline action per intended move.** To update multiple Pipelines, add separate Pipeline steps (one per pipeline).
* **Empty values are passed as empty.** If a custom field is empty, the pipeline field will be empty — guard optional fields with a condition if needed.
* **Permissions apply.** Teammates need *Manage Automations* (and often *Manage Pipelines* / *Manage Contacts*) to create or edit this chain. See [Team](/workspace/team).
* **Channel scope.** Automations are channel-scoped — a workflow built under a WhatsApp channel won't fire for a Web Chat event unless configured for that channel.

## Troubleshooting

| Symptom                            | Check                                                                                                         |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| Pipeline record not created        | Was the trigger Event actually recorded? Check **Events** history. Did the workflow run at all?               |
| Record in wrong stage              | Is the Pipeline stage mapping pointing to the intended stage name? Stage names are exact.                     |
| Mapped field is empty              | Is the Contact field set at that point in the flow? Check execution logs / test run variables and step order. |
| Record appears under wrong contact | Is the Pipeline step bound to "current contact" vs a static contact? Confirm identity binding.                |
| Labels not appearing in pipeline   | Are labels set on the contact **before** the Pipeline step? Move label actions earlier in the flow.           |

## Related docs

* [Pipelines Overview](/workspace/pipelines/overview)
* [Automation Overview](/workspace/automation/overview)
* [Select a Trigger](/workspace/automation/select-a-trigger)
* [Create a Workflow](/workspace/automation/create-a-workflow)
* [Manage Live Flows](/workspace/automation/manage-live-flows)
* [Event Studio](/workspace/events/overview)
* [Contacts](/workspace/contacts/overview)
* [Contacts – Custom Fields](/workspace/contacts/custom-fields)
* [Inbox – Notes](/workspace/inbox/notes)
