PPactDocs
CRM

Leads

Capture, score, route, and convert pre-qualification records into contacts, companies, and deals with Pact's lead lifecycle.

A Lead is a pre-qualification record — someone who has shown interest but hasn't yet been vetted into your core CRM. Leads live separately from Contacts and Accounts so that raw, unverified inbound never pollutes your qualified data. Work each lead through its lifecycle, then convert the ones that qualify.

Find your leads at /leads (list view) and open any one at /leads/[id] (detail view).

What a lead carries

Every lead tracks the context you need to qualify and route it:

FieldWhat it holds
SourceWhere the lead came from
OwnerThe rep responsible for working it
RoutingAssignment to a queue
AttributionUTM parameters and first-touch detail
FormThe originating capture form, if any
ScoreA 0–100 engagement + intent score

Lifecycle

Leads move through a fixed set of statuses:

  • new — just captured, not yet worked
  • working — a rep is actively engaging
  • mql — marketing-qualified
  • sql — sales-qualified
  • disqualified — not a fit (for now)
  • converted — promoted into your CRM

Transitions follow an allowed-transitions map, so a lead can only move between valid states. A disqualified lead isn't a dead end — it can re-open back to new or working when circumstances change.

The core operations on a lead are: assign, work, route, recompute score, view score history, view attribution, find duplicates, and convert.

Lead scoring

Each lead gets a 0–100 score that blends engagement and intent. Scores fall into bands so reps can prioritize at a glance:

BandThreshold
Champion≥ 90
Hot≥ 70
Warm≥ 40
Coldbelow 40

Signals come from tracking-event activity plus ICP title-keyword matching. Negative signals lower the score, so a lead can cool off as well as heat up.

Every recompute writes a snapshot to the lead's score history, giving you an audit trail of how a lead's score moved over time. When a lead crosses your tenant's MQL or SQL thresholds, its status is promoted automatically.

Scoring rules are tenant-configurable

Scoring is a JSON ruleset merged over Pact's defaults. Admins edit these rules per tenant — there are no shared, global scoring weights. Tuning thresholds, signals, and ICP keywords is an admin-only task.

Conversion

When a lead qualifies, convert it. Conversion:

  1. Runs a duplicate check before anything is created.
  2. Spawns a Contact from the lead.
  3. Optionally finds or creates a Company.
  4. Optionally creates a Deal, with stage, amount, currency, probability, and close date.

After conversion, the lead is stamped read-only: its status becomes converted and it links out to the records it created. A lead.converted event fires so downstream automations and analytics can react.

Capture forms

Public lead-capture forms turn website visitors into leads. Forms are managed under /admin/forms (admin-only).

On submit, the handler:

  1. Captures name, email, phone, company, and title.
  2. Records UTM parameters and the source URL for first-touch attribution.
  3. Links the form and submission to the new lead.
  4. Scores and routes the lead automatically.

Conversion into a Contact, Account, or Deal is a separate, manual step you take later from the lead detail view — capture only creates the lead.

Anti-bot protection

Forms can use a tenant-supplied reCAPTCHA key for anti-bot screening. Enter that key through the in-app credential UI — capture-form intent and anti-bot credentials are never stored as environment secrets.

What's next