Engage Scores

Every readiness dot, meter and band in Engage comes from one function that runs over your own data. It is a fixed arithmetic formula — no model, no training, no inference — and this page publishes it in full, because a score you cannot explain to a colleague is a score nobody trusts.

Say that part out loud before anything else: the numbers on this page are not AI output. The Recompute scores button is styled like the rest of Leed’s AI affordances and it is gated by an AI privilege, but what it runs is a hundred lines of addition over fields you can see on the contact record. If a contact scores 68 you can work out why with a calculator.

What a score is

A score is a stored row, attached either to a contact or to an account, holding four values:

ValueRangeSet for contactsSet for accounts
Readiness0–100YesYes
Fit0–100YesYes
Intent0–100YesYes
Journey stageone of fourYesYes

The word to hold on to is stored. Scores are written by the recompute and read back on every Engage screen; nothing is calculated while you look at it. A contact that has never been through a recompute has no row at all, and every score surface says so honestly — the Signals facet reads Not scored yet., the status strip shows dashes, and the Leed note tells you to run a recompute.

Fit

Fit answers how much does this person look like somebody we sell to? It is profile completeness plus one quality signal, and it starts everyone at 25.

fit = 25 + 25 \cdot corporate + 15 \cdot fullName + 15 \cdot title + 10 \cdot linkedIn + 15 \cdot account + 5 \cdot phone
SignalPointsHow to satisfy it
Baseline25Existing at all
Corporate email domain25The email domain is set and is not one of the ten consumer domains below
First and last name15Both — one alone scores nothing
Job title15Any non-empty title
LinkedIn URL10Any non-empty URL
Linked account15The contact is attached to a business in Accounts
Phone number5Any non-empty phone

The maximum of those parts is 110, and the result is rounded and clamped to 100 — so a fully-filled corporate contact reads 100 and there is a little headroom above it that you never see. A contact with nothing but a consumer email address scores the bare 25.

Why my consumer-domain contacts score lower

Exactly ten domains are treated as non-corporate:

gmail.com · yahoo.com · hotmail.com · outlook.com · aol.com · icloud.com · proton.me · gmx.com · live.com · msn.com

An address on any of those forfeits the 25-point corporate bonus. Everything else — including a domain Leed has never seen, a university address and a one-person consultancy — counts as corporate. The list is a fixed constant; there is no setting for it and no way to add your own.

There is a second, quieter effect. Fit feeds readiness at three tenths of its value, so the 25 points move readiness too. A workspace selling to individuals rather than to businesses will see its whole population sit lower than a workspace selling to companies, which is a reason to read readiness relative to your own list rather than against an absolute 70.

Intent

Intent answers how much buying signal has this person actually shown? It is a baseline set by how they entered your funnel, plus their email engagement.

SourceBaselineThen add
form — filled in one of your forms5518 per recorded email click, and 6 per recorded open
salesforce — arrived over the CRM webhook45"
valid_email — identified by opening or clicking an email30"
mcp — signed in to your documentation20"
upload — came in on a CSV10"
manual, or any source not listed15"

Clicks and opens are counted across every email that contact has ever been sent, not over a window. An open that Leed classifies as an Apple Mail Privacy Protection prefetch is recorded as a machine open and does not count. The sum is rounded and clamped to 100, so a heavily-engaged contact tops out rather than running away.

The ordering is the interesting part. Somebody who filled in a form starts 45 points ahead of somebody you imported, before either of them has done anything — which is the product’s opinion that a person who came to you is worth more than a person you bought. Whether you agree is a matter for how you read the bands.

Readiness

Readiness is the blend, and it is the number the dots, the meters, the default sort and the Hot and Stalled views all key off.

readiness = 0.5 \cdot intent + 0.3 \cdot fit + 12c + 4o

where c is the contact’s total email clicks and o their total opens. Rounded, clamped to 100.

Clicks appear twice — once inside intent at 18 points each, and again here at 12. That is deliberate, not a bug: a click is the strongest signal Leed can observe without you telling it anything, so it is weighted into both the component and the blend. The practical consequence is that email engagement moves readiness faster than any profile field can. Two clicks are worth more than a complete profile.

Note also that fit contributes only three tenths of itself, and the baseline fit of 25 is worth 7.5 readiness points. A contact you have never emailed and who came in on a CSV sits at around 15 readiness however completely you fill in their record.

Journey stage

The stage is banded from the stronger of readiness and intent — not from readiness alone.

StageLabel shownReached when max(readiness, intent) is
awarenessAwarenessbelow 25
considerationConsideration25 to 49
evaluationEvaluation50 to 74
decisionDecision75 and above

Using the maximum rather than readiness is what stops a brand-new form fill from reading as Awareness: that contact has intent 55 and readiness around 24, and the stage that matters is the 55.

Committee role

A contact’s buying-committee roles are not part of the score, and nothing computes them. A person sets them — none, one or several per contact — from the Roles row on the contact’s record or from the member list on the account page, and a recompute never reads or changes them. Leed used to guess a role from the job title; it no longer does. Accounts describes the committee view.

Persona match

Persona matches are not part of the score either. Each persona carries its own list of title keywords, and a contact is tagged with every persona whose keyword appears in their job title as a whole word — no role lookup, no confidence figure, no first-persona-wins. A person can also add or remove a persona on the contact’s record by hand.

The one link to scoring is timing. Every recompute ends by re-applying every persona’s keywords to every contact’s title, so Recompute scores is also how contacts imported or retitled since the last keyword change pick up their personas. Saving a persona’s keyword list does the same on its own. Personas covers the keywords and the manual overrides.

Account scores

An account’s score is the plain average of its member contacts’ numbers:

  • readiness, fit and intent are each averaged across every contact linked to the account and rounded
  • the journey stage is then banded from those averages by the same rule as a contact’s

Accounts are scored on the same four values as contacts, which is why the account’s Engagement facet shows Readiness, Fit, Intent and Stage. The buying committee is not part of the score: it is assembled from the roles people set on the account’s contacts. The full account read-out is on Accounts.

An account with no linked contacts gets no score row at all.

The whole pipeline in one picture

flowchart LR
    subgraph inputs["Fields on the contact"]
        D["Email domain"]
        N["First + last name"]
        T["Job title"]
        L["LinkedIn URL"]
        A["Linked account"]
        P["Phone"]
        S["Source"]
    end
    subgraph email["Email engagement"]
        O["Opens<br/>machine prefetches excluded"]
        C["Clicks"]
    end
    D --> FIT["fit<br/>25 + 25 + 15 + 15 + 10 + 15 + 5"]
    N --> FIT
    T --> FIT
    L --> FIT
    A --> FIT
    P --> FIT
    S --> INT["intent<br/>source baseline"]
    C -->|"+18 each"| INT
    O -->|"+6 each"| INT
    INT -->|"× 0.5"| RDY["readiness"]
    FIT -->|"× 0.3"| RDY
    C -->|"+12 each"| RDY
    O -->|"+4 each"| RDY
    RDY --> STG["journey stage<br/>banded on max(readiness, intent)"]
    INT --> STG
    RDY --> ACC["account score<br/>average of member contacts"]
    FIT --> ACC
    INT --> ACC
    ACC --> ASTG["account journey stage"]
    T -.->|"after scoring"| PER["persona tags<br/>re-synced from keywords"]

Two things the picture makes obvious that a list does not: clicks reach readiness by two separate routes, and the persona sync hangs off the end of the run without feeding any number back into it.

Recomputing

Recompute scores sits at the right of the Engage header on the Contacts and Accounts sections — the two whose rows carry a score — whatever is selected. The other sections do not show it.

The Engage header with the Recompute scores button in its Recomputing… disabled state

What it does, precisely:

  • It rescores every contact and every account in the workspace. It is not scoped to whatever you happen to have selected — the selection is irrelevant to it.
  • It finishes by re-applying every persona’s title keywords to every contact, so persona tags catch up with any imports and title edits since the last sync. It never touches committee roles.
  • It needs ai:write (Content Writer and above). Without that privilege the button is not rendered at all, and the rest of Engage works normally.
  • It runs inline, while you wait. The button reads Recomputing… and is disabled for the duration, and the response reports how many contacts were processed. On a large workspace this can take a while; there is no background job and no progress bar.

Both halves are available to an AI client, under the same permissions: get_engage_scores reads one contact’s score, one account’s, or the whole workspace’s, and recompute_engage_scores triggers the same run the button does. The contacts and accounts tool reference has the argument shapes. Note that the tool description calls the recompute asynchronous; it is not — the request runs the whole pass before it answers.

Where the numbers turn up

A contact's Signals facet showing the readiness meter over Readiness, Fit, Intent, Stage and Computed rows
SurfaceWhich number
The dot on every list row, in Accounts and ContactsReadiness
Sort by readiness in the left panel’s Filter & view menuReadiness
The status strip on a contact and on an accountReadiness, Fit, Intent and the journey stage
The Signals facet on a contactReadiness meter, then Readiness, Fit, Intent, Stage, Computed
The Engagement facet on an accountReadiness, Fit, Intent, Stage, linked contacts, Computed
The Hot leads and Stalled saved viewsReadiness, banded at 70 and 45
The persona and role clusters in Contact filtersNone — they read the persona and role tags, so an unscored contact still appears in them

Readiness at a glance

Dot colorReadinessAlso means
Green75 and aboveAlways in Hot leads
Amber50 to 74In Hot leads from 70; never in Stalled
Graybelow 50, or never scoredIn Stalled below 45; an unscored contact is in neither view

Improving a score

Because the formula is fixed and published, “raising readiness” is a concrete exercise rather than a vibe.

The two levers that move it most are email clicks and the source a contact arrives on, and neither is something you edit. The one you can act on directly is fit — and the largest single item there, after the corporate-domain bonus you do not control, is the 15 points for a job title. Asking one more question on your form is the cheapest 15 points available; the form field reference lists what maps onto which contact field. Linking a contact to an account is another 15, and that happens for free when a form or an import supplies a company name.

Intent is driven almost entirely by email engagement, which is written by the open and click trackers described in tracked links and open tracking. A contact you never email cannot accumulate intent beyond their source baseline, whatever else they do on your site — on-site page views do not feed intent.

Personas and committee roles do not feed the score, so tagging a contact with either never moves their readiness. If a whole segment of your list is scoring lower than it should, look at the inputs above — source, email engagement and the profile fields — rather than at the arithmetic.

ESC