Resume Parser
Skill extraction

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. 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. 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. 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. 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

Python examplepython
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.

Questions

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.

Try it on your own resumes

50 free parses per month. Sign up with your email and create an API key in the dashboard.

Get API key