A worked example

The algorithm, on one match.

The case below is a hypothetical. The attorney below is a hypothetical. The numbers, though, are real: each feature score is what matchScore.js would produce if you ran it on these inputs. Nothing is fudged. Where the algorithm is opinionated, we say so.

One case · One attorney · Eleven features · One score


The case

A clean rear-ender outside Reno.

We invented this case to land in the algorithm's honest middle — a strong-but-not-trivial fact pattern. Not a $5,000 fender-bender, not a $4M wrongful-death. The numbers below are inputs the consumer and the platform would supply through ordinary intake.

Consumer
32-year-old driver, rear-ended on I-15 outside Reno
State
NV
Case type
auto
Liability grade
strong
tortl-verified
yes
Multi-vehicle
no
Comparative negligence
10% fault attributed to consumer
Estimated damages
$85,000
Statute expires
14 months out
Urgency
standard
Max contingency
35%
Preferred language
English

The attorney

A Nevada PI attorney with auto as her focus.

The attorney is plausible for this case — licensed where she needs to be, declares auto as a specialty, prices at a typical contingency, and responds quickly. Like the case, the profile fields below are what intake captures on the attorney side.

Bar-licensed in
NV, CA
Practice areas
auto, pi_general
Specialty depth
auto
Typical contingency
33%
Case value range
$50,000 – $500,000
Liability appetite
any
Complexity appetite
any
Avg response time
8 hours
Rating
4.7
Last active
4 days ago
Languages
English, Spanish
Distance to consumer
~22 miles

Case · Rear-end · clear liability · NV

specialty depth +0.16
recovery prob. +0.14
geographic prox. +0.12
fee alignment +0.12
+ 7 more features +0.42
1.00

no penalties · quality boost applied, capped at 1.00


The weights — client view

What the consumer's ranking optimizes for.

We're scoring this from the consumer's perspective, so we use the client-facing weight table. Specialty depth, reputation, and recovery probability carry the most weight; language match and case value fit carry the least.

Specialty depth 16
Reputation 15
Recovery probability 14
Geographic proximity 12
Fee alignment 12
Response-time fit 10
Liability appetite 7
Case complexity fit 5
Activity recency 4
Language match 3
Case value fit 2

Weights sum to 100. Each feature returns a value in [0, 1]. The weighted sum, divided by 100, is the pre-penalty score.


The feature scores

Every feature, scored.

For each of the eleven features, here is the [0, 1] value the scorer produces on the inputs above, the weight that multiplies it, and a one-sentence explanation of why the number landed where it did.

Feature Weight Score
Specialty depth 16 1.00
Attorney lists 'auto' in specialtyDepth — a declared focus, not a checked box. Full credit.
Reputation 15 0.94
Rating 4.7 ÷ 5. Not in cold-start, so the actual rating is used directly.
Recovery probability 14 0.85
Strong liability (0.85) × auto baseline (1.00) × tortl-verified (1.0) × statute runway (1.0). The case will pay.
Geographic proximity 12 1.00
22 miles, inside the 25-mile band. Full credit.
Fee alignment 12 1.00
Consumer cap 35%, attorney typical 33% — fits cleanly inside, no negotiation needed.
Response-time fit 10 1.00
8-hour response on a standard-urgency case, well under the 24-hour ceiling.
Liability appetite 7 0.85
Strong case × attorney appetite 'any'. The table assigns 0.85 here — 'strong_only' would have scored 1.00.
Case complexity fit 5 0.95
Complexity score 0.15 (simple) against 'any'-appetite attorney.
Activity recency 4 1.00
Active 4 days ago, inside the 7-day band.
Language match 3 1.00
Consumer wants English; attorney offers English and Spanish.
Case value fit 2 1.00
$85k sits inside the $50k–$500k declared range.

Multiplying each score by its weight and adding the eleven contributions:

16.00 + 14.10 + 11.90 + 12.00 + 12.00 + 10.00 + 5.95 + 4.75 + 4.00 + 3.00 + 2.00 = 95.70

That is the weighted sum. Divided by the total weight (100), the normalized pre-penalty score is 0.957.


The penalty check

Five thresholds. None of them tripped.

The weighted average can hide a single catastrophic feature, so the algorithm runs five threshold checks afterward. On this match, none fire — which is exactly what a clean, well-fit case looks like in the machinery.

Feature Threshold This match
Recovery probability < 0.20 0.85
No — well above threshold.
Specialty depth < 0.50 1.00
No — full credit, not even close to the soft-fail band.
Response-time fit < 0.30 on urgent n/a
Not applicable — this case is standard urgency, the penalty doesn't evaluate.
Intake completeness < 0.30 (attorney view) n/a
Not applicable from the client view; the attorney-side penalty doesn't fire here.
Fee alignment < 0.20 (client view) 1.00
No — full credit, no penalty.

Score after penalties: 0.957 (unchanged). The penalty stage exists precisely to catch the matches this one isn't.


The high-quality boost

The one asymmetric lift — and it applies here.

A match qualifies for the 1.10 multiplier when four conditions all hold: the case is tortl-verified, liability is graded strong, estimated damages are at least $50,000, and the attorney's rating is 4.5 or higher. On this match:

tortl-verified
Yes.
Liability grade
Strong.
Estimated damages ≥ $50,000
$85,000. Yes.
Attorney rating ≥ 4.5
4.7. Yes.

All four conditions hold. The boost applies: 0.957 × 1.10 = 1.053. The code caps the result at 1.00 — so the post-boost normalized score is 1.00.

This is a meaningful detail. The boost can push a strong-but-not-perfect weighted sum to the ceiling. It is the only place in the algorithm where the ranking model nudges a result upward, and the cap is what keeps the boost from running away.


The final score

100

1.00 × 100, rounded. The integer the consumer would see on this match card in the result set.

Weighted sum 95.70 → normalized 0.957 → no penalties → quality boost × 1.10 = 1.053 → cap at 1.00 → score 100.


In practice

What this match looks like in a real result set.

From the consumer's side, this attorney ranks at or near the top of their result set. A score of 100 is rare — it requires the boost to bind against the cap — and it signals a match where every feature is at or close to its best value. Most real matches score in the 60s and 70s.

From the attorney's side, the same case is scored under a different weight table — the attorney-facing weights. There, the dominant features are expected fee value (23) and recovery probability (19), and a new feature comes online: intake completeness (11), which doesn't appear at all on the client side. Specialty depth drops from 16 to 14; reputation falls out entirely. The same fact pattern can score very differently on the attorney side — usually lower, because the attorney's weights punish vague intake and rough fee math more than the consumer's weights do.

On this case, the attorney-side score is also strong: the case file is complete, expected fee math works (≈ $85,000 × 0.85 × 33% ≈ $23,800, comfortably inside the attorney's range), liability is graded strong, and recovery probability is high. Different weights, same conclusion: a match worth surfacing on both sides.

Example match 1.00
Nevada PI attorney (example)
Reno, NV · auto specialty · 4.7 rating · 8h response
specialty depth
0.16
recovery prob.
0.14
geographic prox.
0.12
+ 8 features
0.58
The same case, the same attorney, the same score — surfaced to the consumer this way.

One case, one score

The math is on this page. There is no other math. A different attorney, a different case, a different score — but the calculation is the same one, every time.

Ready to be the attorney in the example

Lock in the founding rate before consumer access opens.

Free until launch

More to read