Skip to main content

// prototype · public scoring run

Revenue Signal

Lead scoring a rep can defend.

Explainable lead scoring built from named, typed signals with recency decay. Every score decomposes into the exact signals that produced it, so the number survives a pipeline review instead of getting quietly ignored.

// the failure mode

A black box says an account is hot. The rep asks why, and nobody can answer.

Most lead scoring is a number with no provenance. A model ranks account 47 near the top, the rep cannot see what drove it, and so the score gets treated as noise. The work it was supposed to save still happens by gut feel, and the scoring system becomes a tab nobody opens.

A score is only useful if it is explainable. That means typed signals with weights you can read, recency decay you can reason about, and a trace that opens every total back into its parts. No part of the score should require trusting a model you cannot question.

// the engine

Typed signals. Recency decay. A score with a trace.

01

Ingest typed signals

Pull events into named, typed signals: job change, hiring burst, infra shift, an internal note from the rep. Each signal carries a weight and a timestamp, not a vibe.

02

Decay by recency

Age every signal with an explicit decay curve. A hiring spike from last week counts; the same spike from last quarter mostly does not. The math is visible, not buried in a model.

03

Score with a trace

Sum the decayed signals into a score and keep the decomposition. Every number opens into the exact signals that produced it, so the rep can defend it in a pipeline review.

// the proof

Two hundred accounts, every score traceable.

The public run scores a synthetic-public CRM fixture end to end: every account ingested, every signal decayed, every score decomposed. It surfaces the high-priority accounts and the signal types that drove them, the same output a rep would open before a call.

The figures below come straight from /api/scoring-latest, never seeded, and the run reproduces offline with no credentials. The fixture is synthetic on purpose: real CRM data is private, so the proof uses public data and stays fully reproducible.

querying /api/scoring-latest…

// reproduce

Run it yourself in a minute.

git clone https://github.com/IgnazioDS/revenue-signal-copilot
cd revenue-signal-copilot && pip install -e .
python -m revenue_signal_copilot.scoring_runner

The runner scores the fixture and rewrites the committed artifact the endpoint serves. Every account and signal lives in the public fixture, dependency-free and offline. Persistence is repo-committed JSON, no external store and no secret.

// graduation

The path from prototype.

Today the scorer is honest about its stage: a real scoring engine, a public run, and a trace behind every number, on a synthetic fixture. The next steps are live CRM connectors, learned signal weights with the same explainability, and a brief the rep gets in their inbox. The bar it is working toward is NexusRAG: every claim backed by a public repo, a live deploy, and a number you can check in sixty seconds. AI infrastructure, not AI theater.

Want lead scores your team will actually use?

Start a conversation