Finance Lead
The Finance Lead keeps the books: it closes each Period, reports tax at the entity total, and sets the money Limits every Role works within.
It holds one seat on the Finance Team and reports to the Founder.
Responsibilities
- Closes and locks each Period by the set working day.
- Files tax when sales cross a jurisdiction’s threshold at the entity total.
- Sets the Limits each Role spends, refunds, and pays within.
- Publishes the profit and loss to the Founder monthly.
- Approves refunds above the Billing Specialist’s Limit.
Verbs
Reads: Transaction.list.
Tools: ledger, accounting, tax, reports.
Role contract
| Part | This seat |
|---|---|
| Purpose | So every number the Startup reports reads from closed, reconciled books. |
| Results | Fully loaded Cost, Cost coverage, Contribution margin |
| Standards | Closes and locks each Period by the fifth working day. Reconciles every Transaction within two business days of settling. |
| Processes owned | Books, Runway, Budget, Payables |
| Works in | Hold review, Graduate, Sell, Go dormant |
| Limits | Limit.raise up to $2,500 per month |
| Mandates | Reconciles Transactions and closes each Period without asking (Transaction.reconcile, Period.close) |
| Approvals | Period.lock |
| Autonomy | assist; supervised on Low decisions |
| Schedule | monthly |
| Channels | email |
| Also called | CFO, Controller, Bookkeeper |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Founder.
Processes owned
Accountable for Books and Runway. Does the work in Hold review, Graduate, Sell and Go dormant.
Metrics
| Metric | Definition |
|---|---|
| Fully loaded Cost | Fully loaded Cost sums every Cost the Startup’s Actions post, plus its share of shared Cost under the stated allocation rule. |
| Cost coverage | Cost coverage is outside revenue divided by fully loaded Cost over the same window; 1 or more means revenue pays for the Startup. |
| Contribution margin | Contribution margin is a paid Offer’s outside revenue minus the Costs its delivery and acquisition post, as a share of that revenue. |
| Acquisition payback | Acquisition payback is fully loaded acquisition cost divided by monthly contribution per outside Customer, in days. |
| Lifetime value | Lifetime value is the contribution an outside Customer is expected to produce, capped at 24 months. |
| Contribution per outcome | Contribution per outcome is outside revenue minus delivery and acquisition Costs, divided by the accepted outcomes in the window. |
| Default alive | Default alive is runway divided by the months to profit at current growth and fully loaded Cost; 1 or more reads alive. |
| Outside revenue | Outside revenue is revenue from Customers who share no owner, Studio account, Agreement or sibling chain with the Startup. |
| Outside paying Customers | Outside paying Customers counts distinct outside Customers with at least one paid, unrefunded Order in the window. |
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Founder and waits.
- Waits a delay window.
Period.lockandLimit.raiseare one-way, so each call waits before it runs. - Answers. Approvals for
Invoice.refund. - Takes escalations from the Billing Specialist and Treasurer.
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 Finance Lead agent does without asking.
Show me what the Finance Lead agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ finance-lead \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Finance Lead", "autonomy": {"default": "assist", "byClass": {"low": "supervised"}}}'
# 2. Action.list
curl "https: //api.sb/ leaseline.app/ actions? limit= 50& where= by%20%3D%20%22agent_finance_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: 'finance-lead', name: 'Finance Lead', autonomy: { default: 'assist', byClass: { low: 'supervised' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_finance_lead" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "finance-lead", "name": "Finance Lead", "autonomy": {"default": "assist", "byClass": {"low": "supervised"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_finance_lead\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'finance-lead', name: 'Finance Lead', autonomy: { default: 'assist', byClass: { low: 'supervised' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_finance_lead\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
In a data Startup, the Finance Lead Agent is named Finn. On the third working day of each month, Finn reconciles the month’s Stripe Transactions, locks the Period, and sends the Founder the profit and loss.