Work Experience Extraction
Structured job history with start and end dates, titles, and per-role descriptions
Parse job titles, organizations, dates and role descriptions from PDF resumes. Handles "Present" dates and overlapping roles.
How it works
- 1
Experience section detection
The parser identifies work experience regardless of the heading used, such as "Work Experience", "Professional History", "Employment", or a heading in another language.
- 2
Individual role extraction
Each position becomes a separate object with title, organization, location and skillsDescription. Multiple roles at the same company (promotions) are returned as separate entries.
- 3
Dates as month and year numbers
Dates are returned as numeric startMonth, startYear, endMonth and endYear fields, with month names in other languages translated to English first. Ongoing roles have isOngoing: true and null end dates.
- 4
Description as markdown
Bullet points and paragraphs under each role are returned as markdown in skillsDescription, in the candidate's own words and language.
Key Benefits
Full career timeline
The parser is built to return every role listed, including internships, part-time positions and freelance work, not just the most recent few.
Consistent date fields
Whatever format the resume uses, dates come back in the same startMonth/startYear/endMonth/endYear structure, with isOngoing for current positions.
Company names as written
Organization names keep legal suffixes (GmbH, Ltd, Oy) and local naming, so you can match against your own company data.
Per-role descriptions
The skillsDescription field shows what the candidate actually did in each role. "Migrated 200 microservices to Kubernetes" tells you more than "Kubernetes".
Code examples
{
"workExperiences": [
{
"title": "Senior Software Engineer",
"organization": "Example Corp",
"location": "Helsinki, Finland",
"skillsDescription": "- Led development of the platform's event-driven services\n- Mentored junior engineers",
"startMonth": 3,
"startYear": 2021,
"endMonth": null,
"endYear": null,
"isOngoing": true
},
{
"title": "Software Engineer",
"organization": "Example Startup Oy",
"location": "Espoo, Finland",
"skillsDescription": "- Built REST APIs in Python and Django\n- Set up the CI/CD pipeline",
"startMonth": 6,
"startYear": 2018,
"endMonth": 2,
"endYear": 2021,
"isOngoing": false
}
],
}Technical Details
Work experience extraction uses a large language model to identify and segment individual job entries from the resume text. Job titles are returned in title case, with well-known abbreviations like CEO or IT kept in caps. Month names written in other languages are translated to English before being converted to numbers, and "Present" marks a role as ongoing. Descriptions are returned as markdown without editing the grammar or language. The API is hosted on Hetzner in Helsinki, Finland; /v1/parse does not store the PDF or the parsed result, and resume text is processed by OpenAI (US) as a subprocessor.
Frequently asked questions
Each position is extracted with its own date range. If a candidate held two jobs at the same time, both appear in the workExperiences array with their own dates.
Yes. Each title at the same organization is a separate entry with its own dates and description. The organization field is the same, so you can group them.
The text written under each job entry, formatted as markdown, with the job title, organization and dates removed since they have their own fields. It is not a normalized skill list.
Related pages
Education Extraction
Parse degrees, schools, years and academic notes from PDF resumes. Degrees are kept as written.
FeaturesSkill Extraction API
Get each role's description, with the skills used, tied to the job where they were used. PDF to structured JSON with one API call.
Use casesScreen Candidates with Structured Resume Data
Parse resumes into structured JSON and apply your own screening criteria to work history, education, location, and languages.
Use casesATS Resume Parsing That Fills Candidate Profiles
Parse PDF resumes into structured JSON and map the fields to your ATS through its own API. One synchronous REST call that can take up to 60 seconds. 50 free parses per month.
Compare parsed work history against manual entry
50 free parses per month. Run your own resumes through the API and compare the extracted workExperiences against manual data entry.