Headlessly

Grow

Acquire customers, close deals, track revenue, and support users.

You have users. Now turn them into customers. headless.ly connects the entire revenue pipeline -- from lead to qualified to deal to subscription to payment -- in one graph with real Stripe data.

import { Contact, Deal } from '@headlessly/crm'
import { Metric } from '@headlessly/analytics'

// Qualify a lead
await Contact.qualify({ id: 'contact_uLoSfycy' })

// Create and close a deal
await Deal.create({ name: 'Enterprise', value: 50_000, contact: 'contact_uLoSfycy', stage: 'Proposal' })
await Deal.close({ id: 'deal_k7TmPvQx' })

// Real MRR from Stripe
const mrr = await Metric.get('mrr')

Key Entities

CRM -- People and Relationships

EntityPurposeKey Verbs
ContactPeople -- developers, founders, VCsqualify, capture, assign, merge, enrich
OrganizationOrganizations using your productenrich, score
DealSales opportunities with valueadvance, close, lose, reopen

Billing -- Revenue

EntityPurposeKey Verbs
CustomerStripe Customer, links Contact to billingcreate, update
ProductWhat you sellactivate, archive
PricePricing tiers -- Free, Pro, Enterpriseactivate, archive
SubscriptionActive paying relationshipsupgrade, downgrade, cancel, pause, resume
InvoiceBillspay, refund, void
PaymentMoney movementcapture, refund

Analytics -- Insights

EntityPurposeKey Verbs
EventEvery tracked actiontrack, batch
MetricReal values -- MRR, churn, NRR from Striperecord, aggregate
FunnelConversion flowsanalyze, compare
GoalBusiness objectivescheck, reset

The Revenue Pipeline

import { Deal } from '@headlessly/crm'

// Automated: deal closes -> subscription created -> contact becomes customer
Deal.closed((deal, $) => {
  $.Subscription.create({ plan: 'pro', contact: deal.contact })
  $.Contact.update(deal.contact, { stage: 'Customer' })
})
import { $ } from '@headlessly/sdk'

// Real financial metrics from Stripe
const state = await $.status()
// state.revenue = { mrr: 12_500, churn: 2.1, nrr: 108, ltv: 5_950 }

Support

EntityPurposeKey Verbs
TicketSupport requestsassign, escalate, solve, close, reopen
ContentKnowledge base entries (type: 'Article')publish, translate
MessageCross-channel communication (Email, SMS, Slack, etc.)send, reply, forward
import { Ticket } from '@headlessly/support'
import { Agent } from '@headlessly/platform'

Ticket.created((ticket) => {
  if (ticket.priority === 'High') {
    Agent.deploy('support-bot', { ticket: ticket.$id })
  }
})

On this page