Home About Pricing Blog Services Revenue Roadmap AI automations Marketing systems Operations systems Use cases All use cases Book a call Contact

CV parsing is mostly solved, and it is still the wrong place to start

Roni Yrjölä, founder of Regna OperationsRoni Yrjölä Nov 3, 2026 · 8 min read
person holding pencil near laptop computer

That record then gets written into an ATS or a spreadsheet so a recruiter can search "5 years Salesforce admin" instead of opening 200 individual files.

CV parsing is the process of turning a resume into structured fields, name, employer, dates, title, skills, that an applicant tracking system can search and filter on. For clean, digital documents, current language models do this reliably. That is not the argument here. The argument is that buying a more accurate parser rarely moves the number that actually matters, which is how long it takes your team to decide who gets a call back.

What CV parsing actually does

CV parsing takes an unstructured document, a PDF, a Word file, sometimes a photo of a printed page, and extracts a fixed set of fields into a record: candidate name, contact details, employer names, job titles, start and end dates, degrees, certifications, and a list of skills pulled from the text. That record then gets written into an ATS or a spreadsheet so a recruiter can search "5 years Salesforce admin" instead of opening 200 individual files.

Resume parsing is not analysis. It does not decide if the candidate is good. It decides where each piece of text belongs. Every downstream filter, keyword search, years-of-experience cutoff, title match, depends on those structured fields being correct. If the parser drops a job title or merges two employers into one field, the search that runs on top of it fails quietly, and nobody notices until a good candidate never surfaces.

Where CV parsing still breaks

CV parser accuracy is not uniform. It is high on single column, plain text resumes exported from Word or Google Docs, and it drops fast on anything designed to look good rather than read cleanly. The specific failure modes are worth naming because you can check for them yourself:

  • Multi column layouts. A resume with a sidebar for skills and a main column for experience often gets read left to right across both columns, so a skill listed at the top of the sidebar ends up glued to a job title from the main column.
  • Tables. Resumes built in a table, common in the finance and consulting templates people download from LinkedIn, frequently collapse into a single unstructured text blob because the parser cannot infer row and column boundaries reliably.
  • Dates in six formats. "Jan 2020 to Present," "01/2020 to current," "2020-2023," "Jan '20 to Mar '23," each needs separate handling, and inconsistent formats inside the same document are common enough that date parsing failures are one of the most frequent support tickets ATS vendors get.
  • Non-Latin names. Names with diacritics, or names that don't follow a Western first-name-last-name order, get misfiled into the wrong fields more often than the vendors admit.
  • Scanned images with no text layer. A PDF that is actually a photograph or scan of a printed resume has no extractable text at all. Without OCR run first, the parser has nothing to read, and a resume that looks fine to a human returns an empty record.

Any of these will silently corrupt a record without throwing an error. That is the part worth checking before you trust a parsing tool: pull ten resumes from your own pipeline, run them through, and open the output fields directly instead of trusting a dashboard that says "processed successfully."

What language models actually fixed

The old generation of resume parsing ran on regex and rule libraries: pattern match for "20XX," look for capitalized words near "University," guess at a job title from a list of known titles. This broke constantly because resumes don't follow a fixed grammar. A rules engine tuned for American resumes choked on European CVs with different date conventions and section headers in different languages.

LLM based extraction works differently. Instead of matching patterns, the model reads the document the way a person does, weighing where a phrase sits on the page against the words around it to decide whether it's a job title or a skill. That is a genuine shift, and it is fair to say plainly: for well formed digital documents, extraction accuracy is no longer the hard part. A model reading a clean single or double column resume will correctly identify names, dates, and employers close to the accuracy of a careful human, and it will do it in under a second per document instead of the three to five minutes a recruiter spends skimming one manually.

That is real progress in resume parsing. It is also progress on a problem that was never the one costing your team the most time.

Why parsing was never the bottleneck

Reading a resume is fast. A recruiter who does this daily can skim a CV and get a rough sense of fit in under a minute, often in twenty or thirty seconds if the format is familiar. Skimming is not the expensive step. Deciding what to do with what they just read is.

A hiring manager doesn't track how fast the fields got extracted. The clock that matters is time to first screen call and time to reject. Both of those depend on a decision getting made, and decisions get made by people, not extraction engines. A perfectly parsed record with 100 percent accurate fields still needs someone to look at it and decide: advance, hold, or reject. Parsing removes the typing. It does not remove the judgment call, and the judgment call is where the hours go.

This is the same pattern we see across most operations work, not just hiring. The reading and copying part gets automated first because it's mechanical. The deciding part gets left for later because it's harder to specify, and it stays a bottleneck long after the mechanical part is solved.

The judgment a parsed record still needs

Take employment gaps, the clearest example. A parser can correctly extract that someone worked at Company A from 2019 to 2021 and Company B from 2023 to present. What it cannot do is tell you whether the 2021-2023 gap matters. Was it a layoff during a bad quarter for that industry, a return to school, a caregiving period, a sabbatical, or a pattern of short tenures that's a real signal? The fields are accurate. The interpretation is not in the fields.

The same is true for title inflation, career changes that look like unrelated experience on paper but aren't, or a candidate whose strongest work isn't captured in job titles at all because they worked inside a small team without formal promotions. CV parser accuracy caps out at correctly representing what's on the page. It has no opinion on what the gap, the title, or the missing detail means for this specific role, and it shouldn't, because that's a call your hiring team is better positioned to make than a generic extraction model.

Resume screening software that stops at parsing hands you a clean spreadsheet and calls it done. The screening decision still has to happen after that, one candidate at a time, exactly as before.

What actually saves screening time

The mechanism that actually reduces hours is scoring and routing, not parsing. Once a record is structured, you can score it against criteria the hiring team defined in advance, minimum years in a specific function, required certification, salary band fit, location or remote eligibility, and then route the result three ways: clear reject, clear advance, or ambiguous middle. Only the ambiguous middle needs a human to open the file.

If a role gets 150 applicants and your criteria can confidently sort 60 percent of them into a clear yes or clear no, that's 90 resumes a recruiter never has to read individually, only spot check. The recruiter's actual hours go into the 60 that are genuinely borderline, which is where judgment adds value instead of getting burned on decisions a rule could have made. This is the same routing logic we build for inbound triage, where routing keeps the human queue down to the cases that actually need a person instead of just making the reading faster.

The work most teams skip

This only works if the criteria exist and are agreed before the parser ever runs. "Minimum three years in a similar role" sounds simple until the hiring manager, the recruiter, and the department head each have a different idea of what "similar" means, and that disagreement has to get resolved in a room, not inferred by a model reading resumes.

Most teams skip this step and buy a parsing or screening tool instead, because writing down criteria and forcing three stakeholders to agree on trade-offs is slower and more uncomfortable than a software purchase. A tool ships in a day. A criteria conversation can take two meetings and still end without full agreement. But skipping it means the tool has nothing solid to score against, so it either scores loosely, which defeats the point, or scores against someone's unstated assumptions, which nobody can audit later when a good candidate gets filtered out and nobody knows why.

When a better parser is not the move

If your current ATS already extracts fields correctly, and for most digital, well formatted resumes it likely does, a more accurate parser will not measurably move your time to screen. Chasing a marginal accuracy gain in resume parsing, going from say a parser that mishandles 8 percent of documents to one that mishandles 3 percent, sounds like progress but touches a small fraction of your pipeline and none of the decision step. That is real money and real implementation time better spent defining criteria and building routing.

The honest answer for a lot of teams evaluating resume screening software right now is: don't buy a new parser. Spend a week getting the hiring team to agree on what "clear reject" and "clear advance" mean in writing, then figure out what routing clear cases away from a queue actually looks like on top of the record you already have.

Where this fits if you are automating the process

The same split shows up in most of the automation work we build in sales and marketing operations. Parsing, extraction, and data cleanup are the easy 20 percent of any build. Getting a team to agree on what counts as a clear yes or a clear no is the part that actually removes hours, and it's usually the part nobody scopes first.

That is exactly what a Revenue Roadmap is for: two weeks to score every use case on value against effort and put a fixed price on the ones worth building, before a single tool gets purchased. Check the admin cost calculator for a rough read on how many hours that is worth, or browse the full use case list for adjacent examples like order status questions or weekly reporting.

Let's work out what is worth building.

Tell us how your team works today. We'll tell you what's worth automating, and what isn't.

€1,997

Start with the Revenue Roadmap. Money back if it does not find at least €1,997 worth of work to automate.