Skip to main content

ATS parsing test

How our resumes parse,tested in the open.

We exported one fictional resume from every HireCurve template as PDF and DOCX, ran each file through open-source resume parsers, and checked every field against what the resume actually says. Everything is here, failures included.

What we found.Then we fixed the templates and ran it again.

  • Text extraction

    11 of 11 files: every value readable, in order

    Before and after the fixes, all 17 ground-truth values are in the extracted text of every template and both formats, and the three roles come out in page order.

  • OpenResume, all PDFs

    37 → 92 of 102 fields

    The first run failed on four layout choices, fixed below. Signal went from 3 to 17 of 17 and Compact to 17 of 17. What it still misses comes from how it reads page two: see what's still weak.

  • pyresparser, all files

    36 → 33 of 132 fields

    Still weak, and not all better: the PDFs of four templates improved, but Signal's PDFs and every DOCX dropped by one field. Its name and company guesses come from a small 2019 language model and shift with the words around them.

What we changed.A parsing fix, not a redesign.

  1. 01

    Title and company on separate lines

    The role heading was one line, “Senior DevSecOps Engineer — Northwind Cloud Services”, which OpenResume read as a company with no title. The company now sits on its own line under the title, in every template and in both PDF and DOCX.

  2. 02

    Signal’s section numbers are drawn, not typed

    OpenResume looks for a heading that is one bold, all-caps word, and Signal’s “01 SUMMARY” wasn’t one. In the PDF the numbers are now vector outlines in the same font and color, so the text is just “SUMMARY”. Word has no ATS-safe way to draw them, so the DOCX leaves them out and keeps the heading at the same indent.

  3. 03

    Name first, tagline under it

    The small focus-area line (“PLATFORM ENGINEERING · KUBERNETES · DEVSECOPS”) sat above the name, so parsers that take the first line as the name got the tagline. It now sits under the name. In Signal it also moved a few pixels lower, because pdf.js joined it to the 32pt name when it was closer.

  4. 04

    Education on two lines

    “B.S. Computer Engineering — University of North Texas, 2016” is now the degree on one line and the school on the next, with the year right-aligned like role dates. The words are unchanged; the line is only split.

Fonts, colors and spacing are otherwise unchanged. Separate lines make roles a little taller, so some templates now run onto a second page.

Results by file.Correct fields, before → after the fixes.

FileText extractionOpenResumepyresparser
Signal · PDF17 → 17 of 17all correct3 → 17 of 17all correct7 → 6 of 122 partial, 1 wrong, 3 missing
Signal · PDF (dark)17 → 17 of 17all correct3 → 14 of 173 missing7 → 6 of 122 partial, 1 wrong, 3 missing
Signal · DOCX17 → 17 of 17all correctPDF only2 → 1 of 123 partial, 8 missing
Classic · PDF17 → 17 of 17all correct8 → 14 of 173 missing2 → 3 of 122 partial, 7 missing
Classic · DOCX17 → 17 of 17all correctPDF only2 → 1 of 123 partial, 8 missing
Modern · PDF17 → 17 of 17all correct8 → 14 of 173 missing2 → 3 of 122 partial, 7 missing
Modern · DOCX17 → 17 of 17all correctPDF only2 → 1 of 123 partial, 8 missing
Compact · PDF17 → 17 of 17all correct8 → 17 of 17all correct2 → 3 of 122 partial, 7 missing
Compact · DOCX17 → 17 of 17all correctPDF only2 → 1 of 123 partial, 8 missing
Executive · PDF17 → 17 of 17all correct7 → 16 of 171 missing6 → 7 of 122 partial, 3 missing
Executive · DOCX17 → 17 of 17all correctPDF only2 → 1 of 123 partial, 8 missing

Grey is the first run on the original templates (2026-09-27); black is the run on the fixed templates (2026-09-27), same resume, same parser versions and same scoring rules. Counts, not a score: a field is either extracted correctly or it isn't. Fields a parser doesn't attempt (pyresparser has no location, role dates or graduation year) are left out of its count. The 5 DOCX files have no OpenResume result because it reads PDF only.

Every field, every file (fixed templates)

›Signal · PDF
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectcorrectJORDAN OKAFORwrongDEVSECOPS Austin
Emailjordan.okafor@example.comcorrectcorrectjordan.okafor@example.comcorrectjordan.okafor@example.com
Phone(555) 010-2233correctcorrect(555) 010-2233partial010-2233
LocationAustin, TXcorrectcorrectAustin, TXn/a
Role 1 titleSenior DevSecOps EngineercorrectcorrectSenior DevSecOps EngineercorrectSenior DevSecOps Engineer
Role 1 companyNorthwind Cloud ServicescorrectcorrectNorthwind Cloud ServicesmissingBrightline Health
Role 1 dates2022-03 – presentcorrectcorrectMAR 2022 – PRESENTn/a
Role 2 titleSite Reliability EngineercorrectcorrectSite Reliability EngineercorrectSite Reliability Engineer
Role 2 companyBrightline HealthcorrectcorrectBrightline HealthcorrectBrightline Health
Role 2 dates2019-06 – 2022-02correctcorrectJUN 2019 – FEB 2022n/a
Role 3 titleSystems EngineercorrectcorrectSystems EngineercorrectSystems Engineer
Role 3 companyKeystone SystemscorrectcorrectKeystone SystemsmissingBrightline Health
Role 3 dates2016-07 – 2019-05correctcorrectJUL 2016 – MAY 2019n/a
DegreeB.S. Computer EngineeringcorrectcorrectB.S. Computer EngineeringcorrectB.S. Computer Engineering
SchoolUniversity of North TexascorrectcorrectUniversity of North Texasmissing
Graduation year2016correctcorrect2016n/a
Skills26 skillscorrect (26 of 26)correct (26 of 26)Cloud & Containers AWS, Kubernetes, Amazon EKS, Docker, Helm, Karpenter, Infrastructure as Code Terraform, Ansible, AWS Config, CI/CD & GitO…partial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · OpenResume · pyresparser

›Signal · PDF (dark)
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectcorrectJORDAN OKAFORwrongDEVSECOPS Austin
Emailjordan.okafor@example.comcorrectcorrectjordan.okafor@example.comcorrectjordan.okafor@example.com
Phone(555) 010-2233correctcorrect(555) 010-2233partial010-2233
LocationAustin, TXcorrectcorrectAustin, TXn/a
Role 1 titleSenior DevSecOps EngineercorrectcorrectSenior DevSecOps EngineercorrectSenior DevSecOps Engineer
Role 1 companyNorthwind Cloud ServicescorrectcorrectNorthwind Cloud ServicesmissingBrightline Health
Role 1 dates2022-03 – presentcorrectcorrectMAR 2022 – PRESENTn/a
Role 2 titleSite Reliability EngineercorrectcorrectSite Reliability EngineercorrectSite Reliability Engineer
Role 2 companyBrightline HealthcorrectcorrectBrightline HealthcorrectBrightline Health
Role 2 dates2019-06 – 2022-02correctcorrectJUN 2019 – FEB 2022n/a
Role 3 titleSystems EngineercorrectmissingcorrectSystems Engineer
Role 3 companyKeystone SystemscorrectmissingmissingBrightline Health
Role 3 dates2016-07 – 2019-05correctmissingn/a
DegreeB.S. Computer EngineeringcorrectcorrectB.S. Computer EngineeringcorrectB.S. Computer Engineering
SchoolUniversity of North TexascorrectcorrectUniversity of North Texasmissing
Graduation year2016correctcorrect2016n/a
Skills26 skillscorrect (26 of 26)correct (26 of 26)Cloud & Containers AWS, Kubernetes, Amazon EKS, Docker, Helm, Karpenter, Infrastructure as Code Terraform, Ansible, AWS Config, CI/CD & GitO…partial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · OpenResume · pyresparser

›Signal · DOCX
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectPDF onlypartialJordan Okafor PLATFORM
Emailjordan.okafor@example.comcorrectPDF onlycorrectjordan.okafor@example.com
Phone(555) 010-2233correctPDF onlypartial010-2233
LocationAustin, TXcorrectPDF onlyn/a
Role 1 titleSenior DevSecOps EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 1 companyNorthwind Cloud ServicescorrectPDF onlymissingAmazon
Role 1 dates2022-03 – presentcorrectPDF onlyn/a
Role 2 titleSite Reliability EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 2 companyBrightline HealthcorrectPDF onlymissingAmazon
Role 2 dates2019-06 – 2022-02correctPDF onlyn/a
Role 3 titleSystems EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 3 companyKeystone SystemscorrectPDF onlymissingAmazon
Role 3 dates2016-07 – 2019-05correctPDF onlyn/a
DegreeB.S. Computer EngineeringcorrectPDF onlymissing
SchoolUniversity of North TexascorrectPDF onlymissing
Graduation year2016correctPDF onlyn/a
Skills26 skillscorrect (26 of 26)PDF onlypartial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · pyresparser

›Classic · PDF
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectcorrectJordan OkaforcorrectJordan Okafor
Emailjordan.okafor@example.comcorrectcorrectjordan.okafor@example.comcorrectjordan.okafor@example.com
Phone(555) 010-2233correctcorrect(555) 010-2233partial010-2233
LocationAustin, TXcorrectcorrectAustin, TXn/a
Role 1 titleSenior DevSecOps EngineercorrectcorrectSenior DevSecOps EngineermissingSenior Platform Engineer | Platform engineer
Role 1 companyNorthwind Cloud ServicescorrectcorrectNorthwind Cloud Servicesmissing
Role 1 dates2022-03 – presentcorrectcorrectMAR 2022 – PRESENTn/a
Role 2 titleSite Reliability EngineercorrectcorrectSite Reliability EngineermissingSenior Platform Engineer | Platform engineer
Role 2 companyBrightline HealthcorrectcorrectBrightline Healthmissing
Role 2 dates2019-06 – 2022-02correctcorrectJUN 2019 – FEB 2022n/a
Role 3 titleSystems EngineercorrectmissingmissingSenior Platform Engineer | Platform engineer
Role 3 companyKeystone Systemscorrectmissingmissing
Role 3 dates2016-07 – 2019-05correctmissingn/a
DegreeB.S. Computer EngineeringcorrectcorrectB.S. Computer EngineeringcorrectB.S. Computer Engineering
SchoolUniversity of North TexascorrectcorrectUniversity of North Texasmissing
Graduation year2016correctcorrect2016n/a
Skills26 skillscorrect (26 of 26)correct (26 of 26)Cloud & Containers: AWS, Kubernetes, Amazon EKS, Docker, Helm, Karpenter, Infrastructure as Code: Terraform, Ansible, AWS Config, CI/CD & Gi…partial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · OpenResume · pyresparser

›Classic · DOCX
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectPDF onlypartialJordan Okafor PLATFORM
Emailjordan.okafor@example.comcorrectPDF onlycorrectjordan.okafor@example.com
Phone(555) 010-2233correctPDF onlypartial010-2233
LocationAustin, TXcorrectPDF onlyn/a
Role 1 titleSenior DevSecOps EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 1 companyNorthwind Cloud ServicescorrectPDF onlymissingAmazon
Role 1 dates2022-03 – presentcorrectPDF onlyn/a
Role 2 titleSite Reliability EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 2 companyBrightline HealthcorrectPDF onlymissingAmazon
Role 2 dates2019-06 – 2022-02correctPDF onlyn/a
Role 3 titleSystems EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 3 companyKeystone SystemscorrectPDF onlymissingAmazon
Role 3 dates2016-07 – 2019-05correctPDF onlyn/a
DegreeB.S. Computer EngineeringcorrectPDF onlymissing
SchoolUniversity of North TexascorrectPDF onlymissing
Graduation year2016correctPDF onlyn/a
Skills26 skillscorrect (26 of 26)PDF onlypartial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · pyresparser

›Modern · PDF
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectcorrectJordan OkaforcorrectJordan Okafor
Emailjordan.okafor@example.comcorrectcorrectjordan.okafor@example.comcorrectjordan.okafor@example.com
Phone(555) 010-2233correctcorrect(555) 010-2233partial010-2233
LocationAustin, TXcorrectcorrectAustin, TXn/a
Role 1 titleSenior DevSecOps EngineercorrectcorrectSenior DevSecOps EngineermissingSenior Platform Engineer | Platform engineer
Role 1 companyNorthwind Cloud ServicescorrectcorrectNorthwind Cloud Servicesmissing
Role 1 dates2022-03 – presentcorrectcorrectMAR 2022 – PRESENTn/a
Role 2 titleSite Reliability EngineercorrectcorrectSite Reliability EngineermissingSenior Platform Engineer | Platform engineer
Role 2 companyBrightline HealthcorrectcorrectBrightline Healthmissing
Role 2 dates2019-06 – 2022-02correctcorrectJUN 2019 – FEB 2022n/a
Role 3 titleSystems EngineercorrectmissingmissingSenior Platform Engineer | Platform engineer
Role 3 companyKeystone Systemscorrectmissingmissing
Role 3 dates2016-07 – 2019-05correctmissingn/a
DegreeB.S. Computer EngineeringcorrectcorrectB.S. Computer EngineeringcorrectB.S. Computer Engineering
SchoolUniversity of North TexascorrectcorrectUniversity of North Texasmissing
Graduation year2016correctcorrect2016n/a
Skills26 skillscorrect (26 of 26)correct (26 of 26)Cloud & Containers: AWS, Kubernetes, Amazon EKS, Docker, Helm, Karpenter, Infrastructure as Code: Terraform, Ansible, AWS Config, CI/CD & Gi…partial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · OpenResume · pyresparser

›Modern · DOCX
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectPDF onlypartialJordan Okafor PLATFORM
Emailjordan.okafor@example.comcorrectPDF onlycorrectjordan.okafor@example.com
Phone(555) 010-2233correctPDF onlypartial010-2233
LocationAustin, TXcorrectPDF onlyn/a
Role 1 titleSenior DevSecOps EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 1 companyNorthwind Cloud ServicescorrectPDF onlymissingAmazon
Role 1 dates2022-03 – presentcorrectPDF onlyn/a
Role 2 titleSite Reliability EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 2 companyBrightline HealthcorrectPDF onlymissingAmazon
Role 2 dates2019-06 – 2022-02correctPDF onlyn/a
Role 3 titleSystems EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 3 companyKeystone SystemscorrectPDF onlymissingAmazon
Role 3 dates2016-07 – 2019-05correctPDF onlyn/a
DegreeB.S. Computer EngineeringcorrectPDF onlymissing
SchoolUniversity of North TexascorrectPDF onlymissing
Graduation year2016correctPDF onlyn/a
Skills26 skillscorrect (26 of 26)PDF onlypartial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · pyresparser

›Compact · PDF
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectcorrectJordan OkaforcorrectJordan Okafor
Emailjordan.okafor@example.comcorrectcorrectjordan.okafor@example.comcorrectjordan.okafor@example.com
Phone(555) 010-2233correctcorrect(555) 010-2233partial010-2233
LocationAustin, TXcorrectcorrectAustin, TXn/a
Role 1 titleSenior DevSecOps EngineercorrectcorrectSenior DevSecOps EngineermissingSenior Platform Engineer | Platform engineer
Role 1 companyNorthwind Cloud ServicescorrectcorrectNorthwind Cloud Servicesmissing
Role 1 dates2022-03 – presentcorrectcorrectMAR 2022 – PRESENTn/a
Role 2 titleSite Reliability EngineercorrectcorrectSite Reliability EngineermissingSenior Platform Engineer | Platform engineer
Role 2 companyBrightline HealthcorrectcorrectBrightline Healthmissing
Role 2 dates2019-06 – 2022-02correctcorrectJUN 2019 – FEB 2022n/a
Role 3 titleSystems EngineercorrectcorrectSystems EngineermissingSenior Platform Engineer | Platform engineer
Role 3 companyKeystone SystemscorrectcorrectKeystone Systemsmissing
Role 3 dates2016-07 – 2019-05correctcorrectJUL 2016 – MAY 2019n/a
DegreeB.S. Computer EngineeringcorrectcorrectB.S. Computer EngineeringcorrectB.S. Computer Engineering
SchoolUniversity of North TexascorrectcorrectUniversity of North Texasmissing
Graduation year2016correctcorrect2016n/a
Skills26 skillscorrect (26 of 26)correct (26 of 26)Cloud & Containers: AWS, Kubernetes, Amazon EKS, Docker, Helm, Karpenter, Infrastructure as Code: Terraform, Ansible, AWS Config, CI/CD & Gi…partial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · OpenResume · pyresparser

›Compact · DOCX
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectPDF onlypartialJordan Okafor PLATFORM
Emailjordan.okafor@example.comcorrectPDF onlycorrectjordan.okafor@example.com
Phone(555) 010-2233correctPDF onlypartial010-2233
LocationAustin, TXcorrectPDF onlyn/a
Role 1 titleSenior DevSecOps EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 1 companyNorthwind Cloud ServicescorrectPDF onlymissingAmazon
Role 1 dates2022-03 – presentcorrectPDF onlyn/a
Role 2 titleSite Reliability EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 2 companyBrightline HealthcorrectPDF onlymissingAmazon
Role 2 dates2019-06 – 2022-02correctPDF onlyn/a
Role 3 titleSystems EngineercorrectPDF onlymissingSolutions Architect – Associate | DEVSECOPS
Role 3 companyKeystone SystemscorrectPDF onlymissingAmazon
Role 3 dates2016-07 – 2019-05correctPDF onlyn/a
DegreeB.S. Computer EngineeringcorrectPDF onlymissing
SchoolUniversity of North TexascorrectPDF onlymissing
Graduation year2016correctPDF onlyn/a
Skills26 skillscorrect (26 of 26)PDF onlypartial (5 of 26)Python, Ansible, Aws, Compliance, Health, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Technical, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · pyresparser

›Executive · PDF
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectcorrectJordan OkaforcorrectJordan Okafor
Emailjordan.okafor@example.comcorrectcorrectjordan.okafor@example.comcorrectjordan.okafor@example.com
Phone(555) 010-2233correctcorrect(555) 010-2233partial010-2233
LocationAustin, TXcorrectcorrectAustin, TXn/a
Role 1 titleSenior DevSecOps EngineercorrectcorrectSenior DevSecOps EngineercorrectSenior DevSecOps Engineer
Role 1 companyNorthwind Cloud ServicescorrectcorrectNorthwind Cloud ServicesmissingBrightline Health | Amazon
Role 1 dates2022-03 – presentcorrectcorrectMAR 2022 – PRESENTn/a
Role 2 titleSite Reliability EngineercorrectcorrectSite Reliability EngineercorrectSite Reliability Engineer
Role 2 companyBrightline HealthcorrectcorrectBrightline HealthcorrectBrightline Health
Role 2 dates2019-06 – 2022-02correctcorrectJUN 2019 – FEB 2022n/a
Role 3 titleSystems EngineercorrectcorrectSystems EngineercorrectSystems Engineer
Role 3 companyKeystone SystemscorrectcorrectKeystone SystemsmissingBrightline Health | Amazon
Role 3 dates2016-07 – 2019-05correctcorrectJUL 2016 – MAY 2019n/a
DegreeB.S. Computer EngineeringcorrectcorrectB.S. Computer EngineeringcorrectB.S. Computer Engineering
SchoolUniversity of North TexascorrectcorrectUniversity of North Texasmissing
Graduation year2016correctcorrect2016n/a
Skills26 skillscorrect (26 of 26)missing (0 of 26)partial (5 of 26)Python, Aws, Compliance, Health, Technical, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Ansible, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · OpenResume · pyresparser

›Executive · DOCX
FieldGround truthText extractionOpenResumepyresparser
NameJordan OkaforcorrectPDF onlypartialJordan Okafor PLATFORM
Emailjordan.okafor@example.comcorrectPDF onlycorrectjordan.okafor@example.com
Phone(555) 010-2233correctPDF onlypartial010-2233
LocationAustin, TXcorrectPDF onlyn/a
Role 1 titleSenior DevSecOps EngineercorrectPDF onlymissingSenior Platform Engineer | Solutions Architect – Associate
Role 1 companyNorthwind Cloud ServicescorrectPDF onlymissingAmazon
Role 1 dates2022-03 – presentcorrectPDF onlyn/a
Role 2 titleSite Reliability EngineercorrectPDF onlymissingSenior Platform Engineer | Solutions Architect – Associate
Role 2 companyBrightline HealthcorrectPDF onlymissingAmazon
Role 2 dates2019-06 – 2022-02correctPDF onlyn/a
Role 3 titleSystems EngineercorrectPDF onlymissingSenior Platform Engineer | Solutions Architect – Associate
Role 3 companyKeystone SystemscorrectPDF onlymissingAmazon
Role 3 dates2016-07 – 2019-05correctPDF onlyn/a
DegreeB.S. Computer EngineeringcorrectPDF onlymissing
SchoolUniversity of North TexascorrectPDF onlymissing
Graduation year2016correctPDF onlyn/a
Skills26 skillscorrect (26 of 26)PDF onlypartial (5 of 26)Python, Aws, Compliance, Health, Technical, Audit, Security, Engineering, Docker, Config, Cloud, Linux, Ansible, Github

Original file · its OpenResume output · Raw output of the fixed file: Text extraction · pyresparser

How we tested.So you can check it.

The resume. One fictional person, Jordan Okafor, with example.com and 555-01xx contact details: three roles, one degree, two certifications and eight skill lines. It is the same sample resume HireCurve's own tests use.

The files. Each of the five templates was exported through the same code that serves your downloads: PDF through Gotenberg 8.37.0 (headless Chromium, as in production) and DOCX from our Word generator. Signal also has a dark PDF, so it is tested too. That is 6 PDFs and 5 DOCX files.

Scoring. Both sides are normalized before comparing: case, whitespace and dash styles are ignored, phones are compared digit by digit, and dates are compared as month and year (“MAR 2022” = “March 2022”). A field is correct when the values match, partial when one contains the other or only one of two dates matches, wrong when a different value was extracted, and missing when nothing was. For text extraction, correct means the value appears in the text.

First run on the original templates 2026-09-27; second run on the fixed templates 2026-09-27. Everything ran locally with free, open-source tools; no paid parsing service, and no AI model, was used.

Parsers and versions

Apache Tika (plain text)
Apache Tika 3.2.3
Extracts the raw text of a PDF or DOCX. Field parsing starts from text like this, so it shows whether every value is readable at all and whether the roles come out in order.
OpenResume parser
commit 4f8255a, pdf.js 3.7.107
The open-source parser behind open-resume.com. Reads PDF only, groups lines into sections by their headings, then picks fields with scoring rules.
pyresparser
1.0.6 (spaCy 2.3.9, en_core_web_sm 2.3.1, pdfminer.six 20240706, docx2txt 0.8)
A widely copied Python parser built on spaCy and NLTK. Reads PDF and DOCX; returns name, email, phone, skills, degree and flat lists of titles and companies, not one record per role.

Ground truth

Name
Jordan Okafor
Email
jordan.okafor@example.com
Phone
(555) 010-2233
Location
Austin, TX
Role 1
Senior DevSecOps Engineer, Northwind Cloud Services2022-03 to present
Role 2
Site Reliability Engineer, Brightline Health2019-06 to 2022-02
Role 3
Systems Engineer, Keystone Systems2016-07 to 2019-05
Education
B.S. Computer Engineering, University of North Texas, 2016
Skills
AWS, Kubernetes, Amazon EKS, Docker, Helm, Karpenter, Terraform, Ansible, AWS Config, GitHub Actions, Argo CD, Jenkins, Prometheus, Grafana, SLOs, On-call, Trivy, Checkov, HashiCorp Vault, SOC 2, Python, Go, Bash, Linux, FinOps, Rightsizing

What's still weak.And why.

  • OpenResume loses whatever starts page two. It joins the last line of page one to the first line of page two with no break between them. Where a role or a heading lands at the top of page two, that role (Classic, Modern, Signal dark) or that section (Executive's skills) is lost. One-page resumes don't hit this: Compact, the densest template, gets 17 of 17.
  • pyresparser is unreliable either way. It reads the name with the first word of the tagline attached in every DOCX (partial), misreads the name in Signal's PDFs, only ever finds “010-2233” of the phone number, never finds the school, and matches 5 of 26 skills because it only knows its own skill list.
  • Signal's DOCX has no section numbers. Word files have no ATS-safe way to draw them, so they are left out; the PDF keeps them as graphics.

What this doesn't show.Read before quoting it.

  • These are not the systems employers use. Workday, Greenhouse, Lever, iCIMS, Taleo and the rest run their own proprietary parsers. We can't test those for free, and we won't guess how they behave. Treat these results as a sign of how a file holds up in general, not as a prediction for any one employer.
  • Open-source parsers are simpler. OpenResume states it only handles single-column English resumes; pyresparser was last released in 2019 and relies on a small spaCy model. Commercial parsers are usually more forgiving, but not always.
  • One resume. A different person's history (more roles, a second degree, no dates) could parse better or worse.
  • Parsing is not ranking. Even a perfect parse says nothing about how a recruiter or a search filter scores the content. That is what keyword coverage is for.

Check it yourself.Files, raw output and the script.

The download has every exported file from the fixed templates, each parser's raw output, the ground truth, the results and the scripts we ran. The original files and their raw output stay available under /ats-test/before/. The parsers need Docker, Node and Python 3.9, all free. Re-exporting the files needs the HireCurve source, but the parse and score steps work on the files as downloaded.

Download the test kit (.zip)

Your next application,written from your real work.

Two applications a month are free, each with a cover letter and interview prep. Bring the resume you have; leave with one built for the job.

Start free