How matching works
ApplyHalo shows fewer jobs on purpose. A role reaches your list only if it passes every must-have you set. The checks below are hard rules: a high score, an AI opinion or a keyword match can never override them.
The checks every role must pass
- The employer is verified. Its official website links to the job board we read (Greenhouse, Lever or Ashby). The check expires after 90 days.
- The posting is live. We re-read each employer’s board and drop roles not confirmed within 72 hours.
- The title is your role. We compare the job function, discipline and level. One shared word is never enough: a Product Designer is not a Product Manager, and two levels above or below you is a stop.
- Work arrangement and place. Read from the employer’s own words. A city alone doesn’t make a job “onsite”, and remote-only means a confirmed remote role open to where you live.
- Salary floor. Only employer-published base pay counts. A range passes if its top reaches your floor; commission (OTE) never does. Jobs with no published pay are hidden unless you allow them.
- Employment type. From the job board’s field, the title, or an explicit sentence in the posting. If none states it, the role is hidden unless you allow unknown types.
How the remaining roles are ranked
Roles that pass get a 0–100 score built only from factors that differ between them: title closeness (35), skills you listed that the posting names (20), posting skills found in your resume (20), years of experience asked for (10), seniority (10) and salary against your floor (5). Factors we can’t check — for example resume skills before you upload a resume — are left out rather than guessed. The score is a ranking aid, not a probability of being hired.
Our AI then reads your resume against the job description and gives a second opinion. It can flag a weak fit with reasons, but it never changes the score, never moves a role in the list and never hides one: a flagged role keeps its place in score order with an “AI: weaker fit” note. The badge on each card comes from the score band alone (close 65–100, possible 45–64), and when the AI and the rules differ by 15 points or more the card says so. Until it has run, a match says “AI check pending”.
What our tests measured (2026-11-03)
We keep a test set of labeled candidate–job pairs and run the matcher against it on every change. Numbers from the run on 2026-11-03:
- Held-out synthetic cases: 40 of 40 recommended roles were correct (precision 100%, 95% interval 91.2–100%), with no rule violations.
- Cases reported by our early external reviewers: the earlier engine recommended 35 of these roles and 6 were right (17.1%), with 4 rule violations; the current engine recommends 12 and all 12 are right (95% interval 75.7–100%), with none. The totals differ because each count is the roles that engine recommended: the current one recommends fewer and leaves out the wrong ones.
Read these honestly: the engine was fixed using these reviewer cases, so they show the reported problems stay fixed, not how accurate matching is in general. Precision on live postings has not yet been measured by independent raters.
What we don’t do
We don’t repost jobs from aggregators, estimate salaries the employer didn’t publish, or invent commute distances. When a fact is missing, the match says so under “check before applying”.