Resume Parser
Extracts structured candidate data from resumes and CVs in any format (PDF, Word, plain text, HTML) — parsing contact information, work experience, education, skills, certifications, and achievements into a clean, normalized data structure ready for applicant tracking systems, screening workflows, or candidate comparison.
When to Use
- User provides a resume or CV and asks to extract the candidate's data
- A batch of resumes needs to be processed and ingested into an ATS
- Candidate profiles need to be standardized for side-by-side comparison
- A resume needs to be scored against a job description for fit
- User asks to "parse", "process", or "screen" a resume or set of applications
- Candidate data needs to be exported to a CRM or HR system
- User wants to identify gaps or strengths in a candidate's profile
Process
Ingest the document:
- Accept: PDF, DOCX, TXT, HTML, RTF, or plain-text paste
- Detect language; flag if non-English (still extract but note translation may be needed)
- Assess if the document is a resume/CV vs. a cover letter or portfolio — process accordingly
- Handle common resume layouts: chronological, functional, combination/hybrid, academic CV
Extract contact and identity information:
- Full name
- Email address(es)
- Phone number(s) with country code if present
- Location: city, state/province, country (do NOT infer full address beyond what's stated)
- LinkedIn URL, GitHub URL, portfolio URL, or other professional profiles
- Note: do NOT infer, store, or flag protected characteristics (date of birth, gender, ethnicity, nationality) even if visible on the CV
Parse work experience (for each position):
- Job title
- Company name and industry (infer industry if not stated, with low confidence flag)
- Start date and end date (or "Present")
- Duration (computed: years and months)
- Location (city/country or "Remote")
- Key responsibilities: bulleted list extracted from the resume text
- Achievements: quantified accomplishments ("Increased revenue by 40%", "Led team of 12")
- Seniority level inferred from title: Individual Contributor / Senior IC / Manager / Director / Executive
Parse education:
- Degree type (Bachelor's, Master's, PhD, Associate's, Certificate, etc.)
- Field of study / major
- Institution name
- Graduation year (or expected graduation)
- GPA if listed
- Honors: cum laude, dean's list, scholarships
Extract skills:
- Technical skills: programming languages, frameworks, databases, cloud platforms, tools
- Domain skills: finance, healthcare, marketing, operations, etc.
- Soft skills: explicitly stated only (do NOT infer soft skills from job descriptions)
- Certifications and licenses: name, issuing body, date obtained, expiry date if listed
- Normalize skill names: "JS" → "JavaScript", "Postgres" → "PostgreSQL", "k8s" → "Kubernetes"
Identify additional sections:
- Publications / research
- Awards and recognitions
- Languages spoken (and proficiency level if stated)
- Volunteer work and community involvement
- Projects: name, technologies used, description, link
Compute summary metrics:
- Total years of professional experience
- Most recent role title and company
- Highest education level
- Career progression indicator: is each role a step up (title, responsibility), lateral, or step down?
- Career gap detection: gaps > 6 months in employment history (note, do not interpret)
Optional: Score against a job description (when both are provided):
- Match required skills: % of required skills present in resume
- Match experience level: does candidate's seniority align with the role?
- Education match: does degree requirement align?
- Output: match score (0–100) with breakdown by category and key missing qualifications
Output Format
{
"candidate": {
"name": "Jordan Lee",
"email": "jordan.lee@email.com",
"phone": "+1-415-555-0192",
"location": "San Francisco, CA",
"linkedin": "linkedin.com/in/jordanlee",
"github": "github.com/jordanlee"
},
"summary_metrics": {
"total_experience_years": 7.5,
"current_role": "Senior Software Engineer @ Stripe",
"highest_education": "BS Computer Science, UC Berkeley",
"career_gaps": [],
"career_trajectory": "Ascending"
},
"experience": [
{
"title": "Senior Software Engineer",
"company": "Stripe",
"industry": "FinTech",
"start": "2022-03",
"end": "Present",
"duration_months": 39,
"location": "Remote",
"seniority": "Senior IC",
"responsibilities": [
"Led backend development for Stripe's payment routing service handling $2B+ daily transactions",
"Mentored 3 junior engineers and conducted technical interviews"
],
"achievements": [
"Reduced p99 API latency by 40% through query optimization and caching layer redesign",
"Shipped fraud detection feature reducing chargebacks by 18%"
]
}
],
"education": [
{
"degree": "Bachelor of Science",
"field": "Computer Science",
"institution": "University of California, Berkeley",
"graduation_year": 2017,
"honors": "Cum Laude"
}
],
"skills": {
"technical": ["Python", "Go", "PostgreSQL", "Redis", "AWS", "Kubernetes", "gRPC", "Kafka"],
"domain": ["Payments", "Distributed Systems", "API Design"],
"certifications": [
{ "name": "AWS Solutions Architect Associate", "issuer": "Amazon Web Services", "date": "2023-05" }
]
},
"languages": [
{ "language": "English", "proficiency": "Native" },
{ "language": "Mandarin", "proficiency": "Conversational" }
]
}
Examples
Example Input
Parse this resume PDF and tell me if this candidate is a good match for a Staff Software Engineer role requiring Go, distributed systems experience, and 8+ years of experience.
Example Output
✅ Parsed successfully. Key profile:
- 7.5 years experience (slightly below 8-year requirement)
- Current role: Senior SWE @ Stripe (FinTech, payments systems)
- Go: ✅ listed, with distributed systems experience
- Distributed Systems: ✅ strong evidence (Kafka, gRPC, p99 latency optimization)
- Education: BS CS, UC Berkeley (Cum Laude)
Match Score: 78/100
Strong match on technical skills and domain. Minor gap: 0.5 years below stated experience requirement.
Recommendation: Recommend for phone screen — strong distributed systems background compensates for minor experience gap.
Boundaries
- Do NOT infer, store, or flag protected characteristics (age, gender, race, nationality, disability status) — even if visible on the CV. Process only professional information.
- Always note extraction confidence — flag fields that were ambiguous or uncertain rather than presenting guesses as facts.
- Do NOT make hiring decisions — provide structured data and match scores to inform human decision-makers only.
- Treat all resume data as PII — do not log, cache, or transmit candidate personal information beyond the immediate task.
- When computing a JD match score, be transparent about which criteria were weighted and how the score was derived.
- Flag if a resume appears to have been keyword-stuffed (unusually long skills list with no supporting experience) — note the pattern without making accusations.
1---2name: resume-parser3description: Extracts structured candidate data (skills, experience, education) from resumes and CVs in any format. Invoke when asked to parse a resume, extract candidate information, process job applications, build a candidate profile, or screen CVs.4---56# Resume Parser78Extracts structured candidate data from resumes and CVs in any format (PDF, Word, plain text, HTML) — parsing contact information, work experience, education, skills, certifications, and achievements into a clean, normalized data structure ready for applicant tracking systems, screening workflows, or candidate comparison.910## When to Use1112- User provides a resume or CV and asks to extract the candidate's data13- A batch of resumes needs to be processed and ingested into an ATS14- Candidate profiles need to be standardized for side-by-side comparison15- A resume needs to be scored against a job description for fit16- User asks to "parse", "process", or "screen" a resume or set of applications17- Candidate data needs to be exported to a CRM or HR system18- User wants to identify gaps or strengths in a candidate's profile1920## Process21221. **Ingest the document**:23 - Accept: PDF, DOCX, TXT, HTML, RTF, or plain-text paste24 - Detect language; flag if non-English (still extract but note translation may be needed)25 - Assess if the document is a resume/CV vs. a cover letter or portfolio — process accordingly26 - Handle common resume layouts: chronological, functional, combination/hybrid, academic CV27282. **Extract contact and identity information**:29 - Full name30 - Email address(es)31 - Phone number(s) with country code if present32 - Location: city, state/province, country (do NOT infer full address beyond what's stated)33 - LinkedIn URL, GitHub URL, portfolio URL, or other professional profiles34 - Note: do NOT infer, store, or flag protected characteristics (date of birth, gender, ethnicity, nationality) even if visible on the CV35363. **Parse work experience** (for each position):37 - Job title38 - Company name and industry (infer industry if not stated, with low confidence flag)39 - Start date and end date (or "Present")40 - Duration (computed: years and months)41 - Location (city/country or "Remote")42 - Key responsibilities: bulleted list extracted from the resume text43 - Achievements: quantified accomplishments ("Increased revenue by 40%", "Led team of 12")44 - Seniority level inferred from title: Individual Contributor / Senior IC / Manager / Director / Executive45464. **Parse education**:47 - Degree type (Bachelor's, Master's, PhD, Associate's, Certificate, etc.)48 - Field of study / major49 - Institution name50 - Graduation year (or expected graduation)51 - GPA if listed52 - Honors: cum laude, dean's list, scholarships53545. **Extract skills**:55 - **Technical skills**: programming languages, frameworks, databases, cloud platforms, tools56 - **Domain skills**: finance, healthcare, marketing, operations, etc.57 - **Soft skills**: explicitly stated only (do NOT infer soft skills from job descriptions)58 - **Certifications and licenses**: name, issuing body, date obtained, expiry date if listed59 - Normalize skill names: "JS" → "JavaScript", "Postgres" → "PostgreSQL", "k8s" → "Kubernetes"60616. **Identify additional sections**:62 - Publications / research63 - Awards and recognitions64 - Languages spoken (and proficiency level if stated)65 - Volunteer work and community involvement66 - Projects: name, technologies used, description, link67687. **Compute summary metrics**:69 - Total years of professional experience70 - Most recent role title and company71 - Highest education level72 - Career progression indicator: is each role a step up (title, responsibility), lateral, or step down?73 - Career gap detection: gaps > 6 months in employment history (note, do not interpret)74758. **Optional: Score against a job description** (when both are provided):76 - Match required skills: % of required skills present in resume77 - Match experience level: does candidate's seniority align with the role?78 - Education match: does degree requirement align?79 - Output: match score (0–100) with breakdown by category and key missing qualifications8081## Output Format8283```json84{85 "candidate": {86 "name": "Jordan Lee",87 "email": "jordan.lee@email.com",88 "phone": "+1-415-555-0192",89 "location": "San Francisco, CA",90 "linkedin": "linkedin.com/in/jordanlee",91 "github": "github.com/jordanlee"92 },93 "summary_metrics": {94 "total_experience_years": 7.5,95 "current_role": "Senior Software Engineer @ Stripe",96 "highest_education": "BS Computer Science, UC Berkeley",97 "career_gaps": [],98 "career_trajectory": "Ascending"99 },100 "experience": [101 {102 "title": "Senior Software Engineer",103 "company": "Stripe",104 "industry": "FinTech",105 "start": "2022-03",106 "end": "Present",107 "duration_months": 39,108 "location": "Remote",109 "seniority": "Senior IC",110 "responsibilities": [111 "Led backend development for Stripe's payment routing service handling $2B+ daily transactions",112 "Mentored 3 junior engineers and conducted technical interviews"113 ],114 "achievements": [115 "Reduced p99 API latency by 40% through query optimization and caching layer redesign",116 "Shipped fraud detection feature reducing chargebacks by 18%"117 ]118 }119 ],120 "education": [121 {122 "degree": "Bachelor of Science",123 "field": "Computer Science",124 "institution": "University of California, Berkeley",125 "graduation_year": 2017,126 "honors": "Cum Laude"127 }128 ],129 "skills": {130 "technical": ["Python", "Go", "PostgreSQL", "Redis", "AWS", "Kubernetes", "gRPC", "Kafka"],131 "domain": ["Payments", "Distributed Systems", "API Design"],132 "certifications": [133 { "name": "AWS Solutions Architect Associate", "issuer": "Amazon Web Services", "date": "2023-05" }134 ]135 },136 "languages": [137 { "language": "English", "proficiency": "Native" },138 { "language": "Mandarin", "proficiency": "Conversational" }139 ]140}141```142143## Examples144145### Example Input146```147Parse this resume PDF and tell me if this candidate is a good match for a Staff Software Engineer role requiring Go, distributed systems experience, and 8+ years of experience.148```149150### Example Output151```152✅ Parsed successfully. Key profile:153- 7.5 years experience (slightly below 8-year requirement)154- Current role: Senior SWE @ Stripe (FinTech, payments systems)155- Go: ✅ listed, with distributed systems experience156- Distributed Systems: ✅ strong evidence (Kafka, gRPC, p99 latency optimization)157- Education: BS CS, UC Berkeley (Cum Laude)158159Match Score: 78/100160Strong match on technical skills and domain. Minor gap: 0.5 years below stated experience requirement.161Recommendation: Recommend for phone screen — strong distributed systems background compensates for minor experience gap.162```163164## Boundaries165166- Do NOT infer, store, or flag protected characteristics (age, gender, race, nationality, disability status) — even if visible on the CV. Process only professional information.167- Always note extraction confidence — flag fields that were ambiguous or uncertain rather than presenting guesses as facts.168- Do NOT make hiring decisions — provide structured data and match scores to inform human decision-makers only.169- Treat all resume data as PII — do not log, cache, or transmit candidate personal information beyond the immediate task.170- When computing a JD match score, be transparent about which criteria were weighted and how the score was derived.171- Flag if a resume appears to have been keyword-stuffed (unusually long skills list with no supporting experience) — note the pattern without making accusations.