Customer Lead
The Customer Lead owns every Conversation and the single Thread each Person has with the Startup.
It holds one seat on the Customer Team and reports to the Founder.
Responsibilities
- Answers every Conversation from the record, within the first-response target.
- Keeps one Thread per Person, so no two Workflows write to one buyer unseen.
- Fixes the cause of each problem, or opens an Issue for the Product Team.
- Owns the Channels and Mailboxes every Team’s Sequences send through.
- Hands refunds to the Billing Specialist and privacy requests to the Privacy Officer.
Verbs
| Verb | Object | Event |
|---|---|---|
| Conversation.answer | Conversation | Conversation.answered |
| Conversation.update | Conversation | Conversation.updated |
| Message.create | Message | Message.created |
| Issue.create | Issue | Issue.created |
| Customer.update | Customer | Customer.updated |
| Conversation.assign | Conversation | Conversation.assigned |
Tools: support, messaging, knowledge-base, surveys.
Role contract
| Part | This seat |
|---|---|
| Purpose | So every Person who writes to the Startup gets one answer, from the record, fast. |
| Results | First response time, First responses on time, Resolution time, Agent resolution rate |
| Standards | Answers the first Message in every Conversation within one business hour. Resolves four in five Conversations without a hand-off. |
| Processes owned | Support, Call routing |
| Works in | Incident response, Retention |
| Limits | Conversation.answer up to 500 calls per day |
| Mandates | Answers Conversations and sends Messages, each through the Startup’s Guards (Conversation.answer, Message.create) |
| Autonomy | supervised; full on Low decisions; assist on High decisions |
| Schedule | hourly |
| Channels | email, chat, sms, social |
| Also called | Support Agent, Support Lead, Head of Support |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Founder.
Processes owned
Accountable for Support. Does the work in Incident response and Retention.
Metrics
| Metric | Definition |
|---|---|
| Month-3 retention | Month-3 retention is the share of outside Customers who first paid in one month and still pay three months later. |
| Net revenue retention | Net revenue retention is this month’s revenue from outside Customers who paid twelve months ago, divided by their revenue then. |
| Logo churn | Logo churn is the share of outside Customers paying at the start of a month who stop paying by its end. |
| Repeat purchase rate | Repeat purchase rate is the share of outside Customers who place a second paid Order within 90 days of their first. |
| First response time | First response time is the median business hours from a Conversation’s first Message to its first answer. |
| First responses on time | First responses on time is the share of Conversations first answered before their respondBy time. |
| Resolution time | Resolution time is the median business hours from a Conversation’s first Message to a resolution that held for 7 days. |
| Agent resolution rate | Agent resolution rate is the share of Conversations an Agent resolved, with no Human Task, that held for 7 days. |
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Founder and waits.
- Takes escalations from the Onboarding Specialist and Success Manager.
Filled by
A role agent fills the seat in every new Startup. Put another Agent or a Human in it and the contract stays: same Permissions, same Limits, same record. Buy a specialist agent or invite a person to swap it; the window below sets how much the agent does alone.
Set how much the Customer Lead agent does without asking.
Show me what the Customer Lead agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ customer-lead \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Customer Lead", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
# 2. Action.list
curl "https: //api.sb/ leaseline.app/ actions? limit= 50& where= by%20%3D%20%22agent_customer_lead%22%20and%20createdAt%20%3E%3D%20%222026-10-16%22& sort= -createdAt" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
await $.Role.update({ id: 'customer-lead', name: 'Customer Lead', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_customer_lead" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "customer-lead", "name": "Customer Lead", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_customer_lead\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'customer-lead', name: 'Customer Lead', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_customer_lead\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
Susan, the default Customer Lead, sees a renewal notice due for a Person with an open complaint about a miscategorized expense. She fixes the rule for every Customer, then answers and gives the notice in one Message in the same Thread.