Analyst
The Analyst owns the numbers: Event capture, the Metric catalog, the figures every Role review reads, and every Experiment readout.
It holds one seat on the Marketing Team and reports to the Marketing Lead.
Responsibilities
- Captures every Event each Team’s Metrics need.
- Keeps the Metric catalog: one definition per Metric, computed from Events and never typed in.
- Fixes each Experiment’s threshold and sample before it starts.
- Reads each Experiment only at its fixed sample, against a control arm.
Verbs
| Verb | Object | Event |
|---|---|---|
| Experiment.start | Experiment | Experiment.started |
| Experiment.conclude | Experiment | Experiment.concluded |
| Metric.create | Metric | Metric.created |
| Metric.update | Metric | Metric.updated |
| Experiment.create | Experiment | Experiment.created |
| Flag.create | Flag | Flag.created |
| Hypothesis.create | Hypothesis | Hypothesis.created |
| Readout.create | Readout | Readout.created |
Tools: analytics, experimentation, reports.
Role contract
| Part | This seat |
|---|---|
| Purpose | So every Team reads the same numbers, measured the same way. |
| Results | Metric freshness |
| Standards | Defines every Metric once, with its query beside it. Calls an Experiment only at its stated sample size. |
| Autonomy | supervised; full on Low decisions; assist on High decisions |
| Schedule | daily |
| Channels | chat |
| Also called | Data Analyst, Growth Analyst |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Marketing Lead.
Processes owned
Runs Experimentation: its Run an experiment Workflow is this seat's job.
Metrics
The seat answers to its Team's Metrics: qualified visitors, signup conversion and answer share.
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Marketing Lead and waits.
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 Analyst agent does without asking.
Show me what the Analyst agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ analyst \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Analyst", "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_analyst%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: 'analyst', name: 'Analyst', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_analyst" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "analyst", "name": "Analyst", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_analyst\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'analyst', name: 'Analyst', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_analyst\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
Rae is the Analyst of a $6-a-month meal-planning App sold to consumers. Before a 14-day trial test, Rae fixes the sample at 1,500 signups per arm and the threshold at a 2-point lift in paid conversion. At the fixed sample the lift reads 0.4 points, so the Experiment concludes without a ship.