Outreach
Lead detail
Per-lead actions on /leads/<id>. Status, generated emails, Plusvibe push and writeback, Unibox replies, and audit links.
Last updated 2026-05-29
In the app
Who this is for
Operators who need to change a lead's pipeline status, generate or review outreach copy, sync a single contact with PlusVibe, or read and reply to messages in Unibox without leaving the dashboard.
When to use this screen
Open it from Leads by clicking View details on a row, or navigate directly to /leads/<id> (the lead UUID). Contextual help on that route points here.
Before you start
Start with PlusVibe setup: required fields and first sync for the integration prerequisites and how domain, audit_url, and the writeback fit together.
The following preconditions apply to the per-lead actions:
- The lead must have a usable
domainvalue for Start audit (domain). - PlusVibe push, writeback, and Unibox need Integrations configured with a valid API key and workspace. Campaigns must already exist for Push to PlusVibe.
- PlusVibe Writeback only appears when the lead is linked to a PlusVibe campaign and has a linked audit run in the dashboard. Both are set after a push or sync followed by an audit start.
In the app
- In the sidebar under Outreach, choose Leads.
- Click View details for any lead, or use a bookmarked
/leads/<id>URL.
Screen tour
Header. A Back button returns to the list. The title shows the lead's company name or domain. A status badge reflects the current value (underscores rendered as spaces, for example audit queued).
Company, Contact, and Audit cards. Domain, contact fields, Not audited or grade, optional top issue, and View audit when an audit run is linked (/audits/<auditRunId>).
Actions panel:
- Status dropdown. A native
<select>showing the stored enum with underscores replaced by spaces (for exampleaudit_completeappears asaudit complete). The Leads table uses friendlier badge labels for the same values; see the table at the end of this guide. - Generate Email. Creates a preview and refreshes the Outreach Emails list at the bottom of the page.
- Start audit (domain). Kicks off an audit for the lead's domain. Blocked when the domain is missing or
unknown. - PlusVibe Writeback. Only enabled when a PlusVibe campaign and an audit run are both present on the lead. Success and errors surface in the banner above the cards.
PlusVibe panel:
- When the lead is not yet linked to a Plusvibe campaign but has a contact email: a Select campaign dropdown plus the Push to PlusVibe button. The push respects the readiness guard (see below).
- When the lead's status is
convertedorrepliedand a campaign plus contact email exist: a Mark completed in PlusVibe action. - Remove from PlusVibe. Opens a confirm dialog. Requires the contact email.
- PlusVibe enrichment. Read-only fields (for example Label, Reply sentiment, Last email subject) and a Raw webhook payload JSON view, shown when
plusvibeLeadDatais present on the row.
Unibox (email thread). Shown when the lead has a contact email. The Refresh icon reloads threads. The empty state reads "No Unibox messages for this lead." Selecting a row opens a reply composer; Read marks a thread read when the API supplies a mark-read body.
Reply composer (after selecting a row). Fields for Reply from (connected mailbox), Subject, Body (HTML allowed), and Send reply.
Audit Summary. An optional text block when the API returns auditSummary for the linked audit.
Outreach Emails (n). Lists generated messages with type and writebackStatus badges. Empty state: "No emails generated yet. Use the Generate Email button above."
Push to PlusVibe: the readiness guard
Pushing a single lead from the per-lead PlusVibe panel uses the same /api/plusvibe/leads/push endpoint as the bulk action on /leads. The endpoint refuses to enrol a lead before its writeback has populated the custom_* merge fields, because Plusvibe renders templates at send time and never retries a message that has already gone out with empty placeholders.
When the push succeeds, the dashboard pre-populates every custom_* merge field in the same HTTP call that enrols the lead. Plusvibe's send loop sees a fully-rendered lead the first time it ticks; there is no race window.
When the push is rejected, the dashboard surfaces the 409 inline with the reason. The most common cases:
- Status is
new,audit_queued, or no status. Run an audit on the lead first via Start audit (domain). - Status is
audit_completebut the writeback never landed. Re-audit the lead. The new writeback fills the variables and the status atomically. - Status is in the ready set (
email_generated,email_sent,opened,replied,retargeted,converted) butplusvibeLeadData.lastOutboundWriteback.variablesis missing. Same remedy: re-audit. - Status is
bounced. Re-audit or remove the lead.
See Leads, pipeline, and emails for the bulk equivalent of this behaviour, including the structured 409 response shape.
Writeback after audit completion
When an audit completes for a lead that is linked to a PlusVibe campaign, the dashboard fires a writeback automatically. The writeback pushes the audit-derived variables (18 keys for the slim profile) plus the body keys (email_subject, email_body, email_cta, or the indexed step versions when a campaign sequence is configured) and atomically sets the lead's status to email_generated and stores the payload at plusvibeLeadData.lastOutboundWriteback.variables.
Manual writeback. The PlusVibe Writeback button retries the push if the automatic dispatch was skipped (for example because the contact email was missing at audit time) or if you want to refresh the variables after a tone change. The button writes the same payload the auto-writeback would have written for the most recent completed audit.
For the full merge-field contract see PlusVibe setup: required fields and first sync.
Status values
| Stored value | Leads table badge | Detail dropdown label |
|---|---|---|
new | New | new |
audit_queued | Audit Queued | audit queued |
audit_complete | Audited | audit complete |
email_generated | Email Ready | email generated |
email_sent | Email Sent | email sent |
bounced | Bounced | bounced |
opened | Opened | opened |
replied | Replied | replied |
retargeted | Retargeted | retargeted |
converted | Converted | converted |
The list view may still show "Sent (legacy)" for the deprecated sent value; that value does not appear in the detail dropdown. Normalise the status from the Leads table or the API if you hit a legacy row.
Common pitfalls
Failed to load leadfull-page error. The API returned an error for this UUID. Return to the Leads list and retry. If it persists, the lead may have been deleted in another tab.- Action banner stuck on screen. Click Dismiss to clear stale Generate Email, writeback, push, remove, Unibox, or audit-start messages. The server text in the banner usually contains a quota or validation detail.
- PlusVibe Writeback button missing. The button hides when there is no campaign link or no linked audit. Push the lead to a campaign or run an audit first.
- Unibox empty while email exists. PlusVibe may have no thread for this contact yet. Click Refresh after sending from your provider; threads appear once Plusvibe has indexed at least one inbound or outbound message for the address.
- Push from this page returns 409. The lead has not finished its audit yet. Wait for the audit to complete; the writeback runs within roughly a second of completion and the status flips to
email_generated.
Related
- PlusVibe setup: required fields and first sync. Credentials, the readiness rules, and the full writeback contract.
- Leads, pipeline, and emails. The list bulk actions and the Emails approval flow.
- PlusVibe overview. Workspace-level Unibox, campaign tools, and the expand panel tabs.
- Reading audit run results. Opens from View audit.