InsightsHiring guides

Hiring guidesMay 23, 20264 min read

How we score candidates

Inside the scoring layer that ranks every candidate-to-role pair on the esyrecruiters platform — what signals we look at, what we deliberately ignore, and why the recruiter is still the decider.

Every senior placement starts the same way — too many CVs, not enough hours. A senior backend search in Israel pulls 200+ applications in the first ten days. A founding-engineer search pulls fewer, but each one needs a close read. Either way, the recruiter's bottleneck is the same: read everyone properly, miss nothing, don't waste anyone's time. Scoring exists to make that bottleneck honest.

Here's how it works. When a candidate lands on a search, the platform reads the parsed CV against the job description and assigns a 0-10 score. That score is a shortlister, not a verdict. A recruiter still reads every candidate above the threshold, and reads a sample below it. The score sets the reading order — it doesn't replace the reading.

Two layers feed the number. The first is a language-model pass that reads the JD and the CV together and scores against fixed anchors — 9-10 is "strong fit, recommend submission", 5-7 is "partial fit, significant gaps", and so on. The model is told to be conservative: a 9+ should be rare. The second layer is a deterministic overlay we wrote in Python — named signals that each add a small positive or negative delta on top of the model's baseline. No single signal can swing the score by more than a few points, and the total downward adjustment is capped so one missing item can't dominate.

What signals does the overlay actually look at. Must-haves and nice-to-haves from the JD against the candidate's skills, with a recency tier (a tech last touched in 2019 isn't worth the same as one shipped this quarter). Years in the right profession and the right industry — counted from work history, not from a degree (a Shenkar fashion grad who never held a fashion job has zero fashion-industry experience for this purpose). Seniority band against required band. Required languages. Salary band against budget band. Geo distance for on-site roles, skipped when the candidate is remote-OK. Shabbat: an observant candidate against a role that requires Saturday work is a hard negative — not because of who the candidate is, but because the role won't work for them.

Two signals are positive-only bonuses tied to Israeli context — a +1.0 nudge for a degree from a tier-1 Israeli university (Technion, Tel Aviv University, Hebrew University, Weizmann) and a +1.0 nudge for service in an elite IDF tech track (8200, 81, Mamram, Talpiot). These are signals our senior-engineering clients ask for by name. They never penalize a candidate without them — they raise the floor for those who have them.

Now the part that matters more than the signals — what we deliberately don't score on. Age, as a direct contribution. Gender. Marital status. Ethnicity. Photos — we don't look at them, the LLM doesn't see them, the overlay has no field for them. Anything we'd infer from a name. None of these appear in the scorer. Read the file; that's the point. Hiring bias in Israeli tech is a real problem, and the simplest way to not be part of it is to not feed it into the math in the first place.

The overlay also refuses to mistake school for experience. If a JD asks for fashion-industry experience and a candidate has a fashion degree but no fashion job in their work history, that's a "no industry match" signal — not a partial credit. The LLM is told the same in its prompt. This sounds obvious; in practice it's the single most common way candidates get over-scored against a domain-specific JD.

Every score is paired with a breakdown — every signal that fired, with a human-readable reason. "missing must: Kubernetes, Terraform". "27 km from job, on-site role". "Degree from Technion". The recruiter sees the math, not just the number. When they push a candidate to a client, they can defend the score and the gap in the same breath. When they pass, they can tell the candidate why in a way that respects their time.

Scores are versioned. When the JD changes, every candidate on the search is marked stale and re-scored. When a candidate's CV is re-parsed, every search they're on is marked stale and re-scored. Stale scores don't get sent to clients. A score on a 2026 JD against a CV the recruiter last looked at in 2025 is the kind of small dishonesty we built the platform to prevent.

None of this is magic. It's a careful split — a model that reads the JD and the CV the way a senior recruiter would, and a deterministic overlay that bakes in the Israeli-market signals the founder has learned to weight over twenty years inside the people functions of major Israeli employers. The score sets the order. The breakdown shows the work. The recruiter makes the call. That's the part that doesn't change.

Insights →
Open roles →Hire talent 050-2204177