Messy CV benchmark: Formzed vs OpenCATS

    Real CVs are messy. Skills hide under other names, get misspelt, sit in a row of logo badges or on a scanned page, and the word a filter looks for sometimes means something else. We wrote 400 such CVs, froze an answer key, and searched them for four jobs. Formzed's AI CV matching found 127 of the 141 qualified people with 2 wrong picks. Keyword search in OpenCATS, a long-running open-source applicant tracking system, found 67, and picked 28 people who weren't qualified.

    Every CV, person, employer and contact detail is made up. Both tools ran once on the same 400 PDFs and the same four job descriptions, in November 2026. Formzed's AI cost is shown in US dollars at the model's list price.

    Qualified people found

    90%(127 of 141)

    Formzed. OpenCATS: 48% with recruiter terms, 43% with the job ad's own words

    Wrong picks

    2of 129 picked

    Formzed. OpenCATS picked 28 wrong people with recruiter terms

    Qualified in each top 10

    39of 40

    Four jobs, ten places each. OpenCATS: 28 of 40

    AI cost of the whole test

    $1.30

    Reading all 400 CVs ($0.27) and matching them to four jobs ($1.03)

    The CVs, the jobs and the answer key

    We generated 400 full-length CVs in one ordinary layout: a summary, education, three or four jobs with dates and bullet points, projects, a technical skills block, certificates, hobbies and a referee. 300 run to two pages. 68 were written near each of four jobs, and 128 belong to people in other work (nurses, teachers, accountants, sales), so the pile looks like a real inbox.

    The 400 CVs, by the job each was written near

    Backend (68)Data (68)HR (68)Warehouse (68)Other jobs (nurses, teachers, sales…) (128)

    The 68 CVs written near each job

    Backend Engineer68 CVs
    Data Engineer68 CVs
    HR Generalist68 CVs
    Warehouse Supervisor68 CVs
    QualifiedA must-have missingMissing, but a trap word on the CVToo few yearsCan't start within two months

    Near misses are deliberate: someone one must-have short, with a word on the CV that looks like the missing skill, with too few years, or (backend and warehouse) unable to start in time.

    Each skill a person really has is written one way, chosen at random: in the job ad's own words, under another name, misspelt, only inside a sentence, as a picture of skill badges (64 CVs) or on a scanned page with no text in the PDF at all (36 CVs). 62 CVs carry a trap: a word that looks like a skill the person doesn't have.

    How a skill can be written

    Written asExamples from the CVs
    Written plainlyPostgreSQL · Forklift licence · BambooHR
    Other namePlanetScale for MySQL · BY WMS for Blue Yonder · PIT licence for forklift · Welcome days for new staff for onboarding
    MisspeltGolnag · Snoflake · Workdy · SAP EWW · Forkliftt licence
    Inside a sentence“Scheduled and monitored pipelines with Airflow.”
    Skill badge (picture)The skills block drawn as a row of badges, with no text behind it
    Scanned pageThe whole CV is a photo of a printed page
    Trap (must not count)“Took the team go-karting after peak season.” · “Grew up near Manhattan, Kansas.” · “Learning dbt next quarter is on my development plan.”

    The four jobs have full job descriptions, word for word below, and each has three must-haves: a minimum number of years, worked out from the CV's own dates, and two skills or kinds of experience. Two of them also need the person to start within two months, which the application form asks. Who is qualified came from the generator's own record of each person, not from reading the CVs, and the key was frozen and hashed (bc13a99f…) before either tool saw a CV.

    JobMust haveQualified
    Backend Engineer3+ years · PostgreSQL or MySQL · One of Go, Java, Python, Node.js, C#40
    Data Engineer2+ years · Python or Scala · One of Spark, Airflow, dbt, Kafka, Snowflake43
    HR Generalist2+ years · Recruitment or onboarding · An HRIS: BambooHR, Workday, SAP SuccessFactors or HiBob39
    Warehouse Supervisor2+ years · Forklift / MHE licence · A WMS: SAP EWM, Manhattan, Oracle WMS or Blue Yonder19
    The four job descriptions, as both tools got them
    Backend Engineer at Lumora (fictional company)
    
    About the role
    Lumora runs a booking platform used by 2,000 clinics. You'll join a team of six engineers who build and run the APIs and services behind it. The role is fully remote.
    
    What you'll do
    - Design, build and run the services behind our public and internal APIs.
    - Own your services in production: monitoring, on-call (one week in six) and fixing what breaks.
    - Review code and design docs with the rest of the team.
    - Work with product managers to break large features into small releases.
    
    Must have
    - 3+ years of professional software engineering experience
    - PostgreSQL or MySQL
    - Experience with one of: Go, Java, Python, Node.js or C#
    
    Nice to have
    - Docker
    - Cloud experience (AWS or GCP)
    
    Start date: you can start within 2 months.
    Location: remote.
    Data Engineer at Fieldline (fictional company)
    
    About the role
    Fieldline sells farm equipment across Europe. Our data team of four builds the pipelines that feed finance, sales and service reporting. The role is remote, with any start date.
    
    What you'll do
    - Build and maintain batch and streaming pipelines from our ERP, CRM and telematics systems.
    - Model data in the warehouse so analysts can trust the numbers.
    - Add tests and alerts so broken data is caught before it reaches a dashboard.
    - Work with analysts on what each new source should look like.
    
    Must have
    - 2+ years of professional data engineering experience
    - Python or Scala
    - One of: Spark, Airflow, dbt, Kafka or Snowflake
    
    Nice to have
    - SQL
    - Data quality checks
    
    Start date: any.
    Location: remote.
    HR Generalist at Brightwater Housing (fictional organisation)
    
    About the role
    Brightwater is a housing association with 450 staff across 12 sites. You'll join a people team of five and look after the day-to-day people processes for two regions. Any start date.
    
    What you'll do
    - Advise line managers on policy, absence and employee relations.
    - Run hiring and new-starter processes for your regions.
    - Keep employee records and our HR system accurate.
    - Support projects such as policy reviews and engagement surveys.
    
    Must have
    - 2+ years of experience working in HR
    - Recruitment or onboarding experience
    - Experience with an HRIS: BambooHR, Workday, SAP SuccessFactors or HiBob
    
    Nice to have
    - CIPD qualification
    - Employee relations casework
    
    Start date: any.
    Warehouse Operations Supervisor at Kestrel Logistics (fictional company)
    
    About the role
    Kestrel runs a 220,000 sq ft distribution centre for grocery and household brands. You'll supervise one of three shifts, with around 40 operatives.
    
    What you'll do
    - Plan and run your shift: labour, picking, loading and dispatch to cut-off times.
    - Keep the site safe: briefings, checks, near-miss reporting.
    - Coach team leaders and operatives and handle day-to-day people issues.
    - Report shift performance and fix stock and system errors with the WMS team.
    
    Must have
    - 2+ years supervising warehouse or logistics staff
    - A forklift / MHE licence
    - Experience with a WMS: SAP EWM, Manhattan, Oracle WMS or Blue Yonder
    
    Nice to have
    - IOSH or similar health and safety training
    - Peak planning
    
    Start date: you can start within 2 months.

    What OpenCATS is

    OpenCATS is a free, open-source, web-based applicant tracking system written in PHP on a MySQL database. It began as CATS, built by Cognizo Technologies around 2005 to 2007; that project later split into the open-source OpenCATS and a separate commercial product. Its public code repository dates from 2009, which makes it one of the longest-running open-source applicant tracking systems. It is still maintained: version 0.12.0 came out on 22 October 2026, and it's the version we ran.

    It does what recruiters expect of an applicant tracking system: job orders with a pipeline of candidates for each, candidate records with their resumes and contact history, companies and their contacts, career portal pages, lists, a calendar, email and reports. To find people by their resumes it pulls the text out of each uploaded file, stores it, and returns every resume that contains the words searched for. Results come back in a fixed order (by last name), not ranked by how well someone fits. Its documentation says resume search has been unreliable in some versions and is being restored, so we didn't rely on the search page: we called the search code in the current release directly.

    That makes it a fair stand-in for the keyword filter inside many applicant tracking systems: exact words in, a list out. We installed it locally and used its own code to pull the text out of each PDF and to build each resume-search query, run on its own database. Its combined AND/OR queries didn't work, so we ran one search per keyword and combined the lists in code, exactly as the query meant.

    Sources: the OpenCATS repository and its releases, the OpenCATS documentation, and the CATS 0.8.0 quick guide (© 2005–2007 Cognizo Technologies). OpenCATS code is under the Mozilla Public License 2.0.

    How each tool searched

    OpenCATS

    Each job's must-haves became keyword groups: at least one word from every group had to be on the CV. We searched twice. Once with the job ad's own words ("strict terms"), and once with the other names a recruiter would add, such as Postgres, Golang, PySpark, talent acquisition, FLT and JDA ("recruiter terms"). OpenCATS can't read years from dates, so the start-date answer was the only filter applied afterwards, by hand. Its top 10 is the first ten names in its list.

    Formzed

    The same 400 PDFs were sent to a Formzed job application form as uploads. Formzed read every CV, including the pictures and the scanned pages, and we pasted each full job description into its AI CV matching with "Find the 10 best candidates for this job". It worked out the must-haves itself and judged every candidate against them. A pick is anyone it judged to meet every must-have, and its top 10 is its own ranking.

    What each found

    Across the four jobs Formzed found 127 of 141 qualified people (90%). OpenCATS found 67 with recruiter terms and 60 with strict terms. The gap is widest where keywords can't see: on the warehouse job, where most qualified people had a licence or system in badges, under another name or misspelt, OpenCATS found 5 of 19.

    Qualified people found, by job

    FormzedOpenCATS, recruiter termsOpenCATS, strict terms
    Backend Engineer40 qualified
    38 of 4022 of 4019 of 40
    Data Engineer43 qualified
    41 of 4323 of 4323 of 43
    HR Generalist39 qualified
    32 of 3917 of 3913 of 39
    Warehouse Supervisor19 qualified
    16 of 195 of 195 of 19

    Everyone each tool picked

    QualifiedNot qualifiedEveryone qualified
    04080120160141 qualified
    Formzed
    127+2 wrong
    OpenCATS, recruiter terms
    67+28 wrong
    OpenCATS, strict terms
    60+27 wrong

    Found against right, per job

    FormzedOpenCATS, recruiter termsOpenCATS, strict terms
    0%25%50%75%100%0%25%50%75%100%Qualified people found (recall)Picks that were right (precision)

    Top right is best: most qualified people found, and few wrong ones among the picks. The shaded corner is 80% or more of both.

    The top 10

    A recruiter mostly reads the top of the list. Formzed put a qualified person in 39 of the 40 top-10 places. OpenCATS doesn't rank, so its first ten are simply the first ten names alphabetically among its matches: 28 of 40 were qualified with recruiter terms and 26 with strict terms.

    Qualified people in each top 10

    Backend Engineer
    Formzed10
    OpenCATS, recruiter terms9
    OpenCATS, strict terms8
    Data Engineer
    Formzed10
    OpenCATS, recruiter terms7
    OpenCATS, strict terms7
    HR Generalist
    Formzed10
    OpenCATS, recruiter terms7
    OpenCATS, strict terms6
    Warehouse Supervisor
    Formzed9
    OpenCATS, recruiter terms5
    OpenCATS, strict terms5

    Filled dots count the qualified people among the first ten listed; they don't show the order.

    Where keywords go blind

    Split by how the skill was written, the two tools are level when it's spelt out plainly or sits inside a sentence. Keyword search can't see skills in pictures or on scanned pages, and it misses misspellings. For the 72 qualified people whose skills were on a scanned page, in badges or misspelt, Formzed found 64 and OpenCATS 7.

    Qualified people found, by how their skills were written

    FormzedOpenCATS, recruiter terms
    Scanned page
    8 of 100 of 10
    Skill badge (picture)
    37 of 405 of 40
    Misspelt
    19 of 222 of 22
    Other name
    40 of 4536 of 45
    Inside a sentence
    12 of 1212 of 12
    Written plainly
    11 of 1212 of 12

    A person counts under the hardest way any of their must-haves was written, from scanned page down to written plainly. For OpenCATS this counts the people its keyword search returned, before the start-date filter.

    Wrong picks

    A keyword can't tell a skill from a word that only looks like one. OpenCATS with recruiter terms picked 16 people for a trap word on their CV and 12 with too few years, which it has no way to read from dates. Formzed picked 2 wrong people, both for a trap word.

    Why the wrong picks were wrong

    FormzedOpenCATS, recruiter terms
    A trap word on the CV
    216
    Too few years
    012

    Formzed's two wrong picks

    JobThe line on the CVCounted as
    Data EngineerOrganised the Snowflake winter fun run.Snowflake
    Warehouse SupervisorHeard Blue Yonder mentioned on a podcast.Blue Yonder

    The AI judging the requirement said no both times. The step that reads each CV first had listed the word among the person's skills, and that list was trusted over the judgement. That step has been fixed since this test (a reading's list now counts only skills the CV itself lists), but the fix hasn't been measured on a new set of CVs yet.

    What Formzed missed

    Formzed missed 14 qualified people. Most were judgement calls on wording a recruiter would accept: duties described in other words, earlier jobs whose duties counted toward the years, and a hosted edition of a database. Formzed's matching has been changed since to catch each of these, but the changes haven't been measured on a new set of CVs yet, so the numbers here are the test as it ran.

    The 14 misses, by cause

    What it cost

    Formzed's AI cost for the whole test was $1.30: $0.27 to read all 400 CVs once, scans and badges included, and $1.03 to match them to the four jobs. That's under a cent per CV for all four jobs together. A CV is read once, so matching the same pile to another job costs only the matching.

    Where the $1.30 went

    Reading: profiles$0.21
    Reading: scans and pictures$0.06
    Matching: Backend Engineer$0.13
    Matching: Data Engineer$0.30
    Matching: HR Generalist$0.32
    Matching: Warehouse Supervisor$0.29

    Per-job matching costs are rounded to the cent, so they add up to a cent more than the total.

    Each job

    JobMatching costPer CV
    Backend Engineer$0.13$0.0003
    Data Engineer$0.30$0.0008
    HR Generalist$0.32$0.0008
    Warehouse Supervisor$0.29$0.0007

    OpenCATS is free to run on your own server, and its search uses no AI.

    Every number

    JobToolFoundPickedWrongTop 10
    Backend EngineerFormzed38 of 4038010 of 10
    Backend EngineerOpenCATS, recruiter terms22 of 402649 of 10
    Backend EngineerOpenCATS, strict terms19 of 402348 of 10
    Data EngineerFormzed41 of 4342110 of 10
    Data EngineerOpenCATS, recruiter terms23 of 4333107 of 10
    Data EngineerOpenCATS, strict terms23 of 4333107 of 10
    HR GeneralistFormzed32 of 3932010 of 10
    HR GeneralistOpenCATS, recruiter terms17 of 3927107 of 10
    HR GeneralistOpenCATS, strict terms13 of 392296 of 10
    Warehouse SupervisorFormzed16 of 191719 of 10
    Warehouse SupervisorOpenCATS, recruiter terms5 of 19945 of 10
    Warehouse SupervisorOpenCATS, strict terms5 of 19945 of 10

    The dataset

    Everything is free to download and re-run against any CV screening tool: the 400 CVs as PDFs, the four job descriptions, the frozen answer key with how each skill was written and every trap, the OpenCATS search terms and both tools' scored results. It's under CC BY 4.0.