# First outreach to a prospect, end to end

First outreach is the point where prospecting stops reading and starts writing to a real person. Five gates stand between a qualified prospect and a sent message: a ready sender, a passed compliance check, a grounded draft, the channel's autonomy rule, and the daily allowance. The send is only 'sent' once the provider says so.

- **Status:** Available
- **Audience:** both
- **Channels:** email
- **In the app:** #/prospects, #/needs-you, #/inbox
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/workflows/prospect-outreach/

## The flow

1. Trigger — a person sends from the prospect, an outreach sequence reaches its first step, or the Assistant is asked to write to a qualified prospect.
2. User event — the decision to contact this organisation, recorded against whoever or whatever made it.
3. Authentication and workspace resolution — the workspace is entered before the mailbox, the suppression list or the allowance is read.
4. Ingest — the prospect, its address and its provenance, and the mailbox that will send.
5. Canonical record — the intended message exists as a draft on a thread before any provider is involved, so a refusal has somewhere to be written.
6. Reasoning — the opening is written from claims that carry evidence, not from the model's impression of the company.
7. Knowledge, memory and rules — workspace knowledge, standing instructions, and directives such as a `block:` tag on the contact are applied before the draft is offered.
8. Autonomy and approval — the channel's mode decides: `autonomous` sends within the gates, `ask_before_send` puts it in Needs You, `draft_only` writes it and stops, `off` does not draft at all.
9. Action through a provider — the send goes through the shared boundary in `outbound.py`, the same one a person's own send uses.
10. Result — sent with the provider's acknowledgement, held, refused, or *uncertain* while no acknowledgement has arrived.
11. Relationship and timeline — the message appears on the prospect and, once a Person exists, on that person's timeline.
12. Audit, usage and Needs You — the send is counted against the daily allowance, the decision is logged with its rule, and anything unresolved is queued.

## The five gates

| Gate | Passes when | Fails as |
|---|---|---|
| Sender readiness | A mailbox is connected *and* healthy, with a role and a signature | Held; a connected mailbox is not automatically a working one |
| Compliance | The address is not suppressed, unsubscribed or on do-not-contact | Refused, with the suppression's origin shown |
| A grounded draft | The opening cites claims that carry evidence | No send; an ungrounded opening is the failure this design most wants to avoid |
| Autonomy | The mode for this channel and scope allows it | Held in Needs You, or written and stopped under `draft_only` |
| Daily allowance | The workspace has send budget left | Held, not lost; it goes when the allowance resets |

> **Note** Autonomy resolves at four scopes — contact, endpoint, channel, workspace — and the narrowest wins. Holding outreach for one organisation while everything else runs normally is a contact-scoped rule, not a change to how prospecting works.

## What counts as sent

A message is sent when the provider has acknowledged it, and not a moment earlier. Between handing the message over and receiving that acknowledgement the state is *uncertain*, which is a real state with its own handling rather than an optimistic guess. Recording a send before the provider agrees produces the worst kind of record: one that says a customer was written to when they were not.

1. Approve, or let an autonomous send run.
   - Result: The message goes through `outbound.py` — the same boundary a person uses, so switching who sends does not switch the rules.
2. Wait for the acknowledgement.
   - Result: Sent, with evidence. The evidence is what the timeline shows, not an assumption from the absence of an error.
3. If no acknowledgement arrives, read the uncertain state rather than resending.
   - Result: A blind resend is how a prospect receives the same introduction twice, which is worse than a delay.

## Failures worth recognising

**Nothing was drafted** — The channel's autonomy is `off`, or the prospect has no address at all — in which case the next action was never email.
**Drafted, never offered** — `draft_only`. It writes and deliberately does not ask, which is not the same as `ask_before_send`.
**Refused at compliance** — Suppression, unsubscribe or do-not-contact. The origin is shown; a do-not-contact entry is not cleared casually and the Assistant cannot clear one at all.
**Held for days** — The allowance, usually. Approval is recorded and the send waits rather than failing.
**Sent to the wrong mailbox** — The mailbox is chosen by role and by the thread, not by the person approving, which is why it is not editable in the approval.

## Questions

### Can Connect send cold outreach without asking me?

Only where the channel's autonomy mode is `autonomous`, and only through the same compliance check and allowance as any other message. Setting a narrower scope — one contact, one mailbox — overrides the channel, so the answer can be yes in general and no for a particular organisation.

### What happens to outreach for a prospect with no address?

There is none. The prospect stays on the list with a next action that is not email, and no address is manufactured to give the sequence something to aim at. That population is counted separately above the list.

### Is the first message written from a template?

The opening is grounded in claims that carry evidence for that specific organisation. A template that would read identically for every prospect would not need the research, and the research is the point.

## Related

- [First outreach](https://connectbyjbrh.com/docs/prospects/first-outreach/)
- [Sender readiness](https://connectbyjbrh.com/docs/prospects/sender-readiness/)
- [The compliance check before outreach](https://connectbyjbrh.com/docs/prospects/compliance-check/)
- [Outreach was blocked](https://connectbyjbrh.com/docs/troubleshooting/outreach-blocked/)
- [Proof that a message was sent](https://connectbyjbrh.com/docs/email/send-evidence/)
- [What Connect may do](https://connectbyjbrh.com/docs/autonomy/)

## What this page is based on

- `docs-source/sources/CHANNELS.md` §4 — the outreach and compliance stages
- `docs-source/sources/GENERAL.md` §5 — autonomy modes, scopes and Needs You
- `backend/app/sales_outreach.py`, `backend/app/prospect_compliance.py`
- `backend/app/outbound.py`, `backend/app/metering.py`
