CRM
CRM keeps the Contacts and Organizations a Startup knows, every Lead, and the Deals it pursues with them.
CRM is the record of every Contact, Organization, Lead, Deal and Customer a Startup knows. Every Message, Meeting, Invoice and Conversation lands in the same database, so each record's timeline is complete with no logging.
Summary
| Part | This System |
|---|---|
| Group | Sales |
| Status | Live |
| Shelf | Front: offered from a Startup’s first days |
You can ask:
- “Who are my best leads?”
- “Add this person as a lead”
- “Move the Harbor deal to proposal”
- “Merge these two contacts”
- “Which deals are stuck?”
What you get
| Part | This System |
|---|---|
| Starts | On for every Startup at creation, with nothing to install. |
| Built from | Database, Search, Integrations, AI gateway, Event streams, Enrichment |
Nouns it owns
| Noun | Definition |
|---|---|
| Contact | A Contact is a person or Agent a Startup knows by at least one address, where Consent to message them is recorded. |
| Organization | An Organization is an outside party as one Startup knows it, keyed by its domain, such as an employer or a vendor. |
| Lead | A Lead is a Contact who raised a hand, by joining a Waitlist, filling a Form, or replying, without accepting an Offer. |
| Deal | A Deal is a Startup’s pursuit of one buyer’s acceptance of one or more Offers, ending won or lost. |
| Customer | A Customer is a party that has accepted an Offer from a Startup at any price, including zero. |
Verbs
| Verb | Object | Approval | Event |
|---|---|---|---|
| Contact.create | Contact | None | Contact.created |
| Contact.enrich | Contact | None | Contact.enriched |
| Organization.create | Organization | None | Organization.created |
| Lead.qualify | Lead | None | Lead.qualified |
| Deal.propose | Deal | Asks first; waits 1 business hour | Deal.proposed |
| Deal.win | Deal | None | Deal.won |
| Deal.lose | Deal | None | Deal.lost |
| Lead.convert | Lead | None | Lead.converted |
| Contact.merge | Contact | Asks first; waits 1 business hour | Contact.merged |
| Organization.merge | Organization | Asks first; waits 1 business hour | Organization.merged |
| Lead.assign | Lead | None | Lead.assigned |
| Deal.assign | Deal | None | Deal.assigned |
| Deal.advance | Deal | None | Deal.advanced |
Events
| Direction | Event | How |
|---|---|---|
| Emits | Contact.created | By Contact.create |
| Emits | Contact.enriched | By Contact.enrich |
| Emits | Organization.created | By Organization.create |
| Emits | Lead.qualified | By Lead.qualify |
| Emits | Deal.proposed | By Deal.propose |
| Emits | Deal.won | By Deal.win |
| Emits | Deal.lost | By Deal.lose |
| Emits | Lead.converted | By Lead.convert |
| Emits | Contact.merged | By Contact.merge |
| Emits | Organization.merged | By Organization.merge |
| Emits | Lead.assigned | By Lead.assign |
| Emits | Deal.assigned | By Deal.assign |
| Emits | Deal.advanced | By Deal.advance |
| Consumes | Offer.accepted | Moves Lead to converted |
| Consumes | Customer.activated | Moves Customer to activated |
| Consumes | Subscription.unsubscribed | Moves Customer to churned |
| Consumes | Subscription.pastDue | Moves Customer to atRisk |
| Consumes | Dispute.opened | Moves Customer to atRisk |
| Consumes | Invoice.collected | Moves Customer to activated |
| Consumes | Offer.subscribed | Moves Customer to wonBack |
| Consumes | Order.placed | Moves Customer to wonBack |
States
The lifecycle of a Lead:
| State | Meaning | Moves to |
|---|---|---|
new (first) | It raised a hand, and no Worker works it yet. | working by Lead.assign; nurture by Lead.nurture; disqualified by Lead.disqualify; converted on Offer.accepted when the Lead buys on its own |
working | Its owner is in touch and owes the next step. | converted by Lead.qualify; converted by Lead.convert; nurture by Lead.nurture; disqualified by Lead.disqualify |
nurture | Not ready to buy: it is off its owner’s queue and hears from a Sequence until it raises a hand again. | working by Lead.assign; disqualified by Lead.disqualify |
converted | It fits an Offer: a Deal is open for it, or it bought on its own; the Customer record carries on. | None: it ends here. |
disqualified | It fits no Offer, for the reason recorded; its Contact record stays. | None: it ends here. |
Its other Nouns with a lifecycle: Customer.
Who operates it
| Part | This System |
|---|---|
| Accountable | Sales Lead |
| Team | Sales Team |
| Seat | A role agent holds it until a Human is seated. |
| Autonomy | supervised |
| Also calls its Verbs | Sales Engineer, Prospector |
Approvals and limits
| Verb | Rule | Detail |
|---|---|---|
| Deal.propose | A person says yes first | Waits 1 business hour |
| Contact.merge | A person says yes first | Waits 1 business hour |
| Organization.merge | A person says yes first | Waits 1 business hour |
| Deal.propose | Limit for the Sales Lead | $25,000 per call |
| Deal.win | Mandate close-out for the Sales Lead | Marks a Deal won or lost when the buyer signs or says no. |
| Deal.lose | Mandate close-out for the Sales Lead | Marks a Deal won or lost when the buyer signs or says no. |
Processes that use it
| Process | How it uses it |
|---|---|
| Inbound sales | A step calls Lead.qualify |
| Outbound | A step calls Lead.assign |
Rail underneath
| Noun | Stripe object | Source of truth |
|---|---|---|
| Customer | Customer (customer) | The source of truth is db.sb, and Stripe holds a copy written from it. |
Views and dashboards
| View | Shows | Metrics |
|---|---|---|
| Pipeline | Open Deals by stage, with the owner and the next step on each. | Outside paid Orders |
| The Sales Lead’s view | The Metrics its accountable Role answers for. | Paid listing conversion |
Access
What each Access level may call here.
| Access level | May call |
|---|---|
owner | Every Verb (36) |
admin | All but 3 of 36: Contact.merge, Deal.propose, Organization.merge |
member | All but 3 of 36: Contact.merge, Deal.propose, Organization.merge |
viewer | Read only (10 of 36) |
Import and export
None.
Fees and pricing
None.
Availability and limits
| Part | This System |
|---|---|
| Status | Live |
Compliance notes
Every Contact keeps where it came from and its Consent; deciding who to contact stays the founder’s.
Controls it carries:
- Log completeness
- Boundary protection
- Append-only records
- Upstream review
- Point-in-time recovery
- Processing definitions
Related Systems
Example
// A clinic-software Startup gets a demo request from a six-clinic group.
import { $ } from 'startup-builder'
// The routing Policy picks the owner by ICP fit; no owner is named.
await $.Lead.assign({ lead: 'lead_8Kq2' })
// An assisted sale: the Lead becomes a Deal and keeps its Acquisition.
const { deal } = await $.Lead.convert({ lead: 'lead_8Kq2', offer: 'offer_clinic_annual', route: 'deal' })
// Refused, naming each empty field, until the proposal stage's required fields are filled.
await $.Deal.advance({ deal: deal!.$id, stage: 'proposal' })
// The same buyer wrote in from a second address; the merge keeps every Message and Event.
await $.Contact.merge({ contact: 'contact_dup_41', into: 'contact_7Hn3' })