{"id":28907621,"url":"https://github.com/maqeel019/ats","last_synced_at":"2026-05-15T13:06:42.312Z","repository":{"id":300008800,"uuid":"1004863895","full_name":"maqeel019/ATS","owner":"maqeel019","description":"A powerful Python-based ATS that parses and ranks PDF resumes on recruiter-defined filters like skills, education, and experience. Handles scanned and complex resumes with detailed scoring and Excel output.","archived":false,"fork":false,"pushed_at":"2025-08-05T08:53:48.000Z","size":9156,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"Master","last_synced_at":"2025-10-05T19:42:02.079Z","etag":null,"topics":["data-science","excel","model","pandas","pdf-document-processor","pyhton","text-classification","text-processing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maqeel019.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-19T09:46:47.000Z","updated_at":"2025-08-05T08:53:52.000Z","dependencies_parsed_at":"2025-07-14T20:14:03.316Z","dependency_job_id":"948ee756-4e78-4daa-ae83-84e23351dff2","html_url":"https://github.com/maqeel019/ATS","commit_stats":null,"previous_names":["maqeel019/ats"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maqeel019/ATS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maqeel019%2FATS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maqeel019%2FATS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maqeel019%2FATS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maqeel019%2FATS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maqeel019","download_url":"https://codeload.github.com/maqeel019/ATS/tar.gz/refs/heads/Master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maqeel019%2FATS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33067511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","excel","model","pandas","pdf-document-processor","pyhton","text-classification","text-processing"],"created_at":"2025-06-21T16:04:22.047Z","updated_at":"2026-05-15T13:06:42.271Z","avatar_url":"https://github.com/maqeel019.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 🧠 ATS – Intelligent Resume Filtering System\n\nA smart **Applicant Tracking System (ATS)** designed to parse, extract, rank, and filter PDF resumes using keyword matching, profile completeness, and text analysis. Built to handle thousands of CVs — even those with complex or non-ATS-friendly layouts.\n\n---\n\n## 🚀 Features\n\n- 📄 **Advanced PDF Extraction:**\n  - `pdfplumber` (layout-aware)\n  - `PyMuPDF` (`fitz`) for text layer\n  - `pdfminer.six` fallback\n  - OCR fallback (`pytesseract` + `pdf2image`) for scanned images\n\n- 🔍 **Robust Information Extraction:**\n  - Name, Email, Phone\n  - LinkedIn, GitHub\n  - Skills (auto-extracted)\n  - Calculate work experience from:\n    - Explicit statements (\"4+ years of experience\")\n    - Job timelines (date ranges)\n  - Education (raw \u0026 highest degree)\n\n- 📊 **Smart Scoring \u0026 Ranking:**\n  - Experience Score\n  - Skill Match Score\n  - Education Score\n  - Profile Completeness Score\n\n- 🔎 **Flexible Candidate Filtering:**\n  - REQUIRED_SKILLS\n  - MIN_EDUCATION\n  - MIN_EXPERIENCE\n  - MIN_SCORE\n\n- ⚙️ **Configurable \u0026 Extensible:**\n  - All filters, paths, and skill sets in `config/config.py` and `config/skills_config.py`\n  - Add or change skills easily for different hiring fields\n\n- 📥 **Resume Input Handling:**\n  - Drop thousands of PDFs in `/candidates/`\n  - Handles ATS-friendly and messy resumes\n\n- 📤 **Clear Output:**\n  - `all_candidates_ranked.xlsx` — full processed list\n  - `filtered_candidates.xlsx` — only qualified candidates\n\n- 🗂️ **Detailed Logs:**\n  - `logs/{name}_Raw.txt`: scores and raw text\n  - `logs/{name}_Segmented.txt`: segmented text sections\n\n---\n\n## 📁 Folder Structure\n\n```bash\nATS/\n│\n├── candidates/                 # All resume PDFs\n│\n├── extractor/                  # Extraction logic\n│   ├── education.py\n│   ├── experience.py\n│   ├── info_extractor.py\n│   ├── pdf_reader.py\n│   ├── section_segmenter.py\n│   └── **init**.py\n│\n├── scoring/                    # Scoring \u0026 filtering\n│   ├── scoring.py\n│   ├── filter.py\n│   ├── log_candidate.py\n│   └── **init**.py\n│\n├── utils/                      # Utilities\n│   ├── common.py\n│   ├── file_utils.py\n│   └── **init**.py\n│\n├── config/                     # Config files\n│   ├── config.py               # Global paths \u0026 thresholds And Configuration\n│   ├── skills_config.py        # Master skill sets (tech, data, etc.)\n│\n├── output/                     # Excel \u0026 log outputs\n│   ├── all_candidates_ranked.xlsx\n│   ├── filtered_candidates.xlsx\n│   └── logs/\n│       ├── {Resume_name}_Raw.txt\n│       └── {Resume_name}_Segmented.txt\n│\n├── main.py                     # Pipeline entry point\n├── requirements.txt            # Python dependencies\n├── README.md                   # Project docs\n└── **pycache**/\n```\n\n---\n\n## 🔧 Setup Instructions\n\n### 1️⃣ Clone the Repo\n```bash\ngit clone https://github.com/maqeel019/ATS\ncd ATS\n````\n\n### 2️⃣ Install Dependencies\n\nPython 3.8+\n\n```bash\npip install -r requirements.txt\n```\n\n**If using OCR:**\n\n```bash\nsudo apt install tesseract-ocr\nsudo apt install poppler-utils\n```\n\n---\n\n## ⚙️ How to Use\n\n### 📥 Add Resumes\n\nPut all resume PDFs in the `candidates/` folder.\n\n### ▶️ Run the Pipeline\n\n```bash\npython main.py\n```\n\n### 📊 View Results in `output/`\n\n* `all_candidates_ranked.xlsx`: every processed resume\n* `filtered_candidates.xlsx`: only resumes matching your filters\n* `logs/{name}_Raw.txt`: raw text \u0026 scores\n* `logs/{name}_Segmented.txt`: segmented sections\n\n---\n\n## 🛠️ Configuration\n\nAll settings are in `config/config.py` and `config/skills_config.py`.\n\n| Parameter         | Description                                | Example                           |\n| ----------------- | ------------------------------------------ | --------------------------------- |\n| `MIN_EXPERIENCE`  | Minimum required experience (years)        | `0.5`                             |\n| `MIN_SCORE`       | Minimum total score to pass filter         | `60`                              |\n| `REQUIRED_SKILLS` | Required skills (matches extracted skills) | `{\"python\", \"mysql\", \"power bi\"}` |\n| `MIN_EDUCATION`   | Minimum degree(s) accepted                 | `{\"bachelor\", \"master\", \"phd\"}`   |\n\n### 🔢 Scoring Weights\n\n```py\nRANKING_WEIGHTS = {\n    \"experience\": 30,  # %\n    \"skills\": 40,      # %\n    \"education\": 20,   # %\n    \"profiles\": 10     # %\n}\n```\n\n### 📦 File \u0026 Folder Paths\n\n```py\nPDF_FOLDER              = \"candidates/\"\nOUTPUT_DIR              = \"output/\"\nOUTPUT_ALL_EXCEL        = \"output/all_candidates_ranked.xlsx\"\nOUTPUT_FILTERED_EXCEL   = \"output/filtered_candidates.xlsx\"\nLOG_DIR                 = \"output/logs/\"\n```\n\n### 🧩 Skills Configuration\n\nAll core tech skills live in `config/skills_config.py` — you can:\n\n* Expand with backend, data science, devops, etc.\n* Keep separate skill sets for different roles\n* Easily plug into your pipeline via `DEFAULT_SKILL_SET`\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaqeel019%2Fats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaqeel019%2Fats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaqeel019%2Fats/lists"}