Skip to main content
POST
Score
Return your workspace’s own ICP judgment on a lead: a 0–100 ICP fit + tier, a decaying intent score, and the layered breakdown — Fit · Pain · Intent · Ability. Any layer you have no evidence for comes back unknown, never 0, alongside a missing worklist that tells your agent exactly what to enrich next. There are three ways to call it:
  • A lead already in Nous — pass an identifier. It’s scored off the resolved claims on that account, the score is staked into the graph, and it keeps evolving on its own afterwards.
  • One cold lead not in Nous — pass attributes. It’s scored inline from what you have (title, company, keywords); nothing is written to the graph.
  • A whole external list — pass leads (up to 1000). All scored inline in one call, the model loaded once, nothing written. Built to triage a big list before you decide which accounts to bring in.
score needs a scoring model. Build one first with build_icp_model, then this endpoint returns live scores.

Request

Body

string
One lead already in the graph — an email, domain, LinkedIn URL, or entity UUID. Scored off its resolved claims and staked.
object
A cold lead not in Nous, scored inline from what you have — nothing is written. Fields (with friendly aliases): job_title (title), seniority, company_type (type), industry, employee_count (company_size, size), location (country), and keywords or headline (a raw LinkedIn headline is matched for keyword-based signals). You may also pass any signal.* you’ve already computed. If an identifier is given but isn’t in the graph, attributes is used as the fallback.
array
An external list scored inline in one call (up to 1000). Each item is an attributes object (same fields as above), optionally with a ref (or id) that is echoed back so you can match results to your rows. Nothing is written to the graph.
array
A batch of graph leads (emails / domains / LinkedIn URLs / UUIDs), max 100 per call. Each is resolved and scored like identifier; the response is a results array.
string
Optional hint about why you’re scoring. Recorded; does not change the score.

Response

A scored lead — the layered read

The layered block is the important part:
object
The resolved layers, { fit, pain, intent, ability } — each 0–100. A layer with no observed evidence is omitted, not set to 0. For a cold lead you’ll usually see fit (and pain, if the headline carried the signal) and nothing else yet.
array
The layers still unknown — your enrichment worklist. ["pain","intent","ability"] means: resolve these before treating the account as fully judged.
number
The combined 0–100 score — the geometric mean of the known layers only. Unknown layers are excluded, never zeroed, so a partly-observed lead is neither dragged down nor inflated. null when nothing is resolved.
string
The recommended action from the shape of the resolved hypothesis: research, nurture, work now, enrich, or suppress.
The flat icp.score is a single number for back-compat. On a cold lead it reflects Fit — it never fabricates a Pain number and an unobserved signal never lowers it. Read layered.missing to know how much is actually known, not just icp.score.

A cold lead scored inline

Same shape, flagged so you know it isn’t in the graph:

An external list

Partial — in the graph but too thin to stake

A lead that carries some claims (keywords, company, location) but none of the strict scoreable fields is not staked (that protects calibration), yet still resolves what it can:

Not resolvable

The layered model

The score isn’t one number — it’s four independent layers, each resolved on its own evidence: The score is a progressively-resolved hypothesis: a LinkedIn headline resolves Fit with real confidence and leaves the rest unknown (never 0), with missing telling you what to enrich. As enrichment arrives, the layers light up and priority becomes the blend of all four. Tune the model on the ICP page, or with build_icp_model.

When to call it

  • Triage a cold list before spending on enrichment — leads, nothing written.
  • Score one prospect from a LinkedIn scrape — attributes.
  • Get the live number on an account already in Nous — identifier.
  • Read layered.play to decide the next action; read missing to know what to enrich.