Product · Sales

A pipeline that fills itself from real usage.

HAL's CRM is deliberately small: companies, contacts, stages, deal values. Its edge is what flows in — every identify call, chat, and product event is already attached.

The three records

  • Company — the deal-holding record. Carries the pipeline stage, deal value, domain, industry, notes, and health signals.
  • Contact — a person. Emails, tags, notes, and links to one or many companies.
  • Visitor — a browsing session. Anonymous until identified, then attached to a contact.

The full ownership rules — which record holds which field, and what happens on identify — are in CRM data model.

How data enters

There are four inlets, and they all converge on the same records:

  • Widget identifyHalWidget.identify() from your site. The most common path: signed-in users appear in CRM automatically.
  • Server-side identifyPOST /api/widget/identify from your backend.
  • Public API/api/v1/contacts and /api/v1/companies with an API key. For billing webhooks, data warehouse sync, and integrations.
  • Dashboard — manual entry and CSV import with duplicate merging.

Stages

Stages are fully custom per project: name, color, order, and optional probability. The board view shows companies as cards with column totals — one-time, MRR, or ARR semantics per your sales currency setting.

Product signals respect stage precedence: writes from the widget advance deals forward in your stage order but never backward, unless the write explicitly requests exact mode. Manual moves from the dashboard always win. Details in CRM data model.

Deal values

Set deal value from the dashboard, the API (deal_value on companies), or the widget: HalWidget.setDeal({ deal_value: 1800 }). Values roll up into board totals and revenue reporting. Interpretation (one-time vs MRR vs ARR) is a project setting so totals mean one thing.

Health signals

Define rules — "no conversation in 14 days", "usage dropped below X", "open ticket + trial ending" — and HAL surfaces a "needs attention" state on the company. Signals feed the operator loop, so at-risk accounts reach your focus instead of a report nobody reads.

Attribution

Because visitors, contacts, and companies are linked, HAL can trace a revenue line: anonymous visit → identified user → company → stage changes → won. The marketing view reports qualified pipeline and won revenue attributed back to the original touchpoints.