CRM and
the six-stage pipeline.
One Airtable base, four tables, six stages. Every lead, engagement, outreach thread, and touchpoint flows through the same shape — so the dashboard, the weekly review, and the qualification rubric all read from one source of truth.
Companion to USI-RB-01 §06 (Phase 3 abridged) and USO-ST-04 (the operational logic). This runbook is the deep-dive: tables, fields, formulas, views, Linear bridge, and the Superhuman snippet pack that runs day-to-day outreach.
How to use this runbook.
The pipeline is the bloodstream of the Studio. Everything else — finance, capacity planning, lead-gen retro — reads off it.
Build it once at Day 0. After that, the only changes should be (a) adding a new outreach pattern, (b) tweaking the qualification rubric in §04, or (c) adding a new view for a new question you keep asking. Resist schema sprawl — new fields are a tax on every future row.
The order matters — Leads before Engagements (an Engagement links to a Lead), Engagements before Outreach (Outreach references the active Engagement, if any), Outreach before Touchpoints (Touchpoints belong to an Outreach thread). Building tables in this order means every link field has something to link to.
The six stages.
Every Lead and Engagement lives in exactly one stage. The single-select field is the spine — views, automations, and the Kanban all key off it. From USO-ST-04 §02.
Two terminal states sit outside the spine: Lost (with reason captured) and Nurture (re-evaluate in 90 days). Anything in Nurture for more than 180 days auto-moves to Lost.
Base architecture.
Four tables, linked. The base is named Studio · Pipeline and lives under the umbra.group Airtable workspace.
| Table | One row = | Primary field | Links to |
|---|---|---|---|
| Leads | A person or account in the pipeline (pre-Active). | Lead Name | Outreach (many) |
| Engagements | A signed engagement (Active or completed). | Engagement Code | Leads (one), Touchpoints (many) |
| Outreach | A single outbound thread or referral pursuit. | Thread Subject | Leads (one), Touchpoints (many) |
| Touchpoints | A single email, call, meeting, or message exchanged. | Touchpoint ID | Outreach (one) or Engagement (one) |
- In Airtable, create a new base in the
umbra.groupworkspace. Name:Studio · Pipeline. - Choose Start from scratch — the templates carry baggage.
- Rename the default Table 1 to
Leads. Add three more tables:Engagements,Outreach,Touchpoints. - Set the base color to Green (matches Studio accent in the picker that the brain remembers).
- Workspace SSO: enforce Workspace login. No personal Gmail allowed.
- Base sharing: invite-only. Default new members to Read only.
- Studio Lead: Owner.
- Engagement contributors: Editor on the base, but lock down the Leads table to Comment-only via field/table permissions.
Leads table.
The Leads table is the widest. Every field earns its place by feeding either a view, an automation, or the qualification rubric.
| Field | Type | Purpose |
|---|---|---|
| Lead Name | Single line | Primary. Person + Company, e.g. J. Smith · Acme Insurance. |
| Company | Single line | Account name, normalized. |
| Role | Single line | Buyer's title. |
| Stage | Single select | Signal, Qualify, Scope, Proposal, Contract, Active, Nurture, Lost. Color each. |
| ICP Tier | Single select | A (perfect fit), B (good fit), C (edge case), D (out of ICP). See rubric below. |
| Source | Single select | Cold, Warm intro, Inbound, Conference, Referral, Other. |
| Industry | Single select | Insurance, FinServ, Healthcare ops, Legal ops, Content ops, Pro services, Other. |
| Headcount | Single select | <100, 100-500, 500-2000, 2000+. |
| Workflow Hint | Long text | The specific workflow they hinted at, in their words. |
| Qualification Score | Formula | See formula below. 0-10 scale. |
| Owner | Collaborator | Whoever holds the relationship. Almost always Abe at start. |
| Next Action | Single line | The exact next thing to do. Past tense not allowed. |
| Next Action Date | Date | When that action is due. |
| Last Touch | Date | Auto-set by automation when a Touchpoint is logged. See §07. |
| Outreach | Link | To Outreach table. Many. |
| Engagement | Link | To Engagements table. One, when stage hits Active. |
| Lost Reason | Single select | Budget, Timing, Fit, Competitor, No-response, Other. Required when Stage = Lost. |
| Notes | Long text | Free-form. Append-only by convention. |
Qualification Score formula
A lightweight numeric rubric to surface the highest-fit leads in any view. Tune the weights as the ICP sharpens.
IF({Headcount}="100-500", 3,
IF({Headcount}="500-2000", 3,
IF({Headcount}="2000+", 1, 0)))
+
IF(OR({Industry}="Insurance",
{Industry}="FinServ",
{Industry}="Healthcare ops",
{Industry}="Legal ops",
{Industry}="Content ops"), 3, 0)
+
IF(LEN({Workflow Hint})>20, 2, 0)
+
IF(OR({Source}="Warm intro", {Source}="Referral"), 2, 0)
Then map the formula output to ICP Tier via a separate single-select that the operator confirms after the qualify call. The formula suggests; the operator decides.
Color coding (single select)
- ▢
Signal— gray.Qualify— blue.Scope— purple.Proposal— yellow.Contract— orange.Active— green.Nurture— teal.Lost— red.
Engagements table.
An Engagement is created the moment a contract is countersigned. The corresponding Lead row stays put for historical record but is no longer the source of truth for project status.
| Field | Type | Purpose |
|---|---|---|
| Engagement Code | Formula | Primary. {Client Short} & "-" & {Year} & "-" & {Sequence}. E.g. ACME-2026-01. |
| Client Short | Single line | 4-6 char shortcode, e.g. ACME. |
| Client Full | Single line | Full legal name on the contract. |
| Year | Formula | YEAR(TODAY()) at row creation, then frozen. |
| Sequence | Number | Monotonic per client per year. Manually set. |
| Lead | Link | Back to the originating Leads row. |
| Type | Single select | Lighthouse Sprint, Discovery-only, Retainer, Workshop. |
| Status | Single select | Active, Paused, Complete, Cancelled. |
| Start Date | Date | Kick-off date. |
| Target End | Date | Contracted end date. |
| Actual End | Date | Set on Status = Complete. |
| Fee Total | Currency | Total contract value (USD). |
| Fee Recognized | Currency | Sum of invoiced milestones, manually updated. |
| Patterns Used | Multi-select | Which library patterns were applied. Drives the pattern-frequency report. |
| Outcome Metric | Long text | The agreed measurable outcome from the SOW. |
| Outcome Result | Long text | Filled at handoff, with deltas vs. baseline. |
| Touchpoints | Link | To Touchpoints table. |
| Notes | Long text | Append-only. |
The Engagement Code formula gives a stable filename-safe identifier that gets reused on Drive folders, contracts, invoices, and Linear project keys.
Outreach table.
One row per outbound thread. A Lead can have multiple Outreach rows over time (e.g. a cold thread that died, then a warm-intro thread six months later). Sequencing logic lives in USI-OPS-OUTREACH; this table is the data spine.
| Field | Type | Purpose |
|---|---|---|
| Thread Subject | Single line | Primary. Mirrors the email subject line. |
| Lead | Link | To Leads. |
| Pattern | Single select | Cold Intro, Warm Intro, 5-day Follow-up, Re-engagement, Inbound Reply, Other. |
| Channel | Single select | Email, LinkedIn, Intro, Conference, Other. |
| Opened | Date | Date thread was opened. |
| Last Touchpoint | Rollup | MAX({Touchpoints > Date}). |
| Days Since Touch | Formula | DATETIME_DIFF(TODAY(), {Last Touchpoint}, 'days'). |
| Outcome | Single select | In-progress, Replied-positive, Replied-objection, No-reply, Closed-won, Closed-lost. |
| Touchpoints | Link | To Touchpoints. |
| Notes | Long text | Personalization context, intro source, etc. |
Why a separate table? Because a Lead's relationship with the Studio spans multiple campaigns over years. Pinning everything to the Leads row creates a long-text mess; one Outreach row per thread keeps the history auditable.
Touchpoints table.
The most granular table. One row per individual exchange — a sent email, a received reply, a held call, a Loom shared. Touchpoints are the substrate the rest of the pipeline aggregates against.
| Field | Type | Purpose |
|---|---|---|
| Touchpoint ID | Autonumber | Primary. Sequential. |
| Date | Date | When the touchpoint happened. |
| Direction | Single select | Outbound, Inbound. |
| Type | Single select | Email, Call, Meeting, Loom, DM, Other. |
| Outreach | Link | To Outreach (or blank if linked to Engagement). |
| Engagement | Link | To Engagements (or blank if linked to Outreach). |
| Summary | Long text | One paragraph max. What happened, what was said, what's next. |
| Sentiment | Single select | Positive, Neutral, Objection, No-response. |
| Owner | Collaborator | Who logged it. |
Last Touch automation
Set up an Airtable automation that, when a Touchpoint is created with an Outreach link, updates the linked Lead's Last Touch field to {Date} and the Outreach row's Outcome if the Sentiment is decisive.
- Trigger: When record created on Touchpoints.
- Condition:
{Outreach}is not empty. - Action: Update the linked Outreach row's
{Last Touchpoint}rollup auto-refreshes; manually update{Outcome}only if sentiment is Positive or Objection. - Action: Find the Lead via Outreach → Lead, update its
{Last Touch}. - Test by manually adding a Touchpoint and confirming both downstream rows update.
Pipeline views.
Views are the operating UI. Build these eight; resist adding more until a recurring question can't be answered from one of them.
| View | Table | Type | Filter | Group / Sort |
|---|---|---|---|---|
| Pipeline Kanban | Leads | Kanban | Stage ≠ Lost AND Stage ≠ Active | Group by Stage |
| This Week | Leads | Grid | Next Action Date ≤ TODAY+7 | Sort by Next Action Date asc |
| A-Tier Hot | Leads | Grid | ICP Tier = A AND Stage ∈ (Qualify, Scope, Proposal) | Sort by Last Touch desc |
| Stale | Leads | Grid | Stage ≠ Lost AND Last Touch < TODAY-21 | Sort by Last Touch asc |
| Active Engagements | Engagements | Grid | Status = Active | Sort by Target End asc |
| Outreach Queue | Outreach | Grid | Outcome = In-progress AND Days Since Touch ≥ 5 | Sort by Days Since Touch desc |
| Pattern Frequency | Engagements | Pivot | — | Pivot Patterns Used × Year |
| Lost Reasons | Leads | Pivot | Stage = Lost | Pivot Lost Reason × Quarter |
Kanban setup
- On the Leads table, click + Create view → Kanban.
- Stack by:
Stage. - Card fields:
Lead Name,Company,ICP Tier,Qualification Score,Next Action,Next Action Date. - Hide the Lost and Active stacks (filter, above) — they bloat the board.
- Drag-to-move enabled. Moving a card updates the Stage field.
Stale view automation
Add an automation: every Monday at 8am, send the operator an email summarizing the Stale view. If a lead has been silent >21 days, decide once: re-engage, move to Nurture, or mark Lost.
The Linear bridge.
The CRM tracks relationships. Linear tracks delivery. The bridge between them is the Engagement Code — identical string in both systems.
- On Stage = Active, create a Linear team named
{Engagement Code}. E.g.ACME-2026-01. - Set the team's prefix to the same code (so issues read
ACME-2026-01-1, etc.). - Add the engagement contributors. Default everyone else to no access.
Every Lighthouse engagement gets four Linear projects on Day 0 of kick-off, mirroring the four Sprint phases:
Phase 1 · DiscoveryPhase 2 · RedesignPhase 3 · BuildPhase 4 · Handoff
Use the saved Linear template Lighthouse Engagement Template — it pre-creates these four with the standard issue checklist from USL-PB-01..04.
- In the Linear team description, paste the Airtable Engagement record URL.
- In the Airtable Engagement row's Notes field, paste the Linear team URL.
- From now on, Linear is the single source of truth for delivery state. Airtable Engagement Status only flips to Complete when Phase 4 ships.
Superhuman snippets.
Snippets are the operational shortcut that makes outreach sustainable. Each snippet maps to an Outreach Pattern; using it auto-fills the body and inserts the variables.
| Trigger | Pattern | Use when |
|---|---|---|
| ;intro | Cold Intro | First-touch cold email to an A or B-tier lead. |
| ;warm | Warm Intro | Sent after a referrer connects you and the lead. |
| ;follow5 | 5-day Follow-up | Five business days after Cold Intro, no reply. |
| ;reeng | Re-engagement | 90+ days after a Nurture stamp. |
| ;qualify | Qualify Reply | Replying to a positive reply — book the 30-min. |
| ;scope | Scope Recap | After a Qualify call, recapping the workflow they described and proposing Discovery. |
| ;sow | SOW Send | Sending the SOW and asking for sign-off. |
| ;kick | Kick-off | Post-signature, scheduling Day 0 of the engagement. |
| ;lost | Graceful Lost | Closing the loop on a polite no. |
Snippet authoring rules
- Every snippet has at least one
{{personalization}}placeholder. If a snippet sends without an edit, it's not personalized enough. - No more than 5 sentences. Above that, the read-rate falls off a cliff.
- Always include a one-sentence ask. "Worth a 30-min call next week?" is the right shape.
- Sign with
Abe · Umbra Studio · umbrastudio.com— full signature lives in Superhuman default, snippets sign off with this short form. - Source the canonical text from
umbra-studio-outreach-emails.docx; snippets are mirrors, not divergent copies.
Setup
- In Superhuman: Settings → Snippets → New Snippet.
- For each row in the table above, paste the canonical body from the outreach docx.
- Mark the placeholder spans with Superhuman's variable syntax so the cursor lands on each one in turn.
- Add the trigger string. Test by typing it in a new email and confirming the body fills.
- Re-export the snippet pack to
studio-sharedDrive every quarter so a new device can re-import.
Pipeline checklist.
Daily · 15 min
- Open the This Week view. Clear or reschedule any Next Actions due today.
- Log every Touchpoint from the past 24h with sentiment.
- Process inbox — any positive reply triggers a Stage update before noon.
Weekly · 30 min · Monday morning
- Open the Pipeline Kanban. Walk every column left to right; each card needs a Next Action with a date.
- Open the Stale view. For each lead, decide once: re-engage, Nurture, or Lost.
- Open the Outreach Queue. Send any 5-day follow-ups due this week.
- Open the Active Engagements view. Confirm each engagement has a current Linear sprint.
Monthly · 60 min
- Audit field discipline: any Lead missing ICP Tier, Source, or Industry? Backfill.
- Review Lost Reasons pivot. If >40% of losses are Budget, the pricing conversation is happening too late in the sequence.
- Review Pattern Frequency pivot. Patterns that haven't been used in two engagements may be ripe for retirement; patterns used in >5 are candidates for productization.
- Confirm Snippet pack hasn't drifted from the canonical outreach doc.
Quarterly · 90 min
- Re-tune the Qualification Score weights based on which leads converted.
- Archive Engagements that completed this quarter. Move them to a Status = Complete view; don't delete.
- Run a base-wide audit for orphan rows (Outreach without Lead, Touchpoint without parent). Fix.
- Export a CSV snapshot of all four tables to
studio-shared/Pipeline/Snapshots/. This is the rollback point if a schema change goes sideways.