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

# How do I manage deal contacts, qualification, and close reasons?

> Ask Claude to attach a deal contact, record qualification, or log why a deal closed — the deal-specific writes update_crm_record doesn't manage.

A deal carries relationships a plain field patch can't express — who is the economic buyer, whether budget is confirmed, why a deal was actually lost. Those live outside `update_crm_record` on their own dedicated tools. Connect Claude to Klipy and it calls the right one for what you're asking.

## Example prompt

Copy any of these into Claude once it is connected to Klipy:

```text theme={null}
Add Dana Lee to the Acme deal as the economic buyer.
```

```text theme={null}
Mark budget as confirmed on the Acme deal — they approved $50k.
```

```text theme={null}
Close the Acme deal as lost: competitor, they went with Vendor X.
```

## What happens

<Steps>
  <Step title="Adding or re-roling a contact">
    Claude calls `update_deal_contacts` to attach Dana with that role. It's additive — every other contact on the deal keeps the role and reporting line they already had, and at most one contact is marked primary per call.
  </Step>

  <Step title="Recording qualification">
    Claude calls `set_deal_qualification`, and the criterion key is checked against the deal's own qualification framework (BANT, MEDDIC, etc.) before anything is written.
  </Step>

  <Step title="Recording a close reason">
    Claude calls `set_deal_outcome` to record the close reason. Ask it to move the deal to the closing stage in the same request and that stage move fires the usual stage-change automations, with `closeDate` stamped the first time the deal reaches a closing stage.
  </Step>
</Steps>

These are ordinary CRM writes — free, the same as any create or update through the app.

## Good to know

* **`update_crm_record` doesn't manage these fields.** Deal contacts, the main contact, qualification, and the close reason move through these three tools instead — `describe_crm_schema` lists them per deal so Claude never guesses a write path.
* **`update_deal_contacts` never drops a contact you don't name.** Each call merges onto the deal's current membership; contacts left out of the request keep their existing role.
* **A qualification key has to match the deal's own framework.** `set_deal_qualification` validates every criterion key against the framework the deal was seeded with — an unknown key is rejected, not silently ignored.
* **A bare close-reason write never touches `closeDate`.** `set_deal_outcome` only stamps `closeDate` when the same call moves the deal into a closing stage, and only the first time — logging a reason on an already-closed deal doesn't redate it.

## Related

<CardGroup cols={2}>
  <Card title="CRM updates" icon="database" href="/docs/guides/mcp/use-cases/crm-updates">
    Let Klipy's own suggestions drive the rest of a record's fields.
  </Card>

  <Card title="Pipeline forecast" icon="chart-line" href="/docs/guides/mcp/use-cases/pipeline-forecast">
    See how a deal's stage and confidence feed the forecast.
  </Card>

  <Card title="Tool reference" icon="wrench" href="/docs/guides/mcp/tools">
    Every tool Claude can call, grouped by scope.
  </Card>
</CardGroup>
