Skip to main content

⚡ cvz — ATS Resume Analyzer

Stop guessing. Start scoring.

A blazing-fast CLI tool that tells you exactly how well your resume matches a job — before a recruiter's ATS does.

PyPI version Python License: MIT

🌐 Live Demo · 📦 PyPI · 🐛 Report Bug


workflow


Why cvz?

Most resumes get rejected before a human ever reads them — filtered out by ATS (Applicant Tracking Systems) that scan for keywords and structure. cvz puts that power in your hands:

  • 🔍 Keyword matching — see exactly which role keywords you're hitting (and missing)
  • 🧠 Semantic similarity — goes beyond exact matches using NLP
  • 🏗️ Structure scoring — checks for the sections recruiters expect
  • 🚀 Works instantly — no cloud, no signup, no waiting

Installation

pip install cvz

Or build from source:

git clone <repo>
cd cvscan
pip install -e .

Requires Python 3.9+

For better semantic scoring, grab the spaCy model:

python -m spacy download en_core_web_md

Without it? No problem — cvz gracefully skips semantic scoring and keeps everything else running.


Quick Start

# Analyze against a specific role
cvz analyze resume.pdf --role backend

# Let cvz figure out the best role for you
cvz analyze resume.pdf

# Analyze against a raw job description
cvz analyze resume.pdf --jd "python django rest api postgresql"

Commands

analyze — Score your resume

cvz analyze resume.pdf --role backend
cvz analyze resume.pdf --role devops --export report.json

suggest-role — Find your best-fit roles

Not sure which roles to target? cvz will tell you.

cvz suggest-role resume.pdf
cvz suggest-role resume.pdf --top 10

gap — Discover what's missing

See your strengths and the skills you need to add.

cvz gap resume.pdf --role machine_learning
cvz gap resume.pdf --role backend --export gap.json

compare — Rank multiple resume versions

cvz compare r1.pdf r2.pdf r3.pdf
cvz compare r1.pdf r2.pdf --role frontend --export compare.json

roles — Browse supported roles

cvz roles

--version

cvz --version

How Scoring Works

Each resume is evaluated across three dimensions:

Metric Weight What it checks
🔑 Keyword 50% Core (70%) + secondary (30%) role keywords
🧠 Semantic 30% spaCy cosine similarity against role vocabulary
🏗️ Structure 20% Standard sections present + appropriate length

Score thresholds:

Score Rating
≥ 75% ✅ Great match
50–74% 🟡 Decent match
< 50% 🔴 Low match

Supported Roles

backend frontend
full_stack software_engineer
data_scientist data_analyst
machine_learning ai_engineer
devops cloud_engineer
android ios
cybersecurity qa_engineer
product_manager ui_ux_designer
blockchain embedded_systems

Run cvz roles for the full list. Role keyword sets live in src/cvscan/data/roles.json — fully extensible.


Supported File Formats

Format Parser
.pdf pdfplumber
.docx python-docx (including tables)
.txt built-in

Project Structure

cvscan/
├── src/
│   └── cvscan/
│       ├── main.py                 # CLI entry (Typer)
│       ├── data/
│       │   └── roles.json          # Role keyword definitions
│       ├── engines/
│       │   ├── keyword_engine.py   # Keyword scoring
│       │   ├── spacy_engine.py     # Semantic similarity
│       │   └── structure_engine.py # Resume structure
│       ├── parser/
│       │   ├── pdf_parser.py       # PDF extraction
│       │   └── docx_parser.py      # DOCX extraction + tables
│       └── utils/
│           ├── loader.py           # File + role loading
│           ├── cleaner.py          # Text normalisation
│           └── scorer.py           # Shared scoring logic
├── pyproject.toml
└── requirements.txt

Dependencies

typer · rich · pdfplumber · python-docx · spacy · scikit-learn

Author

Built by Anik Chand


If cvz helped you land an interview, consider leaving a ⭐

Metadata

Release files for cvz 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cvz 0.1.7
File Size Uploaded
cvz-0.1.7.tar.gz 23.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cvz 0.1.7
File Interpreter ABI Platform
cvz-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 47.5 kB

Release files / cvz-0.1.7.tar.gz

Download URL cvz-0.1.7.tar.gz
Size 23.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2021eae5d02a68ef87e97076bd9f296ffac4aad70dd947f30434a4a0fc96296d
BLAKE2b-256 checksum
How to use checksums
e8cfc69225d9993a0039f6a595e383f9f11c3f721e28e397c258b6a3f5dad221
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.6

Release files / cvz-0.1.7-py3-none-any.whl

Download URL cvz-0.1.7-py3-none-any.whl
Size 24.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3ce1d174489819b89608b0285028db8757118894e2e409bddb849bbb7684be17
BLAKE2b-256 checksum
How to use checksums
9cced49e06a9da3cf5c1fca5f03bcdd7124572aa072c28a589e7beaeda283f0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.6

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page