Skill Extraction API
Skills tied to each role, not a flat keyword list
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.
How it works
- 1
Send a resume PDF
Send a PDF (up to 5 MB) to POST /v1/parse as multipart/form-data with a single field named file. The PDF needs a text layer; scanned image-only PDFs are not supported.
- 2
LLM-powered content analysis
The text is extracted from the PDF and processed by a large language model that understands section boundaries, job titles and descriptions. Unlike regex-based parsers, the model interprets meaning rather than matching patterns.
- 3
Skills in each role
Each workExperiences entry has a skillsDescription field with the description written under that job. This keeps which skills were used at which job, so you know whether a candidate used Python in their current role or five years ago.
- 4
Structured JSON response
The response returns each work experience with its title, organization, dates and skillsDescription. You can pull skill keywords from this field or use it directly for matching and search indexing.
Key Benefits
Skills in context, not isolation
Instead of a flat list of skills, the API returns descriptions within each workExperiences object, so you can see that a candidate used Kubernetes as a Staff Engineer, not just that "Kubernetes" appeared somewhere on their resume.
One schema for every resume
Every resume returns the same JSON field names: firstName, lastName, workExperiences[], educations[], languages[] and so on. Every field is optional. Build your integration once.
Role-level skill attribution
Because descriptions are tied to specific positions, you can build timelines: see when a candidate first worked with a technology and whether they kept using it in later roles.
Synchronous response
The parsed JSON comes back in the same response, within one synchronous request. No polling, no webhooks.
Code examples
import requests
response = requests.post(
'https://api.resumeparser.cc/v1/parse',
headers={'Authorization': 'Bearer rp_live_...'},
files={'file': open('resume.pdf', 'rb')},
timeout=60,
)
data = response.json()['data']
# Each work experience has a skillsDescription field
# with the description written under that role (markdown)
for exp in data.get('workExperiences', []):
print(f"{exp['title']} at {exp['organization']}")
print(f" Description: {exp['skillsDescription']}")
print(f" Started: {exp['startMonth']}/{exp['startYear']}")Technical Details
Text is extracted from the PDF's text layer and processed by a large language model. Rather than relying on a fixed taxonomy or keyword dictionary, the parser returns the description under each work experience as markdown in skillsDescription, keeping the candidate's own wording and language. You can run your own skill extraction or matching on top of it. The API is hosted on Hetzner in Helsinki, Finland. The /v1/parse endpoint does not store the PDF or the parsed result. Resume text is processed by OpenAI (US) as a subprocessor.
Frequently asked questions
Keyword matchers scan for exact strings from a predefined list. This API does not return a skill list at all: it returns the description written under each role, cleaned up as markdown, so you can see what the candidate did with each technology and apply your own skill matching on top.
Each entry in the workExperiences array includes: title, organization, location (or null), skillsDescription (markdown), startMonth, startYear, endMonth (or null), endYear (or null), and isOngoing. The top-level data object also includes firstName, lastName, emailAddress, phoneNumber, location fields, linkedInLink, educations and languages.
Yes. Field names are always in English and descriptions are kept in the original language. Test your own language mix with the 50 free parses per month.
The /v1/parse endpoint does not store the PDF or the parsed result. The API is hosted on Hetzner in Helsinki, Finland, and resume text is processed by OpenAI (US) as a subprocessor. If you need an on-premise setup, contact us.
Related pages
Resume Parser for Tech Recruitment
Turn developer and engineering CVs into structured JSON: work history with role descriptions, education and the LinkedIn profile URL. REST API, PDF only. 50 free parses per month.
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 casesJob Matching Built on Structured Resume Data
Parse resumes into structured data and feed your own matching logic with roles, dates, education, location, and languages.
IntegrationsParse Resumes with Python
Parse PDF resumes with Python using the Resume Parser REST API. Setup with the requests library, rate-limit friendly batch processing, error handling, and structured JSON output.
Try it on your own resumes
50 free parses per month. Sign up with your email and create an API key in the dashboard.