Bulk Resume Screening Software: Score, Fix, and Rebuild It Against the Job (Free, On-Device)

Score Resumes Locally with Structured Extraction

Use pdfplumber (Python) or pdf-parse (Node) to extract text, then feed each resume through a local LLM (Ollama with llama3.1:8b or phi3:mini) with a strict JSON schema prompt. Define scoring dimensions as explicit fields: required_skills_match (0-1), years_experience (float), domain_keywords (count), employment_gaps (boolean), education_tier (1-3). Example prompt fragment: "Return only valid JSON: {\"required_skills_match\": 0.85, \"years_experience\": 6.5, \"domain_keywords\": 12, \"employment_gaps\": false, \"education_tier\": 2}". Parse 200 resumes in ~3 minutes on an M2 MacBook Air. Store results in SQLite with a composite score: (skills*0.5) + (exp*0.2) + (keywords*0.15) + (edu*0.15). Filter threshold at 0.65. Export top 20 to CSV for human review. No API keys, no upload, full audit trail.

Fix and Rebuild Weak Resumes Against the JD

For candidates scoring 0.45-0.64, run a second pass: extract the job description's must_have, nice_to_have, and dealbreaker lists via the same LLM with a taxonomy prompt. Compare each resume's skill inventory against these lists. Generate a rewrite plan as JSON: {\"add_keywords\": [\"Kubernetes\", \"Terraform\"], \"rephrase_bullets\": [{\"original\": \"Managed cloud infra\", \"rewritten\": \"Provisioned and maintained 40-node GKE clusters with Terraform, reducing deploy time 60%\"}], \"remove_fluff\": [\"Synergized cross-functional paradigms\"]}. Apply rewrites using python-docx to preserve formatting. Output a "JD-aligned" version alongside the original. Flag dealbreaker gaps (e.g., missing security clearance) as non-fixable. Batch process overnight; review diffs in VS Code with git diff --word-diff before sending to hiring managers.

Skip the DIY. VaultPDF's Screen the Stack room does exactly this — drop a folder, get a ranked sheet back, nothing ever leaves your machine.
Try it free →