Inside the scoring engine

Six layers. Nine axes. Every point has its receipts.

Jobscan, Teal and Rezi rely on a shallow keyword match or a one-pass AI score. JobFitAI runs your resume through six independent layers — byte-level file inspection, a nine-vendor ATS parse simulation, a deterministic evidence pipeline, true semantic matching, and a fully deterministic scoring core. The only AI step writes the explanation. It cannot move the number.

Evidence layers
6

Evidence layers

ATS vendors simulated
9

ATS vendors simulated

Skills in the taxonomy
473+

Skills in the taxonomy

Engine version today
v0

Engine version today

Six layers, one number

Byte-level file inspection to an audited final number.

The evidence layers run in parallel, and every layer is failure-isolated — if one degrades, the rest still ship and the packet records exactly which layers succeeded. Nothing scores without evidence behind it.

Layer 01

File inspection

Byte-level PDF + DOCX

  • Scanned-image vs digital PDF detection — no more silent 0% parses.
  • Multi-column pages, tables, images, and repeated header/footer text.
  • Hidden white-on-white text candidates — keyword stuffing caught at the file level.
  • Hyperlink extraction, including orphaned URLs (visible link text with no real destination).
  • Runs server-side against your own storage; your file never leaves your account.
Layer 02

ATS parse simulation

9 vendors · per-field fidelity

  • Emulates how Workday, Greenhouse, Lever, Taleo, iCIMS, SmartRecruiters, Ashby, SAP SuccessFactors, BambooHR will actually parse your resume.
  • Per-field results — name, contact, experience rows, education, skills, dates — marked ok, partial, or failed per vendor.
  • A parse-fidelity % per vendor plus cross-vendor top issues, rendered as the heatmap in your analysis.
  • Vendor quirks modeled individually: no-OCR vendors crater on scanned PDFs, tables corrupt Workday's field grid.
Layer 03

Deterministic evidence

Pure functions — always on

  • 473+ canonical skills with aliases and an implication graph (React → ReactJS, Terraform ↔ IaC).
  • Per-stack YoE: “the JD wants 4y React, your resume supports 2y.”
  • Bullet analysis: STAR completeness, quantification ratio, weak phrasing, passive voice.
  • Tenure, employment gaps, job-hopping, and date-format consistency.
  • Certifications ontology (AWS/Azure/GCP tiers, PMP, CPA, CFA, CISSP…) with tier-gap math.
  • Keyword-stuffing detection cross-checked against the file inspector.
Layer 04

Semantic matching

Real embeddings, on our servers

  • Sentence embeddings compare meaning, not exact words — computed on our own servers, never sent to a third-party embeddings API.
  • BM25 section matching handles short, jargon-heavy requirement lines.
  • Paraphrase fallback: “serverless on Amazon” still counts as AWS Lambda when no keyword matches.
  • Industry classification via nearest-centroid over curated industry archetypes.
  • Deterministic warm-up — the engine never silently switches between semantic and lexical paths mid-request.
Layer 05

Deterministic scoring core

The number — no AI involved

  • All nine axes AND the overall are computed by open formulas from the evidence — bit-for-bit reproducible.
  • Smooth curves, not bands: every real improvement moves the score instead of sticking on round numbers.
  • Relevance gate: formatting and quantification polish cannot rescue a resume that doesn't fit the job.
  • Evidence-derived ceilings — must-have coverage, YoE gap, and title fit each cap how high the overall can go.
  • The weight formula on this page is imported from the engine source, so what you read is what runs.
Layer 06

Narrative synthesis

The only AI step — it can't touch the number

  • The AI writes the explanation — strengths, gaps, per-axis rationales, keyword tiers. The score is already final before it runs.
  • Evidence-bound: every ATS check must map to a vendor-simulation or file-report signal; fabricated checks are dropped.
  • Rationales cite concrete evidence: “Strong React + TypeScript, but Kubernetes missing.”
  • Temperature 0 with a fixed seed; one retry, then a hard error — never a silently degraded analysis.
  • Every run persists its full Evidence Packet, so any score can be replayed and audited later.

The formula

Nine weighted axes. 70% fit, 30% craft.

70% of the weight measures fit to this specific job; 30% measures resume craft — and the craft share is relevance-gated, so polish alone can never carry an off-target resume. These are the live production weights, imported from the engine source.

Fit to this job · 70%Resume craft · 30%
  • Skills & keywords · 25%
  • Experience fit · 18%
  • Semantic coverage · 10%
  • Seniority · 7%
  • Domain / industry · 5%
  • Title fit · 5%
  • Quantified metrics · 13%
  • Action verbs · 11%
  • ATS format · 6%
Skills & keywords25%

JD-weighted taxonomy match with alias + implication-graph expansion, split into must-have and nice-to-have tiers. Paraphrased skills the taxonomy misses are caught by the semantic fallback.

Experience fit18%

Per-stack years-of-experience diff vs the JD, on a smooth curve. Relevance-aware: sixteen years of unrelated work no longer reads as a 94.

Semantic coverage10%

Share of JD requirements with a resume bullet at strong meaning-level similarity — sentence embeddings plus BM25, not keyword string matching.

Seniority7%

Level match vs the JD expectation, including scope signals like team size and budget. Asymmetric: overshooting costs less than undershooting.

Domain / industry5%

Industry background vs JD context — nearest-centroid classification over curated industry archetypes, blended with vertical term overlap.

Title fit5%

Most-recent title vs the target role, with role-family equivalence (Analyst ↔ Engineer) — kept separate from experience so a title-only mismatch is visible.

Quantified metrics13%

Share of bullets carrying numbers, percentages, or dollar figures — a deterministic count over your reconstructed bullets.

Action verbs11%

Strong-verb starts, passive-voice flags, and weak-phrase counts (“responsible for”, “worked on”) from the deterministic bullet analysis.

ATS format6%

Parse fidelity across the nine ATS vendor simulations plus file-inspector signals. Evidence-bound — every check maps to a real detected signal.

What competitors ship

Most tools ship one of these layers. JobFitAI ships all six.

The AI can't move your number

Every axis and the overall are computed from evidence by the deterministic core — the language model only writes the explanation. The same resume and JD reproduce the exact same score, every time, on engine v0.

Per-vendor ATS parse heatmap

Open the analysis and you see a grid: Workday 92%, Greenhouse 88%, Lever 64% (warn), iCIMS 58% (fail). Click any tile for the per-field extraction and its detected warnings. No other tool shows simulated fidelity per vendor.

Every score is clickable

Every axis, every check, every number opens an Evidence drawer showing the raw analysis that produced it. “Why is my bullets score 62?” Click. You see the weak phrases, the passive-voice count, the STAR completion rate.

Impact ÷ effort fix planner

The fix list isn't just “add keyword X”. Every action carries an estimated point lift AND an effort tier (≤ 2 min, 15 min, 60+ min), sorted by impact-per-effort so the biggest lever is always on top.

Projected lift on every fix

Every missing must-have comes with a projected point delta — “add Kafka → +4 pts” — computed as a deterministic delta anchored to your committed engine score, not a generic benchmark.

Replayable, versioned runs

Every score persists with its full Evidence Packet and the engine version that produced it. When the engine improves, your historical runs stay interpretable — and any score can be replayed and audited.

The fine print

Why this score is trustable.

  • Your resume file is stored in your private storage bucket and inspected server-side against your own storage — we never forward it to a third-party ATS grading service.
  • Semantic matching runs on our own servers, so your resume text is never sent to an external embeddings API. The narrative step runs behind rate limiting and abuse protection.
  • Saved scores stay tied to the evidence and engine version that produced them — when we ship scoring updates, historical runs remain interpretable instead of silently changing.
  • The scoring engine is fully deterministic and versioned (engine v0 today): the number is computed from evidence by open formulas, not improvised by a language model, so the same resume and job description always produce the same score.

See all six layers run on your resume.

Free account · 2 full scores every day · no credit card.