JobsFor recruiters2 min read

Auto-parsing a JD from PDF

Already have a job description as a PDF or Word doc? Upload it and we'll extract title, requirements, skills, and description automatically. You confirm; we save.

Key takeaways

  • Click *Scan JD* on the new-job form, upload your PDF/DOCX, wait 5–15 seconds.
  • The platform extracts title, location, experience level, skills (Required + Preferred), and JD text.
  • You review each field, edit anything wrong, and save.
  • Skills lists are usually the field that needs the most cleanup — review them carefully.

Before you start

Most teams already have a JD written somewhere — in Notion, in a Google Doc, in a PDF a hiring manager sent over. Rather than retype it into the new-job form, you can upload it and the platform extracts the structured fields automatically.

How to do it

[@portabletext/react] Unknown block type "undefined", specify a component for it in the `components.types` prop

What gets extracted

  • Title — usually the first prominent line of the document.
  • Location — city/country/Remote, if the JD mentions it.
  • Employment Type — Full-time/Contract/etc.
  • Experience Level — derived from years and seniority language in the JD.
  • Years of Experience — a number or range.
  • Skills (Required) — extracted from must-have language (required, essential, minimum qualifications).
  • Skills (Preferred) — extracted from nice-to-have language (preferred, desired, bonus).
  • Job Description — the full prose; sometimes lightly reformatted.

What does NOT get extracted:

  • Compensation — even if it's in the JD, we don't parse it (sensitive field; recruiter should set it intentionally).
  • Interview duration / mode — these are platform-level settings, not in the JD.
  • Cultural values — same reason; set intentionally.

Things to double-check

The parser is good but not perfect. Spend 60 seconds reviewing before you save.

WARNING

Skills lists are the #1 thing to verify. We sometimes split *React.js* and *React* into two skills, or extract *team player* as a hard skill. Tighten the list by hand — keeping only the 5–10 most relevant Required skills produces sharper AI evaluations later.

Other quick checks:

  1. Is the title specific enough? Software Engineer might come out of a JD that's actually for a Senior Backend role. Edit if needed.
  2. Is Experience Level right? The parser uses heuristics that can mis-classify. Lead in a startup might be a Senior in your taxonomy; Senior in a big company might be your Mid. Use your own scale.
  3. Did the Job Description prose come through cleanly? Sometimes a PDF with tables produces messy line breaks. Clean them up — the AI reads this text when planning the interview.

After save

The job is created identically to one you typed in manually. There is no difference downstream — the platform doesn't track whether a job was parsed or typed.

Next: start inviting candidates.

Frequently asked questions

What file formats are supported?

PDF and DOCX (Word). Plain text and markdown files also work. Image-only PDFs (a scanned JD with no embedded text) may not parse well — OCR is best-effort.

How accurate is the parser?

Title, location, employment type, and JD text usually extract cleanly. Skills are the trickiest — the parser sometimes lumps soft skills with hard skills, or splits a single skill (*React.js* and *React*) into two entries. Always review the skills before saving.

Can I parse a JD I copied from LinkedIn?

Yes — paste the text into the JD field of a new job and the same extraction logic runs on the text. Or save the LinkedIn JD as a PDF first (browser → Print → Save as PDF) and upload it.

Does parsing cost credits?

Yes — JD parsing costs 0.05 credits per upload. Negligible at small scale (50 JDs = 2.5 credits, equivalent to half an interview) but worth knowing if you regularly bulk-create jobs.

Next steps

Related articles