| name | resume-parse |
| description | Extract structured data from PDF or DOCX resume files. Produces a ResumeData JSON object with sections for personal info, education, experience, publications, skills, projects, and certifications. Use when processing an uploaded resume file to convert raw document content into structured data.
|
Resume Parse
You are tasked with extracting structured resume data from raw text extracted
from a PDF or DOCX file.
Input
You receive the raw text output from the extract-text script. This text is
a best-effort extraction and may have formatting artifacts.
Output
Return a JSON object matching the ResumeData schema:
{
"name": "string",
"email": "string | undefined",
"phone": "string | undefined",
"location": "string | undefined",
"links": [{ "label": "string", "url": "string" }],
"summary": "string | undefined",
"experience": [{
"title": "string",
"company": "string",
"location": "string | undefined",
"startDate": "string",
"endDate": "string | undefined",
"bullets": ["string"]
}],
"education": [{
"degree": "string",
"institution": "string",
"year": "string",
"gpa": "string | undefined",
"details": ["string"]
}],
"skills": ["string"],
"certifications": ["string"],
"projects": [{
"name": "string",
"description": "string",
"technologies": ["string"],
"url": "string | undefined"
}],
"rawSections": [{
"title": "string",
"content": "string",
"startLine": 0,
"endLine": 0
}]
}
Extraction Rules
-
Personal Info: Name is usually the largest/first text. Email, phone,
location, and links follow. Look for patterns like mailto:, +1-, URLs.
-
Education: Look for keywords like "Education", "Academic". Each entry
has institution, degree, date range, and optional GPA/details.
-
Experience: Look for "Experience", "Work", "Employment". Each entry
has company, title, date range, location, and bullet points.
-
Publications: Look for "Publications", "Papers", "Research". Each
entry is a single citation string.
-
Skills: Look for "Skills", "Technologies", "Technical". May be
comma-separated or categorized (e.g., "Languages: Python, Go").
-
Projects: Look for "Projects". Each has name, description, and
optional technologies.
-
Certifications: Look for "Certifications", "Licenses".
rawSections — Complete Section Inventory
The rawSections array is CRITICAL for template filling. It must capture
every section in the resume, including non-standard ones:
- Always include ALL sections found in the resume, even if they don't map
to a structured field (experience, education, skills, etc.).
- Common extra sections to capture: Summary, Objective, Awards, Honors,
Certifications, Volunteer Work, Leadership, Languages, Interests,
Activities, References, Professional Affiliations, etc.
- Each rawSection entry preserves the original section title and full content.
- The
content field should contain the complete text of the section as it
appears in the resume — do not summarize or truncate.
- rawSections serve as the source of truth for sections that don't map to
structured fields, enabling the template filler to create new sections.
Edge Cases
- Empty sections: If a section has no content, omit it (empty array).
- Non-standard headings: Use context clues to identify sections.
- Multi-language: Handle both English and Chinese resumes. CJK names
may appear alongside English names (e.g., "张伟 (Wei Zhang)").
- Merged sections: Some resumes combine Work and Projects. Split them
into the appropriate sections based on content.
- Date formats: Normalize to human-readable format. Accept "2020-01",
"Jan 2020", "2020.01", "January 2020" etc.
- Non-standard sections: Always capture in rawSections even if they
don't fit any structured field. Examples: "Volunteer Work", "Awards",
"Professional Development", "Leadership", etc.
For detailed format-specific edge cases, consult references/FORMATS.md.