Health score
Every pipeline record shows a health score from 0 to 100 — a single headline number, colored red below 60, amber from 60 to 79, and green at 80 and up. It's computed fresh every time it's shown and never stored, so it can never go stale: it's always the average of four separately-visible components, Intent, Engagement, Fit, and Momentum, rounded to the nearest whole number.
The breakdown view
Clicking a card's score on the board — or opening the full record — expands a 2×2 grid with each of the four components as its own plain number. Only the headline score gets the red/amber/green coloring; the four components underneath are always shown as plain text.
Health score: 82
Intent
75
Engagement
100
Fit
65
Momentum
88
Intent and Engagement show "—" instead of a number until a record's very first real signal arrives — a reply, an open, or a click. Fit gets a real value the moment the record is created (it only needs the contact's own existing data, not an activity signal). Momentum is never blank — it's always computed live from the record's current stage and how long it's been there.
Intent
Reads the record's latest inbound reply, checking its manual tag first and its AI classification second (a human's own tag always outranks the AI's guess when both exist on the same reply).
| Condition | Intent score |
|---|---|
| Record is Disqualified | 0, always — overrides everything else below |
| Latest reply tagged/classified Meeting Requested | 100 |
| Latest reply tagged/classified Interested | 75 |
| Latest reply tagged/classified Objection or Question | 60 |
| No reply yet, or an unrecognized combination | 50 (neutral) |
Engagement
Reads whichever of a reply, a click, or an open happened, in that strict priority order — a reply always outranks a click, and a click always outranks an open, regardless of which one is more recent.
| Condition | Engagement score |
|---|---|
| Any reply exists | 100 |
| No reply, but a click exists | 70 if within 24h, 50 if within 72h, 25 if older |
| No reply or click, but an open exists | 40 if within 24h, 25 if within 72h, 10 if older |
| None of the above | 50 (neutral) |
Fit
Starts at a neutral 50 and adds points for real firmographic and role data already on the contact — seniority, company headcount, industry, and job title.
| Signal present on the contact | Points added |
|---|---|
| Seniority text containing a senior keyword (owner, founder, chief, C-level, partner, VP, head, etc.) | +25 |
| Seniority text present but no senior keyword matched | +10 |
| Company headcount (a number or a range like "51-200") | +10 |
| Company industry | +5 |
| Job title | +5 |
The total is capped to the 0–100 range. If none of these fields are present at all, Fit stays at the neutral 50.
Fit measures how much real firmographic and seniority signal exists on a contact — company headcount, industry, job title, and whether their seniority suggests a genuine decision-maker. It's a data-richness-and-seniority signal, not a comparison against a stored ICP definition — ForgeSend doesn't require you to configure a target industry, company size, or seniority list before Pipeline starts scoring leads.
Momentum
The only component that's never stored — it's recalculated live every time, from the record's current stage and how long it's been sitting there.
| Stage | Base momentum |
|---|---|
| Active, Meeting Booked, Handed to Client | Flat 100 |
| Disqualified | Flat 0 |
| Engaged | 100 for the first 7 days in-stage, decaying in a straight line to 0 by day 14 |
| Interested, Meeting Requested | 100 for the first 48 hours in-stage, decaying in a straight line to 0 by hour 96 |
On top of that base, a flat −20 penalty (never below 0) applies if this contact has ever had a hard bounce or an unsubscribe on this same campaign — regardless of the record's current stage, and regardless of how long ago that bounce or unsubscribe happened.