PDF Resume Parser
One endpoint for PDF resumes, from simple to creative layouts
Parse single-column and multi-column PDF resumes into structured JSON with one API call. PDF up to 5 MB. Parsing is synchronous and can take up to 60 seconds.
How it works
- 1
Text extraction
Text and its position on the page are extracted from the PDF's text layer. There is no OCR, so scanned image-only PDFs are not supported.
- 2
Layout and section analysis
The extracted text is analyzed for structure: section headers, bullet points and reading order, so content from sidebars and columns ends up in the right place.
- 3
LLM-powered field extraction
A large language model maps the content to fields: firstName, lastName, emailAddress, phoneNumber, workExperiences[], educations[], languages[] and more.
- 4
Synchronous JSON response
The result comes back in the same HTTP response. Parsing is synchronous and can take up to 60 seconds, so set your HTTP client timeout to at least 60 seconds.
Key Benefits
One endpoint
Send a PDF to POST /v1/parse and get JSON back. No multi-step workflow, no polling.
Multi-column layouts
Many resume templates use two columns, with contact info in a sidebar and experience in the main body. The parser uses the position of text on the page to keep sidebar content separate from job descriptions.
Readable output
Job titles in all caps are converted to title case, and descriptions come back as markdown with bullet points kept.
Failed parses are not charged
If a PDF can't be parsed, you get an error and no parse is billed.
Code examples
# Parse a PDF resume (PDF only, max 5 MB)
curl https://api.resumeparser.cc/v1/parse \
-H "Authorization: Bearer rp_live_..." \
-F "[email protected]"
# Response: { "data": { firstName, lastName, emailAddress,
# phoneNumber, location, workExperiences[], educations[],
# languages[], linkedInLink, ... },
# "usage": { billedAs, freeRemaining, creditBalance } }const formData = new FormData();
formData.append('file', pdfBlob, 'resume.pdf');
const response = await fetch('https://api.resumeparser.cc/v1/parse', {
method: 'POST',
headers: { Authorization: 'Bearer rp_live_...' },
body: formData,
});
const { data, usage } = await response.json();
console.log(data.firstName, data.lastName);
console.log(data.emailAddress);
for (const exp of data.workExperiences ?? []) {
console.log(`${exp.title} at ${exp.organization}`);
console.log(` ${exp.startYear}-${exp.isOngoing ? 'present' : exp.endYear}`);
}
console.log(usage.freeRemaining, usage.creditBalance);Technical Details
The parser reads the PDF's text layer together with the position of each piece of text, which helps with multi-column templates where naive top-to-bottom reading produces garbled output. The text is then passed to a large language model for field extraction. There is no OCR: a PDF without a text layer (for example a scanned paper resume) cannot be parsed. The maximum file size is 5 MB. 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
No. There is no OCR, so the PDF needs a text layer. Most PDFs exported from Word, Google Docs or LaTeX have one; a scanned paper resume usually does not.
The parser uses the position of text on the page, so content in a sidebar (typically contact info and skills) is kept apart from the main body (work experience and education). Test with samples of your own resumes to see how it handles your mix of templates.
It handles many creative layouts, but text embedded in images or graphics cannot be read. Test with representative samples from your applicant pool.
The maximum file size is 5 MB. Parsing is synchronous and can take up to 60 seconds, so set your HTTP client timeout to at least 60 seconds. The result comes back in the same response.
No, PDF only for now. Convert other formats to PDF before sending them.
Related pages
Contact Information Extraction
Extract name, email, phone, LinkedIn profile and location from PDF resumes as structured JSON.
SolutionsResume Parser for Staffing Agencies
Turn candidate CVs into ATS-ready JSON with one API call. Contact details, work history, education, and languages. Prepaid credits that don't expire. 50 free parses per month.
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.
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.
Test with your most difficult PDFs
50 free parses per month. Send multi-column or creatively formatted resumes and compare the output against manual data entry.