A match score is only useful if you can argue with it. A single number tells you a job ranked high. It does not tell you whether it ranked high because the work fits or because the salary was generous and the job was remote. So Zorlya scores four things separately, shows you each one, and only then combines them.
The four parts
Resume fit asks whether the work in the posting looks like the work you have done. Your headline, your skills and the track’s keywords are turned into an embedding, a list of 1,024 numbers that places text by meaning rather than by wording. The posting gets the same treatment, and postings close to yours in that space are shortlisted and scored by that closeness. When you refresh your matches, a model also reads the shortlist against passages of your resume, and resume fit becomes 65% its overall rating and 35% its rating of how well the role and the field line up.
Skills match compares the skills a posting asks for with the skills on your profile. Both lists are normalised first, so “React.js”, “ReactJS” and “React 18” are one skill and not three. A skill you have exactly counts in full. A skill you lack, where you have another from the same category, counts for 0.4 of one. If you cover every skill the posting names, the score is 100. That case is arithmetic, and no model gets a say in it.
How are salary fit and location fit scored?
Salary fit compares the top of the posted range with the salary floor you set. At twice your floor it scores 100. At your floor it scores 70. Below 70% of your floor it falls under 30. If you set no floor, salary does not decide this for you, so it is left out of the score entirely when the posting is silent too.
Location fit reads whether the job is remote, hybrid or on site, where it is, and what you told Zorlya you will take. A remote role scores 100 unless the posting restricts it to US work authorisation and you are outside the US, which drops it to 20. An on-site role in your city scores 100. If you asked for remote only, an on-site role is capped at 15 however well it fits otherwise. It stays in your feed, ranked low, because a preference that hid jobs silently would be worse than one that ranks them.
How the parts combine
Each part has a weight. The default track gives resume fit 40%, skills 30%, salary 20% and location 10%. A track is a kind of role, such as backend engineering, and each track carries its own weights. A backend track and a developer relations track should not rank the same posting the same way.
When a posting states a seniority level, a fifth signal joins in at 10% of the total: how far that level is from the level your experience suggests. A one-step gap scores 75, two steps 45. Postings that state no level are scored on the four parts alone.
Missing data is left out, not averaged
This is the rule that matters most, and the easiest one to get wrong.
Most postings publish no salary. If a tool scores an unknown salary as a neutral 50, that 50 still sits inside a weighted average and pulls every score toward the middle. We measured it. At the default weights, a job scoring 90, 95 and 100 on the other three parts came out at 84.5 with the neutral 50, and 93.1 with salary left out. A poor match at 20, 15 and 30 came out at 25.5 instead of 19.4. The neutral value made good jobs look worse and bad jobs look better, which is the opposite of what a ranking is for.
So a part with nothing to measure is dropped, and its weight is shared among the parts that did measure something. If a posting names no skills at all, skills match starts from 50, because there is no evidence either way and the screen says so.
A reason for the jobs you refresh
When you refresh your matches, Zorlya writes two or three sentences for each job it keeps, for that job and your resume. A job scored in the background, before you refresh, has its parts and no reason yet. The sentences name at least one skill you have that the posting asks for, and one part of your background that maps to a specific requirement. The model is told not to use phrases such as “strong background in” or “aligns well with”, because those phrases fit every job and so tell you nothing about this one.
The reason is there so you can disagree with it. If the explanation credits you with a skill you only listed and never used, you know to weigh that score down. If it names the exact project the posting is describing, you know the number is earned.
What the score is not
It is not a prediction that you will get the job. It says how closely a posting matches what you have done and what you asked for. It cannot see who else applied or what the hiring manager wants that the posting left out.
It is also only as good as your profile. A resume that lists skills without the work behind them gets a skills score it has not earned and a resume fit that is lower than it should be. The fix is the same as for a person reading it: say what you built, with numbers, and the score follows.
Reading your own scores
- A high total with a low location fit usually means the work fits and the arrangement does not. Check whether the employer is flexible before you rule it out.
- A high skills match with a low resume fit means you have the keywords but not the shape of the work. These are the roles where a cover letter has the most to do.
- A posting with no salary is scored by whether you set a salary floor. With no floor, a missing salary is left out of the total, and a stated one scores 55. With a floor set, a silent posting scores 45 and counts, because a floor means salary matters to you. The salary post in this blog has the details.
Every part of a score is shown on the job’s page, and each track lists its weights. If one of them looks wrong for a posting, it probably is, and the breakdown will show you which.