--- title: "Best AI Resume Parser APIs for Structured JSON Output" type: "Ranking" url: "https://aidemos.com/best/resume-parser-api" description: "If you need to turn resume PDFs into clean, machine-readable JSON for an ATS or talent platform, the key question is which parser can reliably extract contact info, work history, education, skills, and certifications across clean, multi-column, and messy layouts. This benchmark compared multiple resume parsing tools on the same resume set to see which ones returned consistent structured data, handled layout complexity, and stayed usable for API integration." readTime: "13 min read" tested: "LlamaParse vs Airparser vs Extracta.ai vs Affinda vs Parseur vs HrFlow vs CVParserPro vs Hireability vs Skima AI vs OpenResume" testedDate: "April 2026" category: "developer-tools" published: "2026-07-11T16:01:21.146857+00:00" updated: "2026-08-17T08:59:34.718220+00:00" evidenceCount: 152 verifiedCount: 96 coverage: "dense" --- # Best AI Resume Parser APIs for Structured JSON Output `10 tools tested` · `API-ready parsing` · `Structured JSON` · `PDF resumes` · `Multi-column layouts` · `Messy resumes` **Tested:** LlamaParse vs Airparser vs Extracta.ai vs Affinda vs Parseur vs HrFlow vs CVParserPro vs Hireability vs Skima AI vs OpenResume · April 2026 > If you need to turn resume PDFs into clean, machine-readable JSON for an ATS or talent platform, the key question is which parser can reliably extract contact info, work history, education, skills, and certifications across clean, multi-column, and messy layouts. This benchmark compared multiple resume parsing tools on the same resume set to see which ones returned consistent structured data, handled layout complexity, and stayed usable for API integration. ## Our Verdict **#1 pick: LlamaParse** (Best) — Very strong on structured skills, certifications, and messy documents, but inconsistent keys and a few value-drift issues make it less reliable for production integrations. - #2 Airparser — Strong on PDF ingestion, layout handling, and clean JSON delivery, but occasional accuracy slips on key contact and title fields. - #3 Extracta.ai — Very strong on structured JSON extraction and layout handling, but it relies on a predeclared schema and can misplace a few values like languages and CGPA. - #4 Affinda — Strong at layout handling and structured JSON, but held back by noisy skill output and shaky numeric accuracy. - #5 Parseur — Reliable template-based parser with strong exports, but setup-heavy and weak at keeping multi-value fields structured. - #6 HrFlow — Strong on basic API parsing and structured JSON output, but it loses precision in skills, tasks, and exact text fidelity. - #7 CVParserPro — Easy-to-run PDF parser with clean profiles and CSV export, but its field accuracy is shaky and the schema stays fixed. - #8 Hireability — Strong on automation and structured JSON, but shaky on accuracy, noisy competency output, and two-column resumes. - #9 Skima AI — Fast at basic resume intake and core fields, but weak on structure, layout complexity, and clean downstream export. - #10 OpenResume — Strong on free, automated browser parsing for simple resumes, but weak on structured export and reliability beyond clean single-column layouts. ## How We Tested The benchmark compared resume parsing tools on the same three shared PDF resumes: a clean single-column resume, a two-column sidebar resume, and a messy real-world resume. Each tool was checked for whether it accepted the file, returned structured JSON or similarly machine-readable fields, preserved key candidate data, and handled layout complexity without hallucinations, truncation, or field drift. The source research also defined a later API addendum with an OCR edge case, but the published tool findings in this page are based on the three core PDFs used across the per-tool reports. **What we evaluated:** | Criterion | Description | | --- | --- | | Input handling | Does the tool accept PDF via API without errors? | | Automation level | Is it fully automated after upload/schema setup, with no manual field mapping or per-file setup? | | Output quality | Is the parsed result clean, complete, and usable overall? | | Output format | Does it return valid, structured JSON? | | Field coverage | Are name, email, phone, experience, education, and skills extracted? | | Accuracy | Are extracted values correct and complete? | | Multi-column handling | Does it correctly parse two-column sidebar layouts? | | Messy resume handling | Does it degrade gracefully on poorly formatted input? | | Noise in output | Does it add incorrect or hallucinated fields? | | Custom field support | Can the developer define or select specific output fields? | | Export format | How is the output delivered — JSON, CSV, webhook? | | Free tier viability | Is the tool testable without a paid plan or enterprise outreach? | ## The Ranking 10 tools tested head-to-head on the same input. ### 1. LlamaParse — Best *Strong at rich structured extraction and layout handling, but less reliable on exact values and stable field names.* Very strong on structured skills, certifications, and messy documents, but inconsistent keys and a few value-drift issues make it less reliable for production integrations. ### 2. Airparser — Usable *Strong on PDF ingestion, layout handling, and clean JSON delivery, but occasional accuracy slips on key contact and title fields.* Excellent when you can define a schema up front and want human-readable structured output, but it still has contact-field typos and flatter skill structure than the top pick. ### 3. Extracta.ai — Usable *Very strong on structured JSON extraction and layout handling, but it relies on a predeclared schema and can misplace a few values like languages and CGPA.* Very good for teams that know exactly which fields they want, but it is highly dependent on the initial schema and can miss or mis-map fields that were not defined explicitly. ### 4. Affinda — Usable *Strong at layout handling and structured JSON, but held back by noisy skill output and shaky numeric accuracy.* Best default choice for production resume parsing when you want broad field coverage, strong multi-column support, and a fully automated workflow. ### 5. Parseur — Usable *Reliable template-based parser with strong exports, but setup-heavy and weak at keeping multi-value fields structured.* Useful once a template is configured, but its output is template-limited, some fields stay flat or missing, and it is less flexible than the top API parsers. ### 6. HrFlow — Usable *Strong on basic API parsing and structured JSON output, but it loses precision in skills, tasks, and exact text fidelity.* Works for core extraction, but phone truncation, lowercase output, missing certifications, and noisy skills keep it in the needs-work tier. ### 7. CVParserPro — Usable *Easy-to-run PDF parser with clean profiles and CSV export, but its field accuracy is shaky and the schema stays fixed.* Can extract a useful profile, but wrong experience calculations, missing LinkedIn and CGPA fields, and no direct JSON export make it a poor fit for this use case. ### 8. Hireability — Usable *Strong on automation and structured JSON, but shaky on accuracy, noisy competency output, and two-column resumes.* It returns JSON and can recover some messy resumes, but name splits, multi-column misclassification, and merged fields make it unstable for dependable resume ingestion. ### 9. Skima AI — Needs work *Fast at basic resume intake and core fields, but weak on structure, layout complexity, and clean downstream export.* The parser surfaces some obvious fields, but output truncation, missing sections, concatenated skills, and no clear structured export make it unreliable for automation. ### 10. OpenResume — Needs work *Strong on free, automated browser parsing for simple resumes, but weak on structured export and reliability beyond clean single-column layouts.* Useful as a browser demo, but missing JSON export, fixed single-column assumptions, and critical field failures make it a failed choice for API parsing. ## Full Breakdown ### LlamaParse Layout-aware parser with the richest nested JSON structure, especially strong on skills categories, certifications, and messy documents. ![LlamaParse screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input-1-clean-resume-d56ebcff8cec.pdf) *Screenshot — Clean Rugved Nichite resume used for the first LlamaParse extraction.* ![LlamaParse screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input-2-multicolumn-resume-715fd9f46669.pdf) *Screenshot — Priya Sharma multi-column resume used for the second LlamaParse extraction.* ![LlamaParse screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input-3-messy-resume-531b45c70847.pdf) *Screenshot — John Kumar messy resume used for the third LlamaParse extraction.* **What worked:** - LlamaParse produced the most structurally rich output of the group, with nested skills categories, structured certifications including issuer and year, and clean arrays for responsibilities. It handled the clean resume and the messy resume particularly well, and it returned the best-organized skills output of all the tools tested. The multi-column resume was also parsed correctly, including the headline, projects, certifications, and languages. **Where it struggled:** - Its biggest issue is consistency. The field names change across parses, issuer depth varies by input, the AI prefix was dropped from the clean-resume job title, and CGPA was embedded in a string rather than normalized. It also omits keys entirely when data is absent, which is risky for production integrations that expect stable schemas. **What came out:** ![LlamaParse output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-29-a8d4dbf421e9.png) *Output — The clean-resume output omits the education start date and languages key entirely, so a downstream system would need to handle missing keys instead of nulls or empty arrays.* ![LlamaParse output showing Job title output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-30-ba2cf319ffcb.png) *Output — The job title dropped the AI prefix and returned only Research Analyst & Software Developer, which is a subtle but important accuracy error.* ![LlamaParse output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-31-91703d088685.png) *Output — The CGPA appears as a string in the grade field rather than as a clean numeric value, so the score is not normalized.* ![LlamaParse output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-33-8a3afaf96fc9.png) *Output — On the multi-column resume, certification issuer data is missing even though the clean resume included issuer fields, so the depth is inconsistent across parses.* ![LlamaParse output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-35-10e22860aec5.png) *Output — The messy-resume output omits the languages key entirely instead of returning an empty array, which makes the schema brittle for integrations.* ![LlamaParse output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-36-96a5ccc4772e.png) *Output — The same candidate name is represented with different key structures across parses, showing field-naming inconsistency between inputs.* ![LlamaParse output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-37-3fa0e84fbf46.png) *Output — The 72 percent marks entry is preserved as raw text rather than normalized to a percentage, so the three education entries use three different grade formats.* ![LlamaParse output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-38-a64cab3d3997.png) *Output — All skills are returned in lowercase, so the parser loses original casing even though the data itself is correctly identified.* ### Airparser GPT-powered resume parser that returns clean, human-readable JSON and works well on messy layouts after one-time schema setup. ![Airparser screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-122629-f935fd4bda50.png) *Screenshot — Clean Rugved Nichite resume uploaded to Airparser for the first parse.* ![Airparser screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-122945-68f6d798c0ec.png) *Screenshot — Priya Sharma multi-column resume uploaded to Airparser for the second parse.* ![Airparser screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-123432-a35c1a499a04.png) *Screenshot — John Kumar messy resume uploaded to Airparser for the third parse.* **What worked:** - Airparser returned clear JSON with readable field names, clean contact blocks, strong multi-column extraction, and good messy-resume recovery. It captured the full LinkedIn URL, both jobs, both certifications on the clean resume, and the complete project descriptions on the sidebar resume. It also handled the messy resume better than most tools by extracting the objective, both jobs, all three education entries, both certifications, the hobbies, and the soft skills. **Where it struggled:** - The main downside is accuracy and structure consistency: it misread the clean resume email address, trimmed a dual-role job title, flattened skills on the multi-column resume, and collapsed messy-resume skills into a single string. It also preserved inconsistent grade formatting instead of normalizing it, which adds cleanup work for downstream systems. **What came out:** ![Airparser output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-13-d8e65610f452.png) *Output — The email address was misread as rugged.nichite@email.com instead of rugved.nichite@email.com, which is a critical contact-field typo on a clean resume.* ![Airparser output showing Job title output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-14-9d10548d0148.png) *Output — The full title AI Research Analyst & Software Developer was shortened to AI Research Analyst, dropping the Software Developer half without warning.* ![Airparser output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-15-842d91f18e24.png) *Output — The skills from the multi-column resume were returned as a flat list of individual objects instead of preserving the original grouped categories.* ![Airparser output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-16-672e20e3ab7f.png) *Output — On the messy resume, all skills were dumped into one flat string, which means the output is not directly machine-readable as a skills array.* ![Airparser output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-17-9951c2b0789d.png) *Output — The 72 percent marks entry was preserved as raw text rather than normalized to 72%, so the same field appears in multiple formats across the resume.* ### Extracta.ai Schema-first extraction API that produces lean, minimal JSON and is very predictable when the requested fields are well designed. ![Extracta.ai screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-124028-cbdba62c2569.png) *Screenshot — Clean Rugved Nichite resume uploaded for the first Extracta.ai run.* ![Extracta.ai screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-124302-72fb2c1a5ca4.png) *Screenshot — Priya Sharma multi-column resume uploaded for the second Extracta.ai run.* ![Extracta.ai screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-124544-174ecd83f60c.png) *Screenshot — John Kumar messy resume uploaded for the third Extracta.ai run.* **What worked:** - Extracta.ai produced very clean, minimal JSON and handled all three resumes without crashing. It extracted both work histories on the clean and multi-column resumes, captured all 12 sidebar skills on the multi-column resume, and recovered all three education entries and both certifications from the messy resume. Its biggest strength is predictability: it returns only the fields defined in the schema and keeps the output uncluttered. **Where it struggled:** - That same schema-first design is also its limitation. LinkedIn, summary, and projects were skipped when they were not explicitly defined; CGPA was embedded inside description text instead of being split out; the clean resume mis-mapped spoken languages to programming languages; and the messy resume left the languages field empty while preserving inconsistent grade text and lowercase certifications. **What came out:** ![Extracta.ai output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-18-5084dd25264b.png) *Output — LinkedIn was completely absent from the clean-resume output because it was not included in the schema, so the parser silently skipped it.* ![Extracta.ai output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-19-c551b48230e1.png) *Output — The education block returned an empty start_date field because no start date exists in the resume, leaving a placeholder rather than a value.* ![Extracta.ai output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-20-ff29a0bcb59a.png) *Output — The languages field was filled with programming languages from the skills section instead of spoken languages, so the field mapping is wrong on the clean resume.* ![Extracta.ai output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-21-d7373ae42e3a.png) *Output — The CGPA value is buried inside a description string instead of being surfaced as a clean standalone numeric field.* ![Extracta.ai output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-22-d480c512e537.png) *Output — The LinkedIn schema gap repeats on the multi-column resume, confirming that the omission is systematic rather than a one-off miss.* ![Extracta.ai output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-23-509963a6d08b.png) *Output — The multi-column resume again embeds the CGPA value in a description string instead of returning it as a dedicated field.* ![Extracta.ai output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-24-3a276971befb.png) *Output — The education entry has empty start_date and location fields, which is technically accurate but leaves downstream systems with blank placeholders.* ![Extracta.ai output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-25-776d2b48711b.png) *Output — On the messy resume, the languages field is present but empty, so nothing was extracted into the output.* ![Extracta.ai output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-26-67974c9ee1ec.png) *Output — The 72 percent marks entry is returned as raw text instead of being normalized, while the other education entries use different formats.* ![Extracta.ai output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-27-6837a56fb2be.png) *Output — The messy-resume certifications are returned in lowercase exactly as written, with no capitalization normalization.* ### Affinda Enterprise resume parser API with very broad field coverage, deep skill metadata, and strong multi-column handling. ![Affinda screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-124028-cbdba62c2569.png) *Screenshot — Clean single-column resume for Rugved Nichite with contact details, work history, education, skills, and certifications.* ![Affinda screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-124544-174ecd83f60c.png) *Screenshot — Messy single-column resume for John Kumar with objective, work history, education, skills, certifications, references, and hobbies.* ![Affinda screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-screenshot-2026-05-05-121713-ad3c6459cde5.png) *Screenshot — Messy resume input for John Kumar shown in the parser workspace for the third test case.* **What worked:** - Affinda handled all three resumes without crashing and returned rich structured JSON with detailed skill metadata, work history, education, certifications, and languages. It performed especially well on the multi-column resume, where it captured both columns, the language list, and the core experience fields. It also preserved a large amount of structured detail that many other tools flattened away, including durations, taxonomy-style skill metadata, and multiple work entries. **Where it struggled:** - Its most consistent failure was CGPA extraction: the tool repeatedly identified the CGPA unit but left the numeric score blank. It also split LinkedIn across multiple website fields, duplicated and hallucinated skills, missed one certification on the messy resume, inflated the messy-resume experience total, and truncated a project metric on the multi-column resume. **What came out:** ![Affinda output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-a4d5048382b1.png) *Output — The education panel captured the CGPA unit but left the score field empty, so the numeric 8.2 was not extracted even though it is visible in the resume.* ![Affinda output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-2-f4606a85b376.png) *Output — The LinkedIn URL was split across two website fields, with the /in/ path missing and the profile broken into separate entries.* ![Affinda output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-3-0cd2a17ae277.png) *Output — The skills list contains duplicate entries such as Research and Python, showing that the parser inferred repeated skills from multiple parts of the resume.* ![Affinda output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-4-581b3b3ff325.png) *Output — The skills panel includes noise entries such as certification names and IBM Mainframe, which are not real resume skills.* ![Affinda output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-6-3dccf1e09941.png) *Output — On the multi-column resume, the CGPA score is again empty even though the resume clearly shows 8.7/10.* ![Affinda output showing Summary output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-7-2879b39b4f4f.png) *Output — The objective and summary fields are both empty on the multi-column resume, despite the resume containing a prominent headline and summary content.* ![Affinda output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-8-c45ba67702a9.png) *Output — The parser injected the hallucinated skill American Welding Society Codes, which does not appear anywhere in the source resume.* ![Affinda output showing Projects output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-9-a39faf8e4aed.png) *Output — The project description was truncated and lost the Accuracy: 89% metric from the Real-Time Sales Forecasting Dashboard entry.* ![Affinda output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-10-460602eb0dc3.png) *Output — On the messy resume, total experience was calculated as 7.3 years even though the resume states 3 years, so the duration is inflated and wrong.* ![Affinda output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-11-912283799001.png) *Output — The AWS Coursera certification is missing from the messy resume output, even though it is clearly present in the source.* ![Affinda output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-12-b4e836da207c.png) *Output — Business Education appears as a skill on the messy resume, which is noise that does not exist in the source document.* ### Parseur Template-driven parser that can produce clean exports, but it depends heavily on manual setup and returns several flat or missing fields. ![Parseur screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task1-template-setup-cbce417ccafc.png) *Screenshot — Clean Rugved Nichite resume shown during Parseur template setup, where fields must be manually captured before parsing can begin.* ![Parseur screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task2-location-missing-480b88f4ab94.png) *Screenshot — Priya Sharma resume shown in the Parseur interface while the work-experience output panel is visible.* ![Parseur screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task2-languages-missing-d1eaac300720.png) *Screenshot — Priya Sharma resume shown in the Parseur interface with the languages section highlighted as missing from the template.* ![Parseur screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task3-skills-flat-string-mock-875d0c3b778e.png) *Screenshot — John Kumar messy resume shown with the skills output mocked as one unstructured string.* **What worked:** - Parseur can produce clean exports after a one-time template setup, and it handled the clean and multi-column resumes well for the fields that were explicitly configured. The workflow is flexible for field selection, and export options include JSON, CSV, and Excel. It also preserved the clean-resume contact information, job title, summary, and work history in a readable format. **Where it struggled:** - The template itself is the bottleneck: certifications are flattened, CGPA stays embedded in text, work location is omitted, and languages are not captured unless they are part of the template. On the messy resume, skills become one unstructured string, only one education entry is captured, and the CGPA value is wrong, so the output needs substantial cleanup. **What came out:** ![Parseur output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-pa1-certs-flat-string-4c0e766e0831.png) *Output — Both clean-resume certifications are merged into one flat string instead of being returned as separate structured entries.* ![Parseur output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-pa2-cgpa-embedded-0ced843edb15.png) *Output — The CGPA is embedded in the education string rather than exposed as its own field, so the score is not directly machine-readable.* ![Parseur output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-pa3-linkedin-naming-2c74f8e32c41.png) *Output — The LinkedIn field is named linkedin_profile, which is readable but shows the template’s rigid field naming convention.* ![Parseur output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-pa4-cgpa-not-in-template-0842b8e5acd1.png) *Output — The multi-column resume contains CGPA in the document, but the template does not capture it as a separate field.* ![Parseur output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-pa5-languages-not-in-template-21fd4baa8ddd.png) *Output — The multi-column resume’s languages section exists in the source, but the template does not include a languages field.* ![Parseur output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-pa6-work-location-missing-3e10d018df1a.png) *Output — The work-experience location is visible in the resume but missing from the parsed work_experience object because the template has no location sub-field.* ![Parseur output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task3-skills-flat-mock-bae2975459e2.png) *Output — The messy-resume skills are returned as a single unstructured string, so the output is not ready for direct looping or categorization.* ![Parseur output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task3-one-education-mock-ccafe2d4a20d.png) *Output — Only one education record is captured, so the 12th Science and 10th standard entries are missing from the output array.* ![Parseur output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-parseur-task3-cgpa-67-mock-b5b75db4ad5c.png) *Output — The CGPA field is incorrectly populated with 67, which is actually the percentage score from the degree line.* ### HrFlow Developer-first HR API with usable core extraction, but weak normalisation and several noisy or missing fields. ![HrFlow screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-39-c688e0982059.png) *Screenshot — Clean Rugved Nichite resume shown before the first HrFlow parse.* ![HrFlow screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-43-76d24955b1b7.png) *Screenshot — Priya Sharma multi-column resume shown before the second HrFlow parse.* ![HrFlow screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-47-2d3ffda81984.png) *Screenshot — John Kumar messy resume shown before the third HrFlow parse.* **What worked:** - HrFlow accepted the PDF inputs via API and returned structured JSON for all three resumes. It captured the main identity fields, the core work history, and the multi-column resume’s languages correctly. It also handled the messy resume without crashing and correctly returned the full phone number on that third input, unlike the first two where it had truncation problems. **Where it struggled:** - The parser has repeated quality issues: phone numbers are truncated on two inputs, text comes back in lowercase, certifications are unreliable, and several task lists are incomplete or noisy. It also misclassifies certifications as education or skills and tags project fragments as skills, which means the output needs significant post-processing before it can be used safely. **What came out:** ![HrFlow output showing Tasks output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-40-350b7e5067f9.png) *Output — The clean-resume tasks list is missing the Evaluated 10+ AI/ML APIs bullet, so one of the key role tasks was dropped.* ![HrFlow output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-41-7127748465cb.png) *Output — The skills list contains fragments such as ml apis, lambda, s3, ml, and rest apis, which are noisy and not clean skill labels.* ![HrFlow output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-42-9d3e8015b522.png) *Output — The Python for Data Science and AI certification is placed under education instead of certifications, so the field mapping is wrong.* ![HrFlow output showing Job title output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-44-72720a6e30f1.png) *Output — The multi-column resume job title is truncated to Software Engineer, dropping the ML part from the headline.* ![HrFlow output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-45-d3cf98fe6677.png) *Output — The multi-column resume skills contain project-name fragments such as parse 500 and react dashboard, showing over-broad skill tagging.* ![HrFlow output showing Tasks output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-46-d4bb3230e44a.png) *Output — Only one task from the first role was captured, so the other role-one bullets were lost from the output.* ![HrFlow output showing Tasks output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-48-31c759b55391.png) *Output — The messy resume contains a noise task where Pune bleeds into the task text, which indicates weak section separation.* ![HrFlow output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-49-43f65c3666fa.png) *Output — Certification fragments such as udemy 2020 and aws basics coursera 2022 are misclassified as skills.* ![HrFlow output showing Tasks output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-image-50-dd2afbf4f633.png) *Output — The messy resume still has zero tasks for the ABC Tech Solutions role, even though the source contains multiple bullet points.* ### CVParserPro Browser-based profile parser that surfaces useful fields but is not a strong fit for API integration or stable structured export. ![CVParserPro screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task1-experience-11yrs-26ebfa1895f3.png) *Screenshot — Clean Rugved Nichite resume context used for the first CVParserPro parse, where the profile header shows the extracted experience badge.* ![CVParserPro screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task2-experience-2yrs-2a7cc173c5c7.png) *Screenshot — Priya Sharma resume context used for the second CVParserPro parse, where the profile header shows the extracted experience badge.* ![CVParserPro screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task3-month-hallucinated-695991afc700.png) *Screenshot — John Kumar resume context used for the third CVParserPro parse, where the date range is highlighted in the work-experience section.* **What worked:** - CVParserPro extracted a structured profile with contact info, work experience, education, certifications, skills, and languages, and it did so without crashing on any of the three resumes. It also got the messy-resume total experience correct and captured the full name, email, phone, and location on that input. For simple fields, the profile view is easy to inspect. **Where it struggled:** - The output has multiple production blockers: experience totals are wrong on the first two inputs, CGPA is missing, LinkedIn is absent, certifications lose issuing organizations, and the multi-column education dates are inferred rather than explicit. It also does not provide the kind of API-ready JSON export that this use case expects, so even the correct data is not very integration-friendly. **What came out:** ![CVParserPro output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task1-experience-11yrs-26ebfa1895f3.png) *Output — The clean-resume profile header shows 11 years of experience, which is far above the roughly 2 to 3 years stated in the resume.* ![CVParserPro output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task1-cgpa-missing-f318f513ac53.png) *Output — The education section omits CGPA entirely, even though the resume clearly includes 8.2/10.* ![CVParserPro output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task1-linkedin-missing-f365206b77ce.png) *Output — The LinkedIn field is missing from the clean-resume output, so the profile header does not expose the URL.* ![CVParserPro output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task2-experience-wrong-2-yea-c87645ff81f6.png) *Output — The multi-column resume shows only 2 years of experience, which is far below the actual tenure in the source.* ![CVParserPro output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task2-dates-hallucinated-ef866d2a8f65.png) *Output — The education dates are inferred as a full year range, which creates a date value that is not explicitly present in the resume.* ![CVParserPro output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task2-cert-orgs-missing-dad4c687959c.png) *Output — The certification names are returned without issuing organizations, so the output loses important verification detail.* ![CVParserPro output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task3-education-end-date-wro-7bd726adffa2.png) *Output — The education entry ends at Present instead of a completed year, which is incorrect for a finished degree.* ![CVParserPro output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task3-month-hallucinated-695991afc700.png) *Output — The messy-resume work experience picks up month-level date values that appear over-specified compared with the source text.* ![CVParserPro output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-cvparserpro-task3-only-one-education-ent-d3adf5e1bd47.png) *Output — Only one education record is captured, so the 12th and 10th entries are missing from the output.* ### Hireability API-returned structured JSON with useful contact and experience fields, but its parsing behavior is brittle and inconsistent across layouts. ![Hireability screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task1-name-split-dev-loper-77c127014a1c.png) *Screenshot — Clean Rugved Nichite resume context used for the first Hireability parse, where the name text layer caused a split-name artifact.* ![Hireability screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task2-contact-fields-missing-b3b54962f8fc.png) *Screenshot — Priya Sharma resume context used for the second Hireability parse, where the contact header is visible in the source.* ![Hireability screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task3-education-missing-01eae87dd5b4.png) *Screenshot — John Kumar resume context used for the third Hireability parse, where the education block is visible in the source.* **What worked:** - Hireability is API-ready and it does return a structured JSON response with real candidate and job fields. It also recovered the messy resume reasonably well compared with some browser tools, capturing the full name, email, phone, location, objective, education, several skills, and hobbies. On the clean resume it even captured the full phone number and LinkedIn URL. **Where it struggled:** - The parser is unstable across layouts: the clean resume name is split incorrectly, the multi-column resume is misclassified as a job order, and core contact fields disappear. Competency levels are blank, skills are flattened, certifications and references are merged, and employer names absorb role titles, which makes the output risky for production use. **What came out:** ![Hireability output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task1-name-split-dev-loper-77c127014a1c.png) *Output — The clean-resume name is split into Dev and loper, so the parser is clearly misreading the text layer and corrupting the candidate name.* ![Hireability output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task1-competency-beginner-no-d21b6ddafcdb.png) *Output — Every competency is tagged beginner, and non-skill terms such as Intern and Science are mixed into the list.* ![Hireability output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task1-categorized-skills-not-953637385832.png) *Output — The original skill categories from the resume are flattened into one PersonCompetency array, so category structure is lost.* ![Hireability output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task2-contact-fields-missing-b3b54962f8fc.png) *Output — The multi-column resume drops GivenName, FamilyName, Email, Phone, LinkedIn, and Address entirely even though all of them are visible in the source.* ![Hireability output showing Job title output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task2-job-order-misclassific-e8f4531332a1.png) *Output — The multi-column resume is misclassified as a job order, returning job-order-style fields instead of a candidate profile.* ![Hireability output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task2-competency-levels-blan-845c00e10224.png) *Output — The skills and competencies panel shows empty levels, so the output is structurally incomplete.* ![Hireability output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task3-employer-name-merged-m-85d6c25840b0.png) *Output — The employer name is merged with the role title for the second work experience, so the company field is contaminated by job-title text.* ![Hireability output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task3-certs-refs-merged-mock-c80cee78a881.png) *Output — Certifications, skills, and references are merged into one certification field, which makes the output hard to consume programmatically.* ![Hireability output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-hireability-task3-name-merged-7fe55c6e32ce.png) *Output — The employer-name field repeats the same merge error, showing that the role title is being carried into the company field.* ### Skima AI Visual resume parser that can surface some fields quickly, but its output is noisy, incomplete, and not reliably machine-readable. ![Skima AI screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input-1-clean-resume-d56ebcff8cec.pdf) *Screenshot — Clean Rugved Nichite resume used for the first Skima AI parse.* ![Skima AI screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input-2-multicolumn-resume-715fd9f46669.pdf) *Screenshot — Priya Sharma multi-column resume used for the second Skima AI parse.* ![Skima AI screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input-3-messy-resume-531b45c70847.pdf) *Screenshot — John Kumar messy resume used for the third Skima AI parse.* **What worked:** - Skima AI could identify some obvious resume text and extracted the candidate headers, some work history, and a handful of skills. It also calculated a total experience value for the profiles, which is a convenient feature when it happens to be correct. The interface makes it easy to see the parsed result alongside the source resume. **Where it struggled:** - The parser is too noisy and too incomplete for reliable structured extraction. It misses CGPA and certifications on the clean resume, truncates responsibilities on the multi-column resume, drops the entire sidebar of skills and languages on the multi-column input, and merges skills or certifications into single unstructured strings. The messy resume output is especially weak because key sections like references and hobbies are not cleanly captured. **What came out:** ![Skima AI output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-01-input1-gpa-certs-missing-c59774f5e448.png) *Output — The clean-resume education and certification area shows no CGPA extraction and no certifications in the parsed output.* ![Skima AI output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-02-input1-skills-concatenated-mock-96c354edff51.png) *Output — The clean-resume skills are returned as one concatenated string, which is not machine-readable as a proper array.* ![Skima AI output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-03-duplicate-bullets-693039b12af9.png) *Output — The responsibilities section shows duplicated bullet formatting, so the output preserves raw punctuation artifacts instead of cleaning them.* ![Skima AI output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-04-truncated-input2-2aee29b8947f.png) *Output — The multi-column resume truncates a responsibility line mid-sentence, cutting off the quantified cost-saving metric.* ![Skima AI output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-06-input2-sidebar-missing-07290c0a1129.png) *Output — The multi-column sidebar for skills, certifications, and languages is effectively missing from the parsed output.* ![Skima AI output showing Projects output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-07-input2-projects-missing-ec02733eb1a4.png) *Output — The key projects section is missing from the parsed output even though it is clearly visible in the source resume.* ![Skima AI output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-05-runon-input3-2809394923e0.png) *Output — The messy-resume responsibilities are merged into a run-on string rather than clean bullet items.* ![Skima AI output showing Certifications output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-08-input3-certs-refs-hobbies-missing-cacaa19ee964.png) *Output — The lower section that should contain references, certifications, or hobbies is incomplete in the parsed output.* ![Skima AI output showing Skills output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-09-input3-skills-concatenated-mock-d25303702406.png) *Output — The messy-resume skills field is rendered as one concatenated raw string, which is not suitable for direct parsing.* ### OpenResume Free browser parser that is easy to try, but its fixed assumptions and missing API/export path make it unsuitable for this use case. ![OpenResume screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input1-rugved-nichite-cleanresume-5354fbc53b64.pdf) *Screenshot — Clean Rugved Nichite resume used for the first OpenResume parse.* ![OpenResume screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input2-priya-sharma-multicolumnresume-471ac8d903f6.pdf) *Screenshot — Priya Sharma multi-column resume used for the second OpenResume parse.* ![OpenResume screenshot showing Source resume](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-input3-john-kumar-messyresume-12efbcc7cceb.pdf) *Screenshot — John Kumar messy resume used for the third OpenResume parse.* **What worked:** - OpenResume is quick to try and handles a browser-based upload flow with no signup or schema setup. It did extract the email, LinkedIn URL, summary text, skills, and certifications on the clean resume, and it recovered some data from the messy resume, including the name, email, phone, and all three education entries. For a free visual demo it is straightforward to inspect. **Where it struggled:** - The parser is not suitable for this API use case. It returns no JSON export, it assumes a single-column layout, and it fails on key fields like name, phone, GPA, company, and job title. The multi-column resume produces company/job-title mismatches, and the messy resume collapses education and experience fields so severely that the output is not dependable for automation. **What came out:** ![OpenResume output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o1-name-empty-a76b7c79fa7e.png) *Output — The name field is empty on the clean resume even though the candidate name is visible in the adjacent parsed text block.* ![OpenResume output showing Contact output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o2-phone-empty-9d357c7ef89d.png) *Output — The phone field is empty on the clean resume, so the Indian number is not mapped into the dedicated field.* ![OpenResume output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o3-gpa-in-date-field-50e69ddabe2d.png) *Output — The CGPA text lands in the Date field instead of a GPA field, which makes the education data incorrectly placed.* ![OpenResume output showing Summary output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o4-summary-wrong-1197c353ecbe.png) *Output — The summary field is populated with the job-title headline rather than an actual summary paragraph.* ![OpenResume output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o5-gpa-priya-4a208843b703.png) *Output — The multi-column resume again places the CGPA text in the Date field while leaving GPA empty.* ![OpenResume output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o6-company-jobtitle-mismatch-03145f230bed.png) *Output — The company and job title fields both contain the same wrong value, so the parser cannot separate the two work-experience roles correctly.* ![OpenResume output showing Education output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o7-education-failed-9f9f7dee6cc7.png) *Output — The messy-resume education block fails badly, with empty school and degree fields and the raw education line shoved into Date.* ![OpenResume output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o8-company-wrong-e3e7299ec5d3.png) *Output — The company field is filled with a bullet-like job-description fragment instead of an employer name.* ![OpenResume output showing Experience output](https://d3epheqghktydj.cloudfront.net/parse-resumes-into-structured-data-using-o9-jobtitle-empty-464540356fcf.png) *Output — The job title field is empty on the messy resume, so the parser fails to map the role into the right field.* ## Evidence (first-party, tested) *152 tested cells · 96/152 artifact-verified. Cite a cell by its Evidence ID, e.g. `ev:affinda·multi-column-sidebar-resume-priya-sharma·accuracy`.* | Tool | Criterion | Scenario | Verdict | Proof | Evidence ID | | --- | --- | --- | --- | --- | --- | | Affinda | Accuracy | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-7-dc9ad2fa8739.png) | `ev:affinda·multi-column-sidebar-resume-priya-sharma·accuracy` | | Affinda | Accuracy | Clean single-column resume — Rugved Nichite | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-17-ddbc40addae5.png) | `ev:affinda·clean-single-column-resume-rugved-nichite·accuracy` | | Affinda | Accuracy | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-10-d6a62fc24445.png) | `ev:affinda·messy-real-world-resume-john-kumar·accuracy` | | Affinda | Accuracy | cross-scenario | ⚠ struggled | 👁 observed | `ev:affinda·cross·accuracy` | | Affinda | Custom field support | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-3-0cd2a17ae277.png) | `ev:affinda·cross·custom-field-support` | | Affinda | Export format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-json-output-1-4b8efc393b4a.txt) | `ev:affinda·cross·export-format` | | Affinda | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-json-output-1-4b8efc393b4a.txt) | `ev:affinda·clean-single-column-resume-rugved-nichite·field-coverage` | | Affinda | Input handling | cross-scenario | ✓ worked | 👁 observed | `ev:affinda·cross·input-handling` | | Affinda | Messy resume handling | Messy real-world resume — John Kumar | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-10-d6a62fc24445.png) | `ev:affinda·messy-real-world-resume-john-kumar·messy-resume-handling` | | Affinda | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-15-c1c7f2ce6aca.png) | `ev:affinda·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | Affinda | Noise in output | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-8-49ba3c23c23d.png) | `ev:affinda·multi-column-sidebar-resume-priya-sharma·noise-in-output` | | Affinda | Noise in output | Clean single-column resume — Rugved Nichite | ⚠ struggled | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-17-ddbc40addae5.png) | `ev:affinda·clean-single-column-resume-rugved-nichite·noise-in-output` | | Affinda | Noise in output | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/affinda-image-10-d6a62fc24445.png) | `ev:affinda·messy-real-world-resume-john-kumar·noise-in-output` | | Affinda | Noise in output | cross-scenario | ✗ failed | 👁 observed | `ev:affinda·cross·noise-in-output` | | Affinda | Output format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-json-output-1-4b8efc393b4a.txt) | `ev:affinda·cross·output-format` | | Airparser | Accuracy | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-2-5652d1899ce8.png) | `ev:airparser·clean-single-column-resume-rugved-nichite·accuracy` | | Airparser | Accuracy | Messy real-world resume — John Kumar | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-8-0e184cd31272.png) | `ev:airparser·messy-real-world-resume-john-kumar·accuracy` | | Airparser | Accuracy | cross-scenario | ◐ mixed | 👁 observed | `ev:airparser·cross·accuracy` | | Airparser | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-c3584f208d30.png) | `ev:airparser·clean-single-column-resume-rugved-nichite·field-coverage` | | Airparser | Field coverage | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-4-aac909c1959d.png) | `ev:airparser·multi-column-sidebar-resume-priya-sharma·field-coverage` | | Airparser | Field coverage | cross-scenario | ✓ worked | 👁 observed | `ev:airparser·cross·field-coverage` | | Airparser | Input handling | cross-scenario | ✓ worked | 👁 observed | `ev:airparser·cross·input-handling` | | Airparser | Messy resume handling | Messy real-world resume — John Kumar | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-6-cefe3ba8049e.png) | `ev:airparser·messy-real-world-resume-john-kumar·messy-resume-handling` | | Airparser | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-4-aac909c1959d.png) | `ev:airparser·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | Airparser | Output format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-airparser-1-output-566ff479b5bf.txt) | `ev:airparser·cross·output-format` | | Airparser | Output format | Messy real-world resume — John Kumar | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/airparser-image-7-43885cfb8772.png) | `ev:airparser·messy-real-world-resume-john-kumar·output-format` | | CVParserPro | Accuracy | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/cvparserpro-cvparserpro-task2-experience-2yrs-2a7cc173c5c7.png) | `ev:cvparserpro·multi-column-sidebar-resume-priya-sharma·accuracy` | | CVParserPro | Accuracy | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/cvparserpro-cvparserpro-task1-experience-11yrs-26ebfa1895f3.png) | `ev:cvparserpro·clean-single-column-resume-rugved-nichite·accuracy` | | CVParserPro | Accuracy | cross-scenario | ◐ mixed | 👁 observed | `ev:cvparserpro·cross·accuracy` | | CVParserPro | Custom field support | cross-scenario | ✗ failed | 👁 observed | `ev:cvparserpro·cross·custom-field-support` | | CVParserPro | Export format | cross-scenario | ✓ worked | 👁 observed | `ev:cvparserpro·cross·export-format` | | CVParserPro | Field coverage | Clean single-column resume — Rugved Nichite | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/cvparserpro-cvparserpro-task1-cgpa-missing-f318f513ac53.png) | `ev:cvparserpro·clean-single-column-resume-rugved-nichite·field-coverage` | | CVParserPro | Field coverage | Messy real-world resume — John Kumar | ⚠ struggled | 👁 observed | `ev:cvparserpro·messy-real-world-resume-john-kumar·field-coverage` | | CVParserPro | Free tier viability | cross-scenario | ⚠ struggled | 👁 observed | `ev:cvparserpro·cross·free-tier-viability` | | CVParserPro | Input handling | cross-scenario | ✓ worked | 👁 observed | `ev:cvparserpro·cross·input-handling` | | CVParserPro | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 👁 observed | `ev:cvparserpro·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | CVParserPro | Noise in output | cross-scenario | ✗ failed | 👁 observed | `ev:cvparserpro·cross·noise-in-output` | | CVParserPro | Noise in output | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/cvparserpro-cvparserpro-task2-dates-hallucinated-ef866d2a8f65.png) | `ev:cvparserpro·multi-column-sidebar-resume-priya-sharma·noise-in-output` | | CVParserPro | Output format | cross-scenario | ◐ mixed | 👁 observed | `ev:cvparserpro·cross·output-format` | | Extracta.ai | Accuracy | Multi-column sidebar resume — Priya Sharma | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-image-5-aa9cc0c96107.png) | `ev:extracta-labs·multi-column-sidebar-resume-priya-sharma·accuracy` | | Extracta.ai | Accuracy | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-image-5-aa9cc0c96107.png) | `ev:extracta-labs·clean-single-column-resume-rugved-nichite·accuracy` | | Extracta.ai | Accuracy | cross-scenario | ◐ mixed | 👁 observed | `ev:extracta-labs·cross·accuracy` | | Extracta.ai | Custom field support | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-image-b5f6862962fa.png) | `ev:extracta-labs·cross·custom-field-support` | | Extracta.ai | Export format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-extracta-ai-output-1-a01c085fbe66.txt) | `ev:extracta-labs·cross·export-format` | | Extracta.ai | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-screenshot-2026-05-05-124028-cbdba62c2569.png) | `ev:extracta-labs·clean-single-column-resume-rugved-nichite·field-coverage` | | Extracta.ai | Input handling | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-extracta-ai-output-1-a01c085fbe66.txt) | `ev:extracta-labs·cross·input-handling` | | Extracta.ai | Messy resume handling | Messy real-world resume — John Kumar | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-screenshot-2026-05-05-124544-174ecd83f60c.png) | `ev:extracta-labs·messy-real-world-resume-john-kumar·messy-resume-handling` | | Extracta.ai | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-image-5-aa9cc0c96107.png) | `ev:extracta-labs·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | Extracta.ai | Noise in output | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-extracta-ai-output-1-a01c085fbe66.txt) | `ev:extracta-labs·cross·noise-in-output` | | Extracta.ai | Output format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/extracta-ai-extracta-ai-output-1-a01c085fbe66.txt) | `ev:extracta-labs·cross·output-format` | | Hireability | Accuracy | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task3-employer-name-merged-m-85d6c25840b0.png) | `ev:hireability·messy-real-world-resume-john-kumar·accuracy` | | Hireability | Accuracy | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task1-name-split-dev-loper-77c127014a1c.png) | `ev:hireability·clean-single-column-resume-rugved-nichite·accuracy` | | Hireability | Accuracy | cross-scenario | ✗ failed | 👁 observed | `ev:hireability·cross·accuracy` | | Hireability | Custom field support | Clean single-column resume — Rugved Nichite | ⚠ struggled | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task1-categorized-skills-not-953637385832.png) | `ev:hireability·clean-single-column-resume-rugved-nichite·custom-field-support` | | Hireability | Custom field support | cross-scenario | ✓ worked | 👁 observed | `ev:hireability·cross·custom-field-support` | | Hireability | Export format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-image-5-ac69b4ff1dd6.png) | `ev:hireability·cross·export-format` | | Hireability | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 👁 observed | `ev:hireability·clean-single-column-resume-rugved-nichite·field-coverage` | | Hireability | Field coverage | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task2-contact-fields-missing-b3b54962f8fc.png) | `ev:hireability·multi-column-sidebar-resume-priya-sharma·field-coverage` | | Hireability | Field coverage | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task3-education-entries-miss-26097fa84061.png) | `ev:hireability·messy-real-world-resume-john-kumar·field-coverage` | | Hireability | Field coverage | cross-scenario | ◐ mixed | 👁 observed | `ev:hireability·cross·field-coverage` | | Hireability | Free tier viability | cross-scenario | ✓ worked | 👁 observed | `ev:hireability·cross·free-tier-viability` | | Hireability | Input handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 👁 observed | `ev:hireability·multi-column-sidebar-resume-priya-sharma·input-handling` | | Hireability | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task2-job-order-misclassific-e8f4531332a1.png) | `ev:hireability·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | Hireability | Noise in output | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task3-certs-refs-merged-mock-c80cee78a881.png) | `ev:hireability·messy-real-world-resume-john-kumar·noise-in-output` | | Hireability | Noise in output | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task1-competency-beginner-no-d21b6ddafcdb.png) | `ev:hireability·clean-single-column-resume-rugved-nichite·noise-in-output` | | Hireability | Noise in output | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-hireability-task2-competency-levels-blan-845c00e10224.png) | `ev:hireability·multi-column-sidebar-resume-priya-sharma·noise-in-output` | | Hireability | Noise in output | cross-scenario | ✗ failed | 👁 observed | `ev:hireability·cross·noise-in-output` | | Hireability | Output format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hireability-image-7-c8fd67a0f60c.png) | `ev:hireability·cross·output-format` | | HrFlow | Accuracy | Clean single-column resume — Rugved Nichite | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hrflow-image-9-b8fa7c0d0bb8.png) | `ev:hrflow·clean-single-column-resume-rugved-nichite·accuracy` | | HrFlow | Accuracy | Multi-column sidebar resume — Priya Sharma | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hrflow-image-9-b8fa7c0d0bb8.png) | `ev:hrflow·multi-column-sidebar-resume-priya-sharma·accuracy` | | HrFlow | Accuracy | Messy real-world resume — John Kumar | ⚠ struggled | 👁 observed | `ev:hrflow·messy-real-world-resume-john-kumar·accuracy` | | HrFlow | Accuracy | cross-scenario | ◐ mixed | 👁 observed | `ev:hrflow·cross·accuracy` | | HrFlow | Custom field support | cross-scenario | ✗ failed | 👁 observed | `ev:hrflow·cross·custom-field-support` | | HrFlow | Field coverage | Multi-column sidebar resume — Priya Sharma | ✓ worked | 👁 observed | `ev:hrflow·multi-column-sidebar-resume-priya-sharma·field-coverage` | | HrFlow | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hrflow-hrflow-output-1-9f17ceb5aef8.txt) | `ev:hrflow·clean-single-column-resume-rugved-nichite·field-coverage` | | HrFlow | Field coverage | cross-scenario | ◐ mixed | 👁 observed | `ev:hrflow·cross·field-coverage` | | HrFlow | Input handling | cross-scenario | ✓ worked | 👁 observed | `ev:hrflow·cross·input-handling` | | HrFlow | Messy resume handling | Messy real-world resume — John Kumar | ◐ mixed | 👁 observed | `ev:hrflow·messy-real-world-resume-john-kumar·messy-resume-handling` | | HrFlow | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hrflow-image-9-b8fa7c0d0bb8.png) | `ev:hrflow·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | HrFlow | Noise in output | Messy real-world resume — John Kumar | ◐ mixed | 👁 observed | `ev:hrflow·messy-real-world-resume-john-kumar·noise-in-output` | | HrFlow | Noise in output | Clean single-column resume — Rugved Nichite | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hrflow-image-9-b8fa7c0d0bb8.png) | `ev:hrflow·clean-single-column-resume-rugved-nichite·noise-in-output` | | HrFlow | Noise in output | Multi-column sidebar resume — Priya Sharma | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/hrflow-image-9-b8fa7c0d0bb8.png) | `ev:hrflow·multi-column-sidebar-resume-priya-sharma·noise-in-output` | | HrFlow | Noise in output | cross-scenario | ✗ failed | 👁 observed | `ev:hrflow·cross·noise-in-output` | | HrFlow | Output format | cross-scenario | ✓ worked | 👁 observed | `ev:hrflow·cross·output-format` | | LlamaParse | Accuracy | Clean single-column resume — Rugved Nichite | ⚠ struggled | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-3-ddd2752b9f60.png) | `ev:llamaparse·clean-single-column-resume-rugved-nichite·accuracy` | | LlamaParse | Accuracy | Messy real-world resume — John Kumar | ⚠ struggled | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-11-a64cab3d3997.png) | `ev:llamaparse·messy-real-world-resume-john-kumar·accuracy` | | LlamaParse | Accuracy | Multi-column sidebar resume — Priya Sharma | ⚠ struggled | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-6-86b8b2ac1a91.png) | `ev:llamaparse·multi-column-sidebar-resume-priya-sharma·accuracy` | | LlamaParse | Accuracy | cross-scenario | ⚠ struggled | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-9-5135e1c903e9.png) | `ev:llamaparse·cross·accuracy` | | LlamaParse | Custom field support | cross-scenario | ✓ worked | 👁 observed | `ev:llamaparse·cross·custom-field-support` | | LlamaParse | Extraction Accuracy | Invoice PDF | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-invoice-summary-9c05de684d8a.png) | `ev:llamaparse·invoice-pdf·extraction-accuracy` | | LlamaParse | Extraction Accuracy | cross-scenario | ✓ worked | 👁 observed | `ev:llamaparse·cross·extraction-accuracy` | | LlamaParse | Extraction Accuracy | Bank Statement PDF | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-bank-statement-16-jul-value-d-4906fee56b7b.png) | `ev:llamaparse·bank-statement-pdf·extraction-accuracy` | | LlamaParse | Field coverage | Messy real-world resume — John Kumar | ✓ worked | 👁 observed | `ev:llamaparse·messy-real-world-resume-john-kumar·field-coverage` | | LlamaParse | Field coverage | Multi-column sidebar resume — Priya Sharma | ✓ worked | 👁 observed | `ev:llamaparse·multi-column-sidebar-resume-priya-sharma·field-coverage` | | LlamaParse | Field coverage | cross-scenario | ✓ worked | 👁 observed | `ev:llamaparse·cross·field-coverage` | | LlamaParse | Free tier viability | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-54afcf4e20d2.png) | `ev:llamaparse·cross·free-tier-viability` | | LlamaParse | Input handling | cross-scenario | ✓ worked | 👁 observed | `ev:llamaparse·cross·input-handling` | | LlamaParse | Messy resume handling | Messy real-world resume — John Kumar | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-7-180f1deae78b.png) | `ev:llamaparse·messy-real-world-resume-john-kumar·messy-resume-handling` | | LlamaParse | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/llamaparse-image-15-e8ac563d751d.png) | `ev:llamaparse·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | LlamaParse | Output format | cross-scenario | ✓ worked | 👁 observed | `ev:llamaparse·cross·output-format` | | LlamaParse | Schema Adherence | Invoice PDF | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-invoice-metadata-af804b493598.png) | `ev:llamaparse·invoice-pdf·schema-adherence` | | LlamaParse | Schema Adherence | cross-scenario | ✓ worked | 🧾 [proof](https://cdn.futuresmart.ai/public/aidemos/85953a3b02bd40a5a4ba50666d72878a.mp4?v=1) | `ev:llamaparse·cross·schema-adherence` | | LlamaParse | Schema Adherence | Bank Statement PDF | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-bank-statement-extracted-deta-1c069bb9dc7a.png) | `ev:llamaparse·bank-statement-pdf·schema-adherence` | | LlamaParse | Semantic Field Enrichment | Invoice PDF | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-invoice-extracted-line-item-2-f4ecd3c8fd80.png) | `ev:llamaparse·invoice-pdf·semantic-field-enrichment` | | LlamaParse | Semantic Field Enrichment | Bank Statement PDF | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-bank-statement-transaction-id-c01a0d30b3be.png) | `ev:llamaparse·bank-statement-pdf·semantic-field-enrichment` | | LlamaParse | Structural Clean Output | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llama-extract-output-1-790fdeaa33c5.json) | `ev:llamaparse·cross·structural-clean-output` | | LlamaParse | Table & Record Completeness | Invoice PDF | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-invoice-extracted-line-items-eb4fd58a2160.png) | `ev:llamaparse·invoice-pdf·table-record-completeness` | | LlamaParse | Table & Record Completeness | Bank Statement PDF | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-bank-statement-transaction-co-ea2cee32bed3.png) | `ev:llamaparse·bank-statement-pdf·table-record-completeness` | | LlamaParse | Table & Record Completeness | Bank Statement PDF | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-bank-statement-transaction-co-ea2cee32bed3.png) | `ev:llamaparse·bank-statement-pdf·table-and-record-completeness` | | LlamaParse | Table & Record Completeness | Invoice PDF | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-invoice-extracted-line-item-8-ddd5553310ea.png) | `ev:llamaparse·invoice-pdf·table-and-record-completeness` | | OpenResume | Accuracy | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/openresume-o3-gpa-in-date-field-50e69ddabe2d.png) | `ev:openresume·clean-single-column-resume-rugved-nichite·accuracy` | | OpenResume | Accuracy | Multi-column sidebar resume — Priya Sharma | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/openresume-o4-summary-wrong-1197c353ecbe.png) | `ev:openresume·multi-column-sidebar-resume-priya-sharma·accuracy` | | OpenResume | Accuracy | cross-scenario | ✗ failed | 👁 observed | `ev:openresume·cross·accuracy` | | OpenResume | Accuracy | Messy real-world resume — John Kumar | ◐ mixed | 👁 observed | `ev:openresume·messy-real-world-resume-john-kumar·accuracy` | | OpenResume | Custom field support | cross-scenario | ✗ failed | 👁 observed | `ev:openresume·cross·custom-field-support` | | OpenResume | Export format | cross-scenario | ✗ failed | 👁 observed | `ev:openresume·cross·export-format` | | OpenResume | Field coverage | cross-scenario | ✗ failed | 👁 observed | `ev:openresume·cross·field-coverage` | | OpenResume | Field coverage | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/openresume-o2-phone-empty-9d357c7ef89d.png) | `ev:openresume·clean-single-column-resume-rugved-nichite·field-coverage` | | OpenResume | Free tier viability | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/openresume-openresume-tool-demo-video-ee4677fc4171.mp4) | `ev:openresume·cross·free-tier-viability` | | OpenResume | Input handling | cross-scenario | ✓ worked | 👁 observed | `ev:openresume·cross·input-handling` | | OpenResume | Messy resume handling | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/openresume-o9-jobtitle-empty-464540356fcf.png) | `ev:openresume·messy-real-world-resume-john-kumar·messy-resume-handling` | | OpenResume | Messy resume handling | cross-scenario | ✗ failed | 👁 observed | `ev:openresume·cross·messy-resume-handling` | | OpenResume | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/openresume-o6-company-jobtitle-mismatch-03145f230bed.png) | `ev:openresume·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | OpenResume | Output format | cross-scenario | ✗ failed | 👁 observed | `ev:openresume·cross·output-format` | | Parseur | Accuracy | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-image-3-726e4e3fba8c.png) | `ev:parseur·multi-column-sidebar-resume-priya-sharma·accuracy` | | Parseur | Accuracy | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-image-7-c5a350a2e9fe.png) | `ev:parseur·clean-single-column-resume-rugved-nichite·accuracy` | | Parseur | Accuracy | Messy real-world resume — John Kumar | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-image-4-a76ecb3d1154.png) | `ev:parseur·messy-real-world-resume-john-kumar·accuracy` | | Parseur | Accuracy | cross-scenario | ◐ mixed | 👁 observed | `ev:parseur·cross·accuracy` | | Parseur | Custom field support | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-parseur-task1-template-setup-cbce417ccafc.png) | `ev:parseur·cross·custom-field-support` | | Parseur | Export format | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-parseur-task1-export-formats-488f44e5242e.png) | `ev:parseur·cross·export-format` | | Parseur | Field coverage | Multi-column sidebar resume — Priya Sharma | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-pa4-cgpa-not-in-template-0842b8e5acd1.png) | `ev:parseur·multi-column-sidebar-resume-priya-sharma·field-coverage` | | Parseur | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-image-7-c5a350a2e9fe.png) | `ev:parseur·clean-single-column-resume-rugved-nichite·field-coverage` | | Parseur | Field coverage | Messy real-world resume — John Kumar | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-parseur-task3-one-education-mock-ccafe2d4a20d.png) | `ev:parseur·messy-real-world-resume-john-kumar·field-coverage` | | Parseur | Field coverage | cross-scenario | ◐ mixed | 👁 observed | `ev:parseur·cross·field-coverage` | | Parseur | Free tier viability | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-parseur-task2-cgpa-missing-cd54d02758dd.png) | `ev:parseur·cross·free-tier-viability` | | Parseur | Input handling | cross-scenario | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-parseur-task1-template-setup-cbce417ccafc.png) | `ev:parseur·cross·input-handling` | | Parseur | Messy resume handling | Messy real-world resume — John Kumar | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-image-4-a76ecb3d1154.png) | `ev:parseur·messy-real-world-resume-john-kumar·messy-resume-handling` | | Parseur | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/parseur-image-3-726e4e3fba8c.png) | `ev:parseur·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | Skima AI | Accuracy | Clean single-column resume — Rugved Nichite | ◐ mixed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-01-input1-gpa-certs-missing-c59774f5e448.png) | `ev:skima-ai·clean-single-column-resume-rugved-nichite·accuracy` | | Skima AI | Accuracy | cross-scenario | ◐ mixed | 👁 observed | `ev:skima-ai·cross·accuracy` | | Skima AI | Custom field support | cross-scenario | ✗ failed | 👁 observed | `ev:skima-ai·cross·custom-field-support` | | Skima AI | Field coverage | Messy real-world resume — John Kumar | ✓ worked | 👁 observed | `ev:skima-ai·messy-real-world-resume-john-kumar·field-coverage` | | Skima AI | Field coverage | Clean single-column resume — Rugved Nichite | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-image-4-d3d76b30dad1.png) | `ev:skima-ai·clean-single-column-resume-rugved-nichite·field-coverage` | | Skima AI | Field coverage | cross-scenario | ◐ mixed | 👁 observed | `ev:skima-ai·cross·field-coverage` | | Skima AI | Free tier viability | cross-scenario | ✓ worked | 👁 observed | `ev:skima-ai·cross·free-tier-viability` | | Skima AI | Input handling | cross-scenario | ✓ worked | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-01-input-handling-d64b34a20313.png) | `ev:skima-ai·cross·input-handling` | | Skima AI | Messy resume handling | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-05-runon-input3-2809394923e0.png) | `ev:skima-ai·messy-real-world-resume-john-kumar·messy-resume-handling` | | Skima AI | Multi-column handling | Multi-column sidebar resume — Priya Sharma | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-06-input2-sidebar-missing-07290c0a1129.png) | `ev:skima-ai·multi-column-sidebar-resume-priya-sharma·multi-column-handling` | | Skima AI | Noise in output | cross-scenario | ✗ failed | 👁 observed | `ev:skima-ai·cross·noise-in-output` | | Skima AI | Noise in output | Clean single-column resume — Rugved Nichite | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-02-input1-skills-concatenated-mock-96c354edff51.png) | `ev:skima-ai·clean-single-column-resume-rugved-nichite·noise-in-output` | | Skima AI | Noise in output | Messy real-world resume — John Kumar | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-09-input3-skills-concatenated-mock-d25303702406.png) | `ev:skima-ai·messy-real-world-resume-john-kumar·noise-in-output` | | Skima AI | Output format | cross-scenario | ✗ failed | 🧾 [proof](https://d3epheqghktydj.cloudfront.net/skima-ai-01-input-handling-d64b34a20313.png) | `ev:skima-ai·cross·output-format` | > 🧾 = artifact-verified (proof captured) · 👁 = observed (noted, no artifact) · verdicts: worked / mixed / struggled / failed. ## Final Take Extracta Labs is the page’s overall winner because it is fully measured on all 7 decisive checks and delivers the best all-around balance: strong field coverage, input handling, messy-resume handling, multi-column handling, and output quality, even though its accuracy is only moderate and its output still has some noise. The main caveat is that it relies on a predeclared schema and can misplace a few values like languages and CGPA, so it is best when you want reliable structured JSON and layout handling rather than perfect value precision. Affinda is the closest alternative if you care more about automation, but it is held back by noisier skill output and shakier numeric accuracy. Hrflow is a workable pick for basic API parsing and structured JSON delivery, but it loses precision on skills, tasks, and exact text fidelity, and its custom field support is weak. LlamaParse and Airparser both show strong extraction and layout handling, but they are partly tested by policy, so they rank below the fully measured tools even where some scores look competitive. LlamaParse is the better fit when you want rich structured extraction and layout handling but can accept less reliable exact values and stable field names. Airparser is the better fit when PDF ingestion and clean JSON delivery matter most, but it still has occasional accuracy slips on key contact and title fields. Tested as of April 2026 · re-verified monthly. ## Need a custom AI solution for this use case? If you are looking to build a custom resume parsing, structured data extraction, or ATS integration system for your business or internal workflow, email us at [contact@futuresmart.ai](mailto: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](mailto:collaborate@aidemos.com).