Best AI Resume Parsing APIs for Structured JSON Output
If you need a resume parsing API that turns PDF and DOCX resumes into clean, machine-readable JSON, the hard part is not just extracting names and emails. The real test is whether the parser keeps work history, education, skills, certifications, and layout-dependent fields accurate across clean, multi-column, messy, and OCR-only resumes without manual field mapping.
Excellent when you know exactly which fields you want, but it silently drops anything outside the schema and can map the wrong data to a field name.
#2 Parseur· #3 Affinda· #4 HrFlow· #5 CVParserPro· #6 Skima AI· #7 Hireability· #8 OpenResume· #9 Airparser· #10 LlamaParse
The ranking
How we decided #1. We rank on the 5 checks that decide whether a tool does this job: Accuracy, Field coverage, Messy resume handling, Multi-column handling, Noise in output. A check only carries a score when we recorded a finding for it, and a tool has to be measured on all of them to take the top spot. We also checked Custom field support, Export format, Free tier viability, Input handling, Output format — compared for you, but not part of the ranking.
| Tool | Score | Where it lands | ||
|---|---|---|---|---|
| #1 | Extracta.ai | Best | 4.8/5 all 5 checks | Best for schema-driven resume extraction with very clean JSON and low output noise. |
| #2 | Parseur | Usable | 4.4/5 all 5 checks | Strong template-driven parser for core resume fields, but it weakens on structured list fields and messy education details. |
| #3 | Affinda | Usable | 3.6/5 all 5 checks | Strong on structured JSON, custom fields, and multi-column layouts, but it needs cleanup for accuracy and noisy skills. |
| #4 | HrFlow | Needs work | 3.0/5 all 5 checks | Reliable API parser for clean PDFs, but noisy and less accurate on harder layouts. |
| #5 | CVParserPro | Needs work | 3.0/5 all 5 checks | Good at building a structured candidate profile, but weak on date accuracy and fixed-schema flexibility. |
| #6 | Skima AI | Needs work | 2.6/5 all 5 checks | Fast on basic resumes, but weak on structured output and sidebar-heavy layouts. |
| #7 | Hireability | Unstable | 2.0/5 all 5 checks | Strong on JSON/API delivery, but shaky on layout edge cases and noisy skill output. |
| #8 | OpenResume | Unstable | 2.0/5 all 5 checks | Free, zero-signup browser parser that opens PDFs easily, but it is brittle on field placement and offers no machine-readable export. |
| #9 | Airparser | Partly tested | 4.5/5 4 of 5 — no noise in output evidence | Strongest at readable JSON extraction from varied resumes, but it can slip on exact contact details and title completeness. |
| #10 | LlamaParse | Partly tested | 4.3/5 4 of 5 — no noise in output evidence | Strongest at structured extraction and layout resilience, but less reliable on exact value fidelity and consistent field naming. |
What we checked
Every finding below is tied to one of these checks, and to the test that produced it. The number is how many of the 10 tools we recorded findings for.
What we tried
The same 3 tests wererun on every tool. Pick one to see its input and every tool's output.
Best for schema-driven resume extraction with very clean JSON and low output noise.
▸Accuracy4/52 worked well1 mixed1 failed4 findings
Most values came through correctly, but the wrong languages mapping and the messy-resume normalization issues keep it from a perfect score.
Misroutes the languages field by pulling programming languages from the Skills section instead of a spoken-languages section, so the field contains the wrong content.
Extracts the messy resume’s values, but leaves some formatting inconsistent: one education percentage stays as raw text ('72 percent marks') while the other entries use different percent formats, and certifications remain lowercase exactly as written.
▸Custom field supportCapability check5/51 worked well1 finding
It clearly lets you choose the output schema up front and then sticks to that schema, so developer-controlled fields are well supported.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Requires the developer to define fields in the schema before parsing, and only those defined fields are returned; undeclared fields are silently skipped instead of being inferred.
▸Export formatCapability check5/51 worked well1 finding
The tool delivers results as JSON, and there’s no sign of alternate export channels in the tested runs.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Delivers extracted data as JSON; the report does not mention CSV, webhook, or any other export channel.
▸Field coverage5/53 worked well3 findings
Across all three tested resumes, it kept the benchmark sections intact, so coverage was complete for the fields the benchmark asks for.
Still covers the benchmark sections on the messy resume: contact details, work experience, education, and skills are all extracted, including all three education entries.
Covers the full benchmark set on the sidebar resume: name, email, phone, experience, education, and skills are all extracted from both columns.
▸Input handlingCapability check5/53 worked well3 findings
It took all three PDFs without breaking, including the messy one, so input acceptance looks consistently reliable.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Accepts a messy PDF without errors even when formatting is inconsistent and structural markers are weak.
Accepts a PDF on upload and parses it successfully on the first run with no errors once the schema is defined.
▸Messy resume handling5/51 worked well1 finding
The messy resume did not derail the extractor, and the main sections still came through, so it handled poor formatting very well.
Degrades gracefully on a poorly structured resume: it does not crash or blank out the main sections, and it still extracts the critical fields.
▸Multi-column handling5/51 worked well1 finding
It read the sidebar layout cleanly and kept both columns’ content together, which is exactly what this criterion needs.
Correctly reads a two-column/sidebar layout without any layout configuration, preserving content from both columns.
▸Output formatCapability check5/51 worked well1 finding
The tool consistently delivered machine-readable JSON with stable keys, so the output format is as solid as it gets.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Returns valid, structured JSON with stable field names; the report describes the outputs as clean, minimal JSON rather than a loose text dump.
▸Noise in output5/51 worked well1 finding
The output stayed tight and focused on requested fields, without the extra junk that makes downstream handling harder.
Keeps output lean and avoids extra metadata noise; the report says there are no taxonomy IDs or irrelevant fields, only schema-requested values.
Parseur
Usable#2 of 10Strong template-driven parser for core resume fields, but it weakens on structured list fields and messy education details.
▸Accuracy4/52 worked well1 failed3 findings
It is dependable on straightforward contact and work fields, but one wrong CGPA read on the messy resume shows it can misread numeric education details when the layout gets rough. That keeps it above average, not perfect.
For the fields it does capture, the parser returns the key values correctly, including the candidate identity and the two work-experience descriptions with their dates and metrics.
On the clean resume, it extracts the candidate's name, current role, location, phone number, email, and LinkedIn URL correctly, with title case preserved where shown.
▸Custom field supportCapability check5/51 worked well1 finding
The workflow lets you define the schema up front and change it later, and the parser follows that schema closely instead of forcing a fixed field set. That is strong custom-field control.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The template workflow supports custom schema control: you can add, remove, or rename fields, and the parser returns only the fields defined in that template.
▸Export formatCapability check5/51 worked well1 finding
It offers the main practical delivery options you would expect: JSON, CSV, and Excel, plus a structured object view for inspection. That is a complete and useful export setup.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Parsed data can be exported as JSON, CSV, or Excel, and the UI also offers a structured Object view for the extracted data.
▸Field coverage3/51 worked well1 struggled1 failed3 findings
The clean resume covers the core schema, but the harder resumes leave real sections behind or trim education history. That puts it in the middle: good baseline coverage, but not broad enough to call complete across the tested inputs.
On the messy resume, the education extraction collapses to a single entry and omits the 12th Science and 10th std records.
This run does not cover the full baseline schema because the configured template omits education and skills entirely, and also leaves out CGPA, languages, and work-location subfields.
▸Input handlingCapability check5/53 worked well3 findings
The tested PDFs all went through successfully, so there is no sign of file rejection or input failure in normal use. The only caveat is that the observed runs were through Parseur's document workflow rather than a direct API upload, but the PDF intake itself was stable.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool accepts the PDF and processes the two-column resume successfully after the template has already been configured.
The tool accepts the PDF resume and processes it successfully after the one-time mailbox and template setup.
▸Messy resume handling5/51 worked well1 finding
Even with inconsistent formatting and mixed date styles, the resume stayed parseable. The tool kept going instead of breaking, which is exactly the kind of graceful fallback you want on rough input.
It degrades gracefully on poorly formatted input: the resume remains parseable even though the source is noisy and irregular.
▸Multi-column handling5/51 worked well1 finding
It kept the reading order intact on the sidebar resume and pulled the main work blocks without collapsing the page into gibberish. For a two-column resume, that is the main job, and it did it well.
It handles the sidebar layout well enough to extract the main resume blocks and both work experiences without a reading-order collapse.
▸Output formatCapability check4/51 worked well1 struggled2 findings
It usually returns usable structured key/value output and gives clear export options, but the messy resume shows that list-like content can flatten into a single string. That makes the format workable, but not consistently fully regular.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The parser exposes results as structured key/value output with snake_case field names rather than plain text blobs.
The skills output is emitted as one space-separated string with no array structure or comma delimiters, making it unreliable to split programmatically.
▸Noise in output5/51 worked well1 finding
It stays within the defined template and leaves unsupported data out rather than inventing extra fields. That keeps the output clean and predictable instead of noisy.
Across the inspected outputs, the parser stays template-bound and does not invent extra fields; unsupported data is omitted rather than hallucinated.
▸Free tier viabilityCapability check5/51 worked well1 finding
The UI explicitly says re-processing is free, so the tool is testable without paying before you start iterating on the template. That makes it viable to try on a free path.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The UI explicitly says re-processing is free, so the workflow is testable without a paid plan once the document is loaded.
Strong on structured JSON, custom fields, and multi-column layouts, but it needs cleanup for accuracy and noisy skills.
▸Accuracy2/56 mixed6 findings
It gets the broad shape of the resume right, but repeated misses on numbers, URLs, missing fields, and computed experience make the details unreliable without review.
Leaves the Objective, Summary, and Expected Salary fields blank even though matching content is present in the resume.
Splits one LinkedIn URL into two website entries and drops the /in/ path segment, so the URL is incomplete.
▸Custom field supportCapability check5/51 worked well1 finding
It goes well beyond a fixed resume schema and lets you work with a much richer field set and skill metadata.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Exposes 100+ configurable fields, and the skill output includes richer metadata such as type, software flag, EMSI ID, and Wikipedia info URL.
▸Export formatCapability check5/51 worked well1 finding
The output is delivered in JSON form, which is straightforward to save, inspect, and automate downstream.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Delivers the parsed results as JSON text files rather than CSV or webhook output.
▸Field coverage5/53 worked well3 findings
It kept the core resume sections present across clean, columned, and messy inputs, so the baseline coverage is dependable.
Populated the canonical resume fields on the clean baseline: name, email, phone, work experience, education, and skills.
Still populated the canonical resume fields on the messy resume: name, email, phone, work experience, education, and skills.
▸Input handlingCapability check5/53 worked well3 findings
It accepted every PDF cleanly on the first try, so upload handling is solid and not a limiting factor here.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Accepted the PDF on first upload with no manual layout hints or column mapping required.
Accepted a poorly formatted PDF directly and parsed it without upload-time errors.
▸Messy resume handling5/51 worked well1 finding
It stayed usable on a rough, inconsistent resume and still pulled out the main information instead of falling apart.
Degraded gracefully on irregular formatting, including non-standard date ranges, comma-separated skills, and mixed-in hobbies/references.
▸Multi-column handling5/51 worked well1 finding
It handled the sidebar layout properly, keeping content from each side in the right section instead of blending the columns together.
Correctly separated a two-column/sidebar layout, keeping work history from the left column and education, certifications, skills, and languages from the right sidebar.
▸Output formatCapability check5/51 worked well1 finding
The tool consistently produced machine-readable JSON with named fields, which is exactly what this criterion asks for.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Returns valid, structured JSON outputs with named fields across all three test resumes.
▸Noise in output1/54 failed4 findings
It repeatedly adds duplicate or made-up skill entries, so the skills output is not clean enough to trust as-is.
Pulls certification names into the skills list, including AWS Certified Cloud Practitioner and IBM Mainframe.
Duplicates skills in the output, with Research, Python, and Artificial Intelligence each appearing multiple times.
Reliable API parser for clean PDFs, but noisy and less accurate on harder layouts.
▸Accuracy3/51 worked well1 mixed1 struggled3 findings
It is accurate on the clean resume, but quality drops on the harder ones: task extraction becomes incomplete in the two-column file and formatting normalisation shifts values in the messy file. That pattern is genuinely mixed rather than consistently strong.
On the messy resume, it still extracts the phone number and three education entries, but it lowercases the candidate name and skills and reformats the phone string away from the source punctuation.
Captures only 1 of the 4 Role 1 tasks, returning just reducing batch processing time by 40% and missing the other three responsibilities.
▸Custom field supportCapability check1/51 failed1 finding
There is no way to pick or define your own output fields, so the developer is locked into the built-in schema. That is the core failure for this criterion.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Uses a fixed predefined schema; developers cannot choose or define custom output fields.
▸Export formatCapability check5/51 worked well1 finding
The result is delivered directly in JSON through the API, which is exactly the kind of export path this criterion rewards. No conversion step is needed.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Delivers the parsed result as JSON through the API response.
▸Field coverage4/51 worked well1 finding
It reliably covers the core resume fields on the clean test, but the messy case shows the skills section is not fully complete. That is stronger than partial extraction, but not perfect coverage across harder inputs.
On the clean baseline, the parser populates the full core resume set — name, email, phone, work experience, education, and skills — with 26 skills extracted.
▸Input handlingCapability check5/53 worked well3 findings
It handled every tested PDF shape without crashing, including a clean resume, a two-column layout, and a messy file. That makes input acceptance look consistently solid rather than occasional.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Accepts a PDF resume through the API and parses it successfully without runtime errors.
Accepts a poorly formatted PDF resume through the API and parses it without crashing.
▸Messy resume handling3/51 mixed1 finding
It survives the messy file and still gets useful data out, but the loss of soft skills, certifications, and clean task boundaries shows the parser degrades in a noticeable way. That is partial resilience, not robust cleanup.
Degrades only partially on poor formatting: it returns 10 of 14 technical skills, drops all soft skills, returns zero certifications, and lets Pune bleed into one task item.
▸Multi-column handling3/51 mixed1 finding
It does read the sidebar and main content from a two-column page, but the title truncation shows the layout parsing is not fully reliable. That is a middle-ground result: usable, but not clean.
Recovers sidebar content from the two-column layout, but truncates one job title by dropping the ML suffix and returning only Software Engineer.
▸Output formatCapability check5/51 worked well1 finding
The API response is already machine-readable JSON, so there is no formatting step needed before downstream use. With no sign of free-text output, this is a top score.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Returns parsed resume data as structured JSON in the API response, making the output machine-readable rather than free text.
▸Noise in output2/53 struggled3 findings
The parser repeatedly invents or mislabels extra items, especially in the skills and education sections. Because the noise is repeated across both clean and two-column inputs, this is a clear weakness rather than a minor blemish.
Adds five spurious skill fragments — ml apis, lambda, s3, ml, and rest apis — that are not real skills.
Treats project names and fragments as skills, including parse 500, real-time sales forecasting dashboard, aws lambda + s3, automation tool, react dashboard, ci, and cd.
Good at building a structured candidate profile, but weak on date accuracy and fixed-schema flexibility.
▸Accuracy2/51 worked well3 failed4 findings
The tool gets some basics right, but it repeatedly guesses wrong on dates and experience totals, which are high-value fields for hiring workflows. That mix of one correct run and several serious date mistakes lands it below average.
Interprets the education end date as Present even though the resume gives a 2019 graduation year.
Inflates total experience to 11 years in the profile header even though the resume supports only about 2–3 years of experience.
▸Custom field supportCapability check1/51 failed1 finding
The output schema is locked, so developers cannot tailor the returned fields to their own pipeline or use case.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The schema is fixed: developers cannot add, remove, or rename output fields.
▸Export formatCapability check4/51 worked well1 finding
It does provide a practical export path through CSV download, but the lack of a direct JSON option keeps it from being fully flexible.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The parsed output can be exported as CSV via a download link, and the report says there is no direct JSON download from the UI.
▸Field coverage4/52 worked well1 failed3 findings
It usually returns the main identity, contact, work, education, and skills blocks, but the messy resume drops the lower-school education records, so coverage is strong rather than perfect.
Returns only the degree-level education entry and drops the 10th and 12th standard education records.
Returns the baseline profile as a complete structured set, with name, email, phone, experience, education, and skills all present, plus location, certifications, and language.
▸Input handlingCapability check5/53 worked well3 findings
It took all three PDFs without complaint, including the sidebar layout and the messy resume, so the upload path appears reliable rather than fragile.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Accepts a poorly formatted PDF with inconsistent dates and weak section labeling without errors.
Accepts a two-column/sidebar PDF directly and parses it without any special layout configuration.
▸Messy resume handling3/51 mixed1 finding
It keeps going on a noisy resume and still builds most of the profile, but the date mistakes show that the output is usable rather than robust.
Still extracts the candidate profile, two jobs, skills, and certifications from noisy input, but the result is not fully stable because date interpretation errors remain.
▸Multi-column handling5/51 worked well1 finding
It read the two-column resume in the right order and pulled content from the sidebar without extra setup, so the layout handling looks solid.
Recovers content from both columns, including sidebar content, without needing manual reading-order fixes.
▸Output formatCapability check1/51 failed1 finding
The tool shows results in its own profile view, but it never returns a JSON payload or direct JSON download, so it does not satisfy structured JSON output.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool surfaces parsed results as a structured candidate profile in the UI, but it does not expose a JSON payload or a direct JSON download.
▸Noise in output1/51 failed1 finding
It invents month-level dates that are not in the resume, which is a direct hallucination on a core field and a strong failure for output cleanliness.
Hallucinates month-level dates such as January/December or 2019-01/2021-12 for an experience entry that is only year-based in the source.
Skima AI
Needs work#6 of 10Fast on basic resumes, but weak on structured output and sidebar-heavy layouts.
▸Accuracy3/51 worked well1 failed2 findings
It can be accurate on straightforward resumes, but the truncation on the multi-column input shows that correctness is inconsistent once the layout gets harder.
The baseline parse preserved the expected identity and career details, including the correct 2.9-year total experience calculation.
The parser truncated responsibility text mid-sentence, losing the quantified end of the statement and reducing the factual completeness of the extracted work history.
▸Custom field supportCapability check1/51 failed1 finding
There is no sign of any way to choose fields or define a custom schema, so developer control over the output is effectively absent.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The parser uses a fixed, predefined schema and does not expose a developer control for selecting fields or defining a custom output schema.
▸Export formatCapability check2/51 mixed1 finding
There is at least a visible download action, but the only demonstrated delivery path was on-screen viewing, so the export story is thin and not clearly structured.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Output delivery was demonstrated only as on-screen results in the web UI; a Download Data action was visible, but no JSON, CSV, or webhook export was shown in the report.
▸Field coverage4/51 worked well1 mixed2 findings
It usually covers the standard resume fields, but the two-column case dropped part of that set, so coverage is strong but not complete.
On the baseline single-column resume, the parser covered the standard field set end-to-end: name, email, phone, work experience, education, and skills.
The parser returned the core standard fields on the two-column resume, but it left skills out of the extracted structure, so the standard field set was incomplete.
▸Input handlingCapability check5/51 worked well1 finding
It took PDF files directly and parsed them without any setup friction, so this is a clean full score for upload acceptance.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool accepted PDF uploads directly and parsed them successfully without per-file configuration or layout hints; the upload modal also advertises PDF, doc, docx, and word files with a maximum of 5 files.
▸Messy resume handling3/51 mixed1 finding
It did keep working on messy input, but the output quality degraded sharply, so this lands in the middle rather than the top end.
The parser accepted a poorly formatted PDF without errors, but the extracted content degraded into run-on responsibilities and flattened skills, showing weak graceful degradation on messy input.
▸Multi-column handling1/51 failed1 finding
The two-column resume lost major sidebar sections and projects, which is a core layout failure rather than a small slip.
The two-column/sidebar layout was not fully parsed: sidebar content such as skills, certifications, and languages was dropped, and projects were also missing from the output.
▸Output formatCapability check1/51 failed1 finding
The tool never showed a machine-readable JSON result, only browser-rendered text, so it falls to the bottom of the scale.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The demo never surfaced a valid structured JSON payload; results were shown as rendered text in the browser instead of a machine-readable JSON response.
▸Noise in output2/52 struggled2 findings
It repeatedly leaked formatting junk into the result instead of cleaning it up, and that kind of output noise is serious even when the core fields are present.
The responsibilities output leaked raw formatting markers, producing duplicated bullet styling instead of clean normalized bullets.
The skills section was flattened into one concatenated string without separators, making the extracted output non-normalized and hard to consume programmatically.
▸Free tier viabilityCapability check3/51 mixed1 finding
The product was reachable in a public interface, but there is no proof of a free plan or a no-paid-access path, so testability is possible but not confirmed.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The public UI exposes Sign Up and Request a Demo links, but the report does not establish that parsing is usable on a free plan, so free-tier testability remains unverified.
Strong on JSON/API delivery, but shaky on layout edge cases and noisy skill output.
▸Accuracy2/52 failed2 findings
The parser often lands on the right document, but when it misses, it misses in identity-critical ways, so correctness is not stable enough to trust broadly.
The second employer name was merged with the role title, returning 'Junior Developer XYZ InfoTech' instead of the company name alone.
The parser split one candidate name into GivenName 'Dev' and FamilyName 'loper', producing FormattedName 'Dev loper' instead of the source name.
▸Custom field supportCapability check5/51 worked well1 finding
It offers a broad, configurable field set rather than a fixed one-size-fits-all export, which is strong support for custom output needs.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The report explicitly claims 100+ configurable fields with rich skill metadata, indicating the developer can choose from a large custom field set.
▸Export formatCapability check5/51 worked well1 finding
The deliverable is a structured JSON export, not a loose text dump, so the output format is well suited for downstream automation.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The report says the parser provides full structured JSON export and is API-ready, so JSON is the delivered output format.
▸Field coverage2/51 worked well2 failed3 findings
It covers the basics on a clean page, but once the layout gets harder, core fields start disappearing, so coverage is more often incomplete than dependable.
The baseline resume run covered the standard candidate fields: contact details, work experience, education, certifications, and a 29-item skills/competency set.
Only one education entry was extracted; the visible 12th and 10th entries were missed, so the education coverage was incomplete.
▸Input handlingCapability check5/51 worked well1 finding
It handled PDF uploads cleanly and started parsing on the first try, so there’s no sign of input-level friction or upload failure.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The demo accepted PDF uploads directly and parsed them on first upload without manual configuration or a crash, so basic PDF input handling worked.
▸Messy resume handling4/51 worked well1 finding
On rough input it still reconstructs most of the resume instead of falling apart, but the price is a few merges and missing pieces.
The parser degraded reasonably on a poorly structured resume, still recovering name, contact details, objective, work experience, education, skills, and hobbies despite inconsistent formatting and mixed-in extra text.
▸Multi-column handling1/51 failed1 finding
This is a root failure on two-column layouts: it doesn’t just miss details, it switches the whole resume into the wrong parsing mode.
The two-column resume was misclassified as a Job Order, returning job-style fields such as Title, PositionTitle, and MinimumEducationLevel instead of a candidate-profile parse.
▸Output formatCapability check5/51 worked well1 finding
The output is clearly machine-readable and nested in a consistent JSON shape, which is what you want from an API parser.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool returns structured JSON-style output, with nested Results → HireAbilityJSONResults objects and field/value pairs rather than freeform text.
▸Noise in output1/53 failed3 findings
Noise shows up in different forms across all three resumes, so the output can be polluted even when the parser seems to be working.
Certifications, skills, and references were collapsed into a single CertificationName field instead of being separated into distinct outputs.
The competency output showed blank level values and mixed in non-skill terms such as Engineering and Software as competencies, which is incorrect output noise.
▸Free tier viabilityCapability check3/51 mixed1 finding
It is clearly testable under a capped allocation, but the available evidence doesn’t say whether that allocation is free or tied to a paid plan.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The demo screens expose an allocation quota of 30 requests, with 10–12 used and 18–20 remaining, so the tool is testable under a capped allocation; however, the report does not say whether that allocation is free or paid.
OpenResume
Unstable#8 of 10Free, zero-signup browser parser that opens PDFs easily, but it is brittle on field placement and offers no machine-readable export.
▸Accuracy1/55 failed5 findings
The misses weren't isolated to one section: identity, contact, summary, GPA, and work-experience mapping all broke across the tested resumes, which points to a brittle parser rather than a one-off slip.
The summary field can be populated with a job-title headline instead of an actual summary, so the extracted value is semantically wrong even when text is present.
The GPA matcher can miss an 8.7/10 CGPA and leave the date row carrying the education text instead of the GPA value.
▸Custom field supportCapability check1/51 failed1 finding
The output schema is fixed, so there is no way to tailor the fields to a custom downstream workflow.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The parser uses fixed fields only and does not let the developer add, remove, or rename output fields.
▸Export formatCapability check1/51 failed1 finding
There is no export channel for JSON or other programmatic handoff, so the tool is view-only rather than integration-ready.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
There is no JSON export or other programmatic export path; output is view-only in the browser.
▸Field coverage4/51 mixed1 finding
It covered the core contact and content fields on the clean resume, but leaving both name and phone blank and pushing CGPA into Date keeps it short of full coverage.
On the clean single-column resume, the parser covered email, experience, education, and skills, but it left the name blank, omitted the phone number, and failed to place GPA in the education field; that is 4 of the 6 fixed fields covered at best.
▸Input handlingCapability check5/53 worked well3 findings
It opened all three tested PDFs directly in the browser without crashing or blocking the run, so intake looks reliable across the inputs we tried.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool accepts a messy PDF resume directly and parses it without crashing.
The tool accepts a PDF resume directly in the browser without signup, setup, or parsing errors.
▸Messy resume handling1/51 failed1 finding
When headers and formatting were weak, the parser lost structure in education and work experience, which shows it depends on clean visual cues to stay aligned.
On a poorly structured resume, the parser degrades badly: education fields go blank or wrong, the company field becomes a bullet-point description, and job title remains empty.
▸Multi-column handling1/51 failed1 finding
The sidebar layout threw off section ordering enough to merge company and job title, so the parser can't reliably follow two-column reading order.
On a two-column/sidebar layout, the parser can merge company and job title into the same value, showing that it cannot reliably separate columns with mixed reading order.
▸Output formatCapability check1/51 failed1 finding
The result stays in the browser instead of coming back as structured data, so there is no machine-readable payload to consume.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool does not return structured JSON output; the parsed result stays in the browser UI instead of being delivered as machine-readable JSON.
▸Noise in output3/51 mixed1 finding
It doesn't invent many new categories, but it does fold unrelated text into the skills block, which is still noisy because it blurs section boundaries.
The parser can also merge unrelated content into one output block, lumping certifications, references, and hobbies into the skills section instead of keeping them separate.
▸Free tier viabilityCapability check5/51 worked well1 finding
You can try it immediately in the browser with no signup or paid gate, so it is easy to evaluate for free.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The tool is testable for free in a browser with zero signup, so it can be evaluated without a paid plan or enterprise outreach.
Airparser
Usable#9 of 10Strongest at readable JSON extraction from varied resumes, but it can slip on exact contact details and title completeness.
▸Accuracy3/52 worked well2 failed4 findings
It was often right on numbers and messy text, but the clean resume had two important misses on contact and title fields. That makes the overall result mixed: useful for most content, yet not trustworthy enough for fully hands-off use on every critical field.
Truncated the headline job title from 'AI Research Analyst & Software Developer' to 'AI Research Analyst', silently dropping the second role.
Misread the email local part, outputting rugged.nichite@email.com instead of rugved.nichite@email.com.
▸Custom field supportCapability check5/51 worked well1 finding
It supports developer-defined fields and sticks to the requested schema rather than forcing a fixed template. That makes it highly flexible for downstream workflows that need specific resume fields.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Lets the developer define fields in natural language, then returns exactly those fields and nothing else once the schema is set.
▸Export formatCapability check5/51 worked well1 finding
The output delivery is consistently JSON, which is straightforward to consume in apps and scripts. There is no evidence of alternative export paths in these runs, but JSON delivery itself is clear and stable.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Delivers parsed results as JSON rather than CSV or webhook output, with consistent field names across runs.
▸Field coverage5/53 worked well3 findings
It covered the core resume fields on every input and even picked up extra sections when they were present. That consistency across simple, sidebar-heavy, and messy resumes is strong evidence of complete field coverage.
Still extracted the core resume fields from noisy input, including contact details, work experience, education, and skills.
Extracted the core resume fields plus sidebar content, including contact info, experience, education, skills, languages, certifications, and projects.
▸Input handlingCapability check5/53 worked well3 findings
It accepted every tested PDF and kept parsing without setup or errors, so this is a clear top score. The fact that it handled both clean and messy resumes the same way shows the upload path is dependable, not just lucky on one easy file.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Accepted the uploaded PDF on the first try and parsed it without manual configuration or errors.
Accepted the PDF and parsed the two-column resume without layout hints or manual adjustment.
▸Messy resume handling5/51 worked well1 finding
It stayed usable on a rough, inconsistently formatted resume and still recovered the important sections. That is exactly the kind of graceful fallback this criterion rewards, so it scores at the top.
Degraded gracefully on messy text, recovering work history, three education entries, certifications, hobbies, and references instead of failing on the formatting noise.
▸Multi-column handling5/51 worked well1 finding
On the one true multi-column test, it read both the main body and the sidebar without needing any layout hints. Because the split layout was handled in one pass, this deserves the top score.
Correctly handled a split-header, two-column layout and read both left-body and right-sidebar content in a single parse.
▸Output formatCapability check5/53 worked well3 findings
It consistently delivered valid JSON across all three runs, which is exactly what this criterion asks for. There were no signs of malformed output or ad hoc text, so the format is reliably machine-friendly.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Returned a well-structured JSON object with consistent field names and readable values.
Returned the parsed result as structured JSON with consistent field names.
Strongest at structured extraction and layout resilience, but less reliable on exact value fidelity and consistent field naming.
▸Accuracy2/54 mixed1 failed5 findings
It usually found the right sections, but it repeatedly missed or distorted details that matter in production, like titles, issuer names, formatting, and capitalization.
Lowercases skill names and does not preserve the original capitalization of the skills list.
Represents CGPA as a label-plus-value string, "CGPA: 8.2 / 10", instead of a clean numeric field.
▸Custom field supportCapability check5/51 worked well1 finding
It lets you define the output shape up front and then returns data in that structure, which is exactly what custom-field support should do.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Supports developer-defined extraction through an Extract feature with a custom JSON schema, and returns the structure defined by that schema.
▸Export formatCapability check5/51 worked well1 finding
It offers more than one delivery path, including the common formats people would actually use downstream.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Offers multiple delivery/export formats, specifically JSON, Markdown, and Excel.
▸Field coverage5/53 worked well3 findings
Across the tested resumes, it kept reaching the full core set of resume fields, even when the layout got harder.
Covers the six core resume fields on a two-column/sidebar PDF: name, email, phone, experience, education, and skills are all present in the extraction.
Covers the six core resume fields on a clean single-column PDF: name, email, phone, experience, education, and skills are all extracted.
▸Input handlingCapability check3/51 mixed1 finding
It clearly accepted PDFs in the demo, but the API path was not tried, so the result is only a partial showing of the actual requirement.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
The demo shows PDF submission being accepted and parsed in the cloud UI, but it does not test API submission, so API-level input handling remains unverified from this report.
▸Messy resume handling5/51 worked well1 finding
It stayed stable on the messy resume and still produced a full structured result instead of breaking down.
Continues parsing a poorly structured resume with inconsistent dates and minimal section labeling, returning a complete structured extraction instead of failing on the noise.
▸Multi-column handling5/51 worked well1 finding
It handled the sidebar layout cleanly and kept both columns readable in the result.
Parses a two-column/sidebar layout without layout hints and still extracts content from both columns into structured output.
▸Output formatCapability check5/51 worked well1 finding
It consistently delivered machine-readable JSON rather than loose text, so this criterion is fully met.
This is a capability we checked per tool — whether (and how well) it supports this — so it shows a support verdict and what we found, rather than media or an input→output pair.
Returns structured JSON output for parsed resumes.
Final Take
Extracta.ai is the overall winner because it is the only tool that tops all five decisive checks together: Accuracy 4/5, Field coverage 5/5, Messy resume handling 5/5, Multi-column handling 5/5, and Noise in output 5/5. That makes it the cleanest all-around pick for schema-driven resume extraction with consistently tidy JSON. Parseur is the closest practical alternative if you want strong handling of messy resumes and multi-column layouts, and it also keeps output noise low. The trade-off is lower Field coverage (3/5), so it is stronger on the core parsing flow than on broader structured field capture. Affinda has strong structured JSON, custom fields, and layout handling, but its low Accuracy score (2/5) and especially noisy output (1/5) keep it below the top two. HrFlow is a decent middle option for cleaner PDFs, but it drops on harder layouts and noise. CVParserPro and Skima AI both show useful structure in some areas, but their low Accuracy and/or weak output quality make them less dependable overall. Hireability is attractive if JSON/API delivery matters, but its low Field coverage, weak multi-column handling, and noisy output are major limitations. OpenResume stands out mainly for being free and browser-based, but its very low Accuracy, brittle layout handling, and lack of machine-readable export keep it from competing with the stronger parsers. Airparser and LlamaParse are both marked partly tested, so they stay below fully measured tools by policy even though their measured scores look strong in layout resilience and structured extraction. Airparser looks better balanced than LlamaParse on the recorded decisive checks, while LlamaParse is held back by lower Accuracy and weaker input handling.
Similar Tools
The tools we tested for this use case — each card opens its full tested review.
Need a custom AI solution for this use case?
If you are looking to build a custom resume parsing, resume extraction, or candidate profile JSON pipeline for your business or internal workflow, email us at contact@futuresmart.ai.
Found something inaccurate or missing? We try to keep our AI research accurate and useful. If you found outdated information, an issue, or have a suggestion, email us at collaborate@aidemos.com.