# From an email to an opportunity

A reply becomes a deal when somebody — a person or the Assistant — creates an opportunity from the thread. The message stays where it is; what changes is the person's lifecycle stage, a new pipeline record, and a timeline entry that links the two. The thread remains the evidence, which is what makes the deal explainable later.

- **Status:** Available
- **Audience:** both
- **Channels:** email
- **In the app:** #/inbox, #/pipeline, #/relationships, #/timeline
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/workflows/email-to-opportunity/

## From reply to pipeline record

1. Trigger — a reply that changes the commercial picture: an enquiry, a request for a quotation, an answer that moves a conversation from interest to intent.
2. User or external event — the customer wrote. Everything downstream is Connect's response to a message that already exists as a canonical record.
3. Authentication and workspace resolution — the pipeline, the person and the thread all belong to one workspace, and each is read inside it.
4. Ingest — the thread, the person behind the address and the company they belong to are loaded as one picture rather than three lookups.
5. Canonical record — the message is already a `messages` row on a thread; nothing is copied into the deal, which references rather than duplicates.
6. Reasoning — the next best action is derived from what is on the record, so it can be defended by pointing at the evidence rather than at a score.
7. Knowledge, memory and rules — what the workspace knows about this organisation is already attached to the person, so the deal starts with history rather than a blank form.
8. Autonomy and approval — creating an opportunity is a record change, not an outbound message; any reply that goes with it passes the ordinary send gates.
9. Action — an opportunity is created on the pipeline, and the person's lifecycle stage moves to match reality.
10. Result — a deal with a stage, an owner and a link back to the conversation that produced it.
11. Relationship, timeline and memory — the person's timeline shows the reply and the deal in sequence, and Customer 360 shows both without anyone joining them by hand.
12. Audit, usage and Needs You — the change is recorded with what made it, and anything needing a person — a quotation, a decision — is queued rather than assumed.

## Every record that changes

| Record | What you see | What changes | What can fail |
|---|---|---|---|
| The thread | The conversation, unchanged | Nothing — the messages are evidence and stay as they are | Editing history to make a deal look tidier; the thread is the audit trail |
| The person | A lifecycle stage that matches reality | The stage on the person's record | A stage set by hand in one place and by a rule in another, so the two disagree |
| The company | The organisation behind the address | A company record, if the person was not already attached to one | Two companies for one organisation, which splits the history a deal is judged on |
| The opportunity | A new row on Sales | A pipeline record referencing the thread and the person | A deal with no link back to the conversation, which nobody can later justify |
| The timeline | Reply then deal, in order | A timeline entry | Reading the pipeline without the timeline and losing the reason the deal exists |
| Follow-ups | A dated commitment, if one was made | A follow-up row on the person | A promise made in the reply that never became a record |

## What keeps the pipeline honest

A deal is only as good as the evidence behind it, and the design here is deliberately conservative about what Connect will assert. The opportunity points at the thread; the thread holds the customer's own words; the timeline holds the order in which things happened. Nothing is summarised into the deal in a way that would survive the disappearance of its source.

The Assistant can do this work — `create_opportunity`, `move_opportunity` and `set_lifecycle_stage` are among its tools — and its rights are narrower than a person's in exactly the places that matter here. It does not set pricing. A commercial commitment stays a human decision, and the sales answers Connect gives are constrained to what the workspace's own knowledge supports rather than what would be persuasive.

**A stage is a claim** — Moving a deal forward asserts something about the customer's intent. The reply that justifies it should be findable from the deal in one step.
**An opportunity is not a forecast** — It records that a deal exists and where it stands. What it is worth is a commercial judgement a person makes.
**A support case is not a deal** — A post-sale problem belongs on a case, not on the pipeline, even when the same thread produced both.
**A prospect is not yet a relationship** — Where the conversation started as outreach, [prospect to opportunity](/docs/prospects/prospect-to-opportunity/) covers the earlier half of the journey.

## Doing it, and checking it held

1. Open the thread on Conversations and read the reply that changed things.
   - Result: You are creating the deal from evidence rather than from memory of a conversation.
2. Create the opportunity from the thread, not from an empty pipeline form.
   - Result: The link back to the conversation exists from the start, which is the part nobody adds later.
3. Set the lifecycle stage on the person to match.
   - Result: Customer 360 and the pipeline agree, so the next person to look is not choosing between two answers.
4. Record any commitment made in the reply as a dated follow-up.
   - Result: The promise is drained by [an email follow-up](/docs/workflows/email-follow-up-execution/) instead of relying on somebody remembering.
5. Check the person's timeline afterwards.
   - Result: Reply, deal and commitment appear in order — if one is missing, it was never recorded rather than merely not shown.

## Questions

### Does creating a deal send anything to the customer?

No. It is a record change. Any reply that goes with it is an ordinary outbound message and passes the same autonomy, suppression and allowance gates as every other send.

### Can the Assistant create the opportunity for me?

Yes, with `create_opportunity` and `move_opportunity`. It cannot set pricing — that boundary is deliberate, and it means a commercial commitment is always traceable to a person.

### What if the same thread is both a sale and a support issue?

Record both. A support case and an opportunity are different records with different lifecycles, and forcing one thread into a single category is how a problem gets closed because a deal was won.

## Related

- [Sales in Connect](https://connectbyjbrh.com/docs/sales/)
- [Customer 360](https://connectbyjbrh.com/docs/relationships/customer-360/)
- [Lifecycle stages](https://connectbyjbrh.com/docs/relationships/lifecycle-stages/)
- [The customer timeline](https://connectbyjbrh.com/docs/relationships/timeline/)
- [Drafting and approving a reply, end to end](https://connectbyjbrh.com/docs/workflows/email-reply-approval/)
- [From prospect to opportunity](https://connectbyjbrh.com/docs/prospects/prospect-to-opportunity/)
- [Making a next-best-action defensible](https://connectbyjbrh.com/research/evidence-for-next-action/)

## What this page is based on

- Connect source pack — relationships and sales: opportunities, lifecycle stages, Customer 360 and the timeline (`docs-source/sources/GENERAL.md` §4, §8)
- Connect source pack — channels, §1: canonical threads and messages as the record the engine and screens read (`docs-source/sources/CHANNELS.md`)
- Connect capability registry (`docs-source/facts.py`) — `opportunities`, `lifecycle_stage`, `customer_360`, `safe_sales`
