Transparent, Unlimited, Open-Source ATS Resume Scanning Tool
A comprehensive resume scanner that emulates commercial ATS tools while providing transparent scoring, complete audit trails, and proof of improvement tracking. Zero black boxes. Unlimited scans. Complete version control.
- Transparent Scoring — All formulas and calculations are visible and auditable
- Unlimited Scans — No monthly limits like commercial tools
- Complete Audit Trail — Track improvements over time with full version control
- Multiple Formats — Markdown, DOCX, PDF, and plain text resumes
- Actionable Recommendations — Prioritized suggestions with expected score impact
- Configurable Weights — Customize scoring for different job levels (entry, mid, senior, executive)
# Install directly from GitHub
pip install git+https://github.com/jlynshue/open-ats.git
# Or install from source
git clone https://github.com/jlynshue/open-ats.git
cd open-ats
pip install -e .# Scan a single resume (all formats: md, docx, pdf, txt)
open-ats scan \
--resume resume.md \
--job-description jd.txt \
--output report.jsonThese commands describe the planned CLI capabilities and will be available in future sprints:
# Planned (Sprint 9): HTML report output
open-ats scan \
--resume resume.md \
--job-description jd.txt \
--output report.html
# Planned (Sprint 10): batch scan multiple resumes
open-ats batch \
--resume-dir resumes/ \
--job-description jd.txt \
--output-dir reports/
# Planned (Sprint 10): compare two scans to track improvement
open-ats compare \
--from-scan scan_id_1 \
--to-scan scan_id_2 \
--output improvement_report.html$ open-ats scan \
--resume resume.md \
--job-description backend-engineer-jd.txt \
--output report.json
Scanned resume.md against backend-engineer-jd.txt: score = 72.25 (good). Wrote report.json.Sample JSON report (score breakdown)
{
"scan_id": "a3f7c2e1-9b4d-5a8f-b6c1-d4e2f0a8b5c7",
"open_ats_version": "0.1.0",
"score": {
"overall": 72.25,
"rating": "good",
"categories": [
{
"name": "keyword",
"score": 68.5,
"weight": 0.5,
"contribution": 34.25,
"sub_scores": {
"hard_skills": 72.73,
"soft_skills": 66.67,
"action_verbs": 80.0,
"industry_terms": 50.0
}
},
{
"name": "formatting",
"score": 90.0,
"weight": 0.25,
"contribution": 22.5,
"sub_scores": {
"starting_score": 100.0,
"total_penalty": 10.0
}
},
{
"name": "content_quality",
"score": 62.0,
"weight": 0.25,
"contribution": 15.5,
"sub_scores": {
"action_verb_strength": 58.33,
"passive_voice_absence": 73.33,
"hedging_absence": 80.0,
"word_count_fitness": 100.0
}
}
],
"formula_audit": [
{
"step": "keyword.contribution",
"formula": "0.5 * 68.5",
"inputs": { "weight": 0.5, "score": 68.5 },
"output": 34.25
},
{
"step": "formatting.contribution",
"formula": "0.25 * 90.0",
"inputs": { "weight": 0.25, "score": 90.0 },
"output": 22.5
},
{
"step": "content_quality.contribution",
"formula": "0.25 * 62.0",
"inputs": { "weight": 0.25, "score": 62.0 },
"output": 15.5
},
{
"step": "overall",
"formula": "sum of category contributions",
"inputs": { "keyword": 34.25, "formatting": 22.5, "content_quality": 15.5 },
"output": 72.25
}
],
"recommendations": [
{
"category": "keyword",
"severity": "high",
"message": "Missing hard skills: Kubernetes, Terraform, gRPC. Add these to your experience bullets.",
"expected_score_impact": 8.5
},
{
"category": "content_quality",
"severity": "medium",
"message": "4/15 sentences use passive voice. Rewrite with active constructions.",
"expected_score_impact": 3.2
}
]
},
"config": {
"role_level": "mid",
"weights": {
"keyword": 0.5,
"formatting": 0.25,
"content_quality": 0.25
}
}
}Resume Input → Parser → Keyword Matcher → Scorer → Report Generator
(DOCX/PDF/MD/TXT) (NLP-based) (transparent) (HTML/JSON)
1. Parse Resume & Job Description Extract structured data using NLP techniques with format detection.
2. Analyze & Match
- Keyword Matching: Hard skills, soft skills, action verbs, industry keywords
- Quantification: Identify achievements with metrics (15%, $1.4B, 10 years)
- Formatting: Detect ATS-breaking elements (tables, special characters)
- Content Quality: Weak verbs, passive voice, hedging language detection
3. Score with Transparent Formulas
Overall Score = Σ(Category Score × Weight)
Default Weights:
Keyword Match: 40%
Quantification: 20%
Formatting: 20%
Content Quality: 20%
Each formula is documented and auditable. See Scoring System for full details.
4. Generate Report & Track Improvement
- Detailed HTML/JSON reports with actionable recommendations
- Complete audit trail showing score progression
- Before/after comparisons proving improvement
Commercial ATS scanners charge $50-90/month for a black box that gives you a score with no explanation of how it was calculated. Open ATS takes the opposite approach: every formula, every weight, and every sub-score is visible and auditable. You get unlimited scans to iterate on your resume without hitting a paywall, and a complete audit trail that proves your improvements over time.
| Feature | JobScan | Resume Worded | Open ATS |
|---|---|---|---|
| Free scans/month | 5 | 2-3 | ∞ Unlimited |
| Scoring transparency | ❌ Black box | ❌ Black box | ✅ Open formulas |
| Audit trail | ✅ Complete | ||
| Customization | ❌ Fixed | ❌ Fixed | ✅ Configurable |
| Cost | $50-90/mo | $49/mo | ✅ Free |
- Transparent: All algorithms visible. No black boxes.
- Unlimited: Iterate freely without subscription limits.
- Open: Community-driven development, MIT licensed.
open-ats/
├── src/open_ats/ # Main package
│ ├── parsers/ # Resume & JD parsing
│ ├── analyzers/ # Keyword, quantification, formatting, quality
│ ├── scoring/ # Transparent scoring engine
│ ├── reporting/ # HTML/JSON report generation
│ ├── audit_trail/ # Scan history and improvement tracking
│ ├── cli/ # Command-line interface
│ └── data/ # Bundled word lists and presets
├── tests/
│ ├── unit/ # Unit tests (80%+ coverage target)
│ ├── integration/ # Cross-module integration tests
│ ├── e2e/ # End-to-end CLI tests
│ └── fixtures/ # Sample resumes and job descriptions
├── docs/ # PRD, scoring, testing, API reference
├── keyword_databases/ # Industry-specific keyword lists (YAML)
└── examples/ # Example workflows and sample data
- Product Requirements Document — Complete specifications and feature roadmap
- Scoring System — Transparent formulas and calculations
- API Reference — Developer documentation
- Testing Strategy — Test plans and validation methodology
- Contributing Guide — How to contribute
Target: 90%+ correlation with JobScan on standard resume/JD pairs.
Methodology:
- 100 resume/JD pair test dataset
- Parallel scoring against JobScan
- Pearson correlation analysis
- Continuous refinement of weights
We welcome contributions! See CONTRIBUTING.md for guidelines.
Areas where we need help:
- Keyword database expansion (industry-specific terms)
- Resume parsing edge cases
- Scoring weight validation
- Test coverage expansion
MIT — see LICENSE
Jonathan Lyn-Shue — Fractional CIO/CTO | Data & AI Executive
Open ATS was built to solve a real problem: expensive, opaque commercial ATS scanners during job searches. It demonstrates principles I believe in across all technology: transparency, unlimited access, and user control.
Last Updated: 2026-06-11