We Ran Our 29 CV Templates Through Our Extraction Gate: Here Is the Exact Text the Robot Sees

Updated 22 August 2026 · 16 min read

We rendered all 29 of our CV templates to real PDFs, extracted their text the way an ATS parser does, and compared it token by token to the source CV. Every template preserved reading order; token coverage measured 98.24 to 98.94 percent, and the only losses were URL fragments.

Every CV builder on the internet calls its templates 'ATS-friendly'. Almost none of them tells you what that claim means, how it was tested, or what the test found. We think that's backwards. If the claim is about what a machine reads, the machine's reading is measurable, so measure it and publish the numbers.

This is that publication. We took all 29 templates in our catalogue, rendered the same sample CV through each one with our real production PDF pipeline, extracted the text layer from each PDF using the same class of tooling ATS parsers rely on, and compared the extraction, token by token, against the CV's source content. The comparison runs as an automated gate in our codebase: any template that fails it cannot ship with an ATS-Verified badge, and the artefacts (the actual PDFs) are kept for inspection.

Below: the full methodology, the per-template results from the latest run (2026-08-22), an honest accounting of the tokens that did NOT survive extraction and why, and the reason four of our templates deliberately carry a 'Best for human review' label instead of the badge.

Why 'the exact text the robot sees' is the right test

An applicant tracking system doesn't look at your CV; it extracts the text layer from your file and parses that. Everything a recruiter later searches or skims inside the ATS derives from that extraction, and the pipeline is close to unavoidable at scale: Harvard Business School's Hidden Workers: Untapped Talent study reports that 99% of Fortune 500 companies use an ATS. So the honest question about any template is not 'does it look clean?' but 'when this layout becomes a PDF, does the extracted text contain everything, in order, with the words intact?'

That framing gives you a test with three measurable properties:

  • Completeness. Every word of the source CV should be recoverable from the PDF's text layer. Measured as token coverage: the share of expected tokens found in the extraction.
  • Order. The name, summary, and section headings should appear in the extraction in the template's declared reading order. A layout that visually reads fine but extracts scrambled has failed its user silently.
  • Integrity. Words should come out as words. Some typographic choices (notably aggressive letter-spacing) fragment extraction so 'SUMMARY' becomes six separate letters. We measured that failure starting at 0.11em of letter-spacing, so every template in the catalogue is capped at 0.04em.

Methodology: reproducible from our codebase

The test is a script in our repository (scripts/check-template-parity.ts), not a marketing exercise, and it runs against the real production rendering pipeline rather than a simulation of it. For each of the 29 templates in the registry:

  1. The same fixed sample CV is rendered through the template by our production print route, served by the same Next.js build users get, and converted to PDF by the same Chromium-based engine that produces every customer download
  2. The text layer is extracted from the resulting PDF with unpdf, an extraction library built on the pdf.js engine, the same extraction approach ATS parsers depend on
  3. The extraction is compared to the canonical text of the source CV (the resumeToText serialisation), token by token: text is Unicode-normalised (NFKC, which also folds PDF ligatures like fi back into letters), lowercased, and split on non-alphanumeric characters
  4. Coverage is computed as a multiset: every occurrence of every expected token must be found, so a word appearing three times in the source must appear three times in the extraction to count fully
  5. Reading order is verified separately: the name, the summary heading, and every content-bearing section title must appear in the extraction in the template's declared reading sequence
  6. The gate passes a template only if coverage exceeds 95 percent AND order is intact. Any failure fails the entire run, and the rendered PDFs are saved as artefacts for manual inspection

The sample CV

The fixture is a deliberately complete two-page CV (a senior product manager with 8+ years of experience) that exercises every section type our builder supports: experience with a current role, education, skills groups with and without titles, certifications, projects with URLs, languages, and a custom section, plus bold mini-markdown inside bullets and optional dates left empty. Serialised for comparison, it yields 284 expected tokens. Using one fixed fixture is what makes runs comparable across template changes: same input, same tokeniser, same threshold, every time.

What this test does not claim

This is an extraction-fidelity study, not a placement guarantee. We are not claiming any specific commercial ATS was benchmarked, and we are not claiming a 98 percent extraction means a 98 percent chance of an interview; no honest tool can connect those numbers. What we claim is narrower and checkable: the text layer of the PDFs our templates produce contains the CV's content, whole and in order, as measured by the exact procedure above, which anyone with our codebase can re-run with one command.

Results: every template, every number

Latest measured run: 2026-08-22, all 29 templates, two-page render of the sample CV in every case. Reading order was preserved in 29 of 29 templates. Token coverage by template:

TemplateFamilyBadgeToken coverageOrder preserved
MetroModernATS-Verified98.94%Yes
SlateModernATS-Verified98.94%Yes
SignalModernATS-Verified98.94%Yes
NovaModernATS-Verified98.94%Yes
AsterModernATS-Verified98.94%Yes
VerveModernATS-Verified98.94%Yes
AxisModernATS-Verified98.94%Yes
OnyxModernATS-Verified98.94%Yes
CobaltModernATS-Verified98.94%Yes
CrestModernATS-Verified98.94%Yes
SummitModernATS-Verified98.94%Yes
BaselModernATS-Verified98.94%Yes
HarlanHeritageATS-Verified98.94%Yes
MadisonHeritageATS-Verified98.94%Yes
ClarendonHeritageATS-Verified98.94%Yes
BeaconHeritageATS-Verified98.94%Yes
TenureHeritageATS-Verified98.94%Yes
RegentHeritageATS-Verified98.94%Yes
SterlingHeritageATS-Verified98.94%Yes
KernelCompactATS-Verified98.94%Yes
VectorCompactATS-Verified98.24%Yes
StackerCompactATS-Verified98.94%Yes
LedgerCompactATS-Verified98.94%Yes
PrimerCompactATS-Verified98.24%Yes
MonoCompactATS-Verified98.24%Yes
StudioStatementBest for human review98.94%Yes
PanoramaStatementBest for human review98.94%Yes
DuetStatementBest for human review98.94%Yes
AtlasStatementBest for human review98.94%Yes

Reading the spread: 98.24 to 98.94 percent

Twenty-six of the 29 templates measured 98.94 percent coverage; the three densest compact templates (Vector, Primer, Mono) measured 98.24 percent. Against 284 expected tokens, 98.94 percent means exactly 3 token occurrences were not found, and 98.24 percent means 5.

Every one of those missing tokens is a URL fragment, and this is worth dwelling on because it's the honest asterisk on the whole study. The sample CV contains three full links (a LinkedIn profile, a portfolio site, and a GitHub project URL). Our canonical CV text includes each URL's scheme, so the token 'https' is expected three times, but the rendered templates display links as clean labels and addresses without repeating the scheme three times over. That accounts for the 3 tokens missing everywhere. In the three densest compact layouts, the long GitHub project URL additionally wraps across a line break in a way that splits two of its path tokens ('github', 'openmetrics') during extraction. No token of actual CV prose (a job title, an employer, a skill, a date, a bullet) was lost in any of the 29 templates.

Why we publish the asterisk instead of rounding it away

We could tokenise URLs out of the comparison and report 100 percent across the board. We don't, for two reasons. First, the gate is a safety net, and safety nets should over-count problems rather than under-count them; treating URL fragments as misses means a future regression that eats real content cannot hide behind a lenient tokeniser. Second, the residual is honest guidance for you: if a link must survive parsing verbatim (say, a portfolio URL a recruiter will copy), the plain-text spelling of that URL matters more than any layout choice. The extraction keeps the address text itself; what varies is scheme prefixes and line-wrap splits on very long URLs.

What the gate caught while we built the catalogue

A gate is only interesting if it has teeth, so here's what failed on the way to these numbers. The most instructive finding was typographic: classic serif templates traditionally use wide letter-spacing on uppercase names and section titles, and we found that PDF text extraction starts splitting such text into single-letter fragments at 0.11em of tracking. The failure is binary and sharp: below the threshold words extract whole, above it 'SUMMARY' extracts as separate letters that match no search. Every template in the catalogue now clamps letter-spacing to at most 0.04em, and our Heritage family gets its traditional look from case, rules, and type choice instead of tracking.

That finding generalises beyond our templates, and it's a thing almost no 'ATS-friendly' checklist mentions: if your current CV uses stylised spacing on headings, its extraction may be shattered in exactly this way regardless of how conservative the layout looks. It's also invisible to the eye, which is precisely why we show the extraction: the checker computes what share of your file's words read back as whole words, and puts the raw text in front of you.

The gate also enforces reading order per template, which constrains design in useful ways. Banner headers (Nova, Onyx), education-first orderings for students (Beacon, Primer), and monospace styling (Mono) all had to prove their extraction sequence before shipping. The rule is simple: a layout idea that can't keep name, summary, and section titles in declared order in the extracted stream doesn't ship with the badge, however good it looks.

The four templates we refuse to badge, honestly

Our four Statement-family templates (Studio, Panorama, Duet, Atlas) are two-column layouts, and in this very study they measured 98.94 percent token coverage with clean reading order. So why do they carry a 'Best for human review' label instead of ATS-Verified?

Because the test we can run on them is structurally weaker, and badge integrity matters more than badge count. For a single-column template, the gate verifies one property with real force: the entire CV is a single text flow, so there is exactly one reading order for any parser to find. For a two-column template, no such single sequence exists. Our gate verifies each column's internal order independently (header and main column; sidebar), and on multi-page renders pagination legitimately interleaves the two columns page by page. Different ATS parsers walk multi-column pages differently, and none of them publish how. We can prove our two-column extraction is internally coherent; we cannot promise every parser will reassemble the two lanes the way a human eye does. So the label says what we know: strongest when a person reads first.

When should you use them anyway? Referrals, careers fairs, printed copies, portfolio-driven hiring: contexts where a human is the first reader and the visual lane for skills and credentials earns its keep. The Statement family page covers the trade-off, and every export falls back to a clean single column in DOCX and TXT so you're never locked into the two-column gamble for a portal submission.

Limitations: what this study cannot tell you

A study is only as trustworthy as its stated limits, so here are ours, unprompted.

One extraction engine. We extract with unpdf, one open-source implementation of PDF text extraction. Commercial ATS parsers use their own engines, and engines can disagree on tricky files. Our defence is that the templates are engineered to have no tricky parts: single text flows, real fonts, clamped spacing. The plainer the input, the less room engines have to disagree, and making the input plain is precisely what the gate enforces. Still, 'extracts perfectly in one engine' is evidence, not proof, for every engine.

One fixture. Every number in this study comes from one deliberately complete two-page sample CV. A different CV (very long URLs, unusual unicode, ten pages of roles) could surface different residuals. The fixture is designed to exercise every section type our builder supports, but it cannot exercise every CV that exists. This is why the checker matters: it runs the same extraction on your actual file, which is the only test that covers your actual content.

Parsing, not ranking. The gate measures whether text survives the trip into an ATS. It says nothing about how any employer's ranking, filtering, or recruiter searches will treat that text, which depends on your content and their configuration. A verified template gets your words into the database intact; it cannot make the words good.

A snapshot in time. These numbers describe the catalogue as measured on 22 August 2026. Templates evolve, rendering engines update, and the gate re-runs on every change precisely because past results do not certify future builds. When the numbers change, this page changes.

How this compares to how templates are usually marketed

We researched the competitive landscape thoroughly while building this catalogue, and the standard pattern in the CV-builder market is: describe every template as ATS-friendly, attach no test, publish no numbers. Sometimes the claim decorates layouts with dark sidebars, skill-rating bars, and two-column structures, precisely the features that make extraction unpredictable, with no distinction drawn for the buyer.

We're not going to claim competitors' templates fail parsing; we haven't measured them, and this study only asserts what we measured. What we will say is structural: a claim without a method isn't information, it's decoration. The useful questions to ask of any template vendor, ours included, are the ones this study answers in the open:

  • What exactly was tested, on which rendering pipeline: the real one users export through, or a mockup?
  • What was measured: token coverage against source content, reading order, both, neither?
  • What threshold does a template have to clear, and what happens when one doesn't?
  • Which templates carry the claim and which don't, and is the vendor willing to label some of its own catalogue as NOT verified?
  • Can the test be re-run, and are the artefacts inspectable?

Our answers, in one place

Production Next.js render to PDF via the production Chromium engine; unpdf text extraction; multiset token coverage against the canonical CV text plus declared-reading-order verification; a 95 percent gate that fails the build, with all 29 PDFs kept as artefacts; 25 templates badged and 4 deliberately not; and the whole thing re-runnable from the repository with one command. The ATS-verified template gallery lists the twenty-five badged designs, and every individual template page states its badge and what it means.

What this means for your CV, whichever tool you use

You may never use our templates, and the study still gives you a working checklist, because the failure modes we gated against are universal:

  • Verify extraction, don't assume it. The single most valuable habit from this entire study: look at your CV's extracted text before an application spree. Our checker shows it in seconds, unlimited, no account.
  • Treat letter-spacing as a hard risk. Stylised tracking on names and headings can shatter extraction invisibly. If your template spaces out its uppercase titles, check what the words look like in the extraction.
  • Prefer one column for portal submissions. Not because two columns always fail, but because one column is the only layout whose reading order is provable in general.
  • Expect long URLs to fray. Schemes and line-wrapped path fragments are the first casualties of extraction. If a link must be copy-pastable from the parsed record, keep it short and on one line.
  • Judge badges by their method. Any 'ATS-approved' label without a published test is a font choice, not a fact. Ask the five questions above.

Where to go from here

If you're starting a CV, pick from the verified gallery and the structural questions are pre-answered; worked examples like the nurse CV, the software engineer CV, or the project manager CV pair a verified template with role-specific content. If you already have a CV, check its extraction first; the fastest fix is knowing whether you need one. And for the method that sits on top of a verified template, the ATS screening guide covers vocabulary and verification end to end.

Frequently asked questions

Did you test against real ATS platforms like Workday or Greenhouse?
No, and we say so plainly: commercial ATS vendors don't expose their parsers for benchmarking, and any tool claiming to have scored your CV 'in Workday' should explain how. What we test is the layer every one of those systems depends on: the text extractable from the PDF. If extraction is complete, ordered, and intact, you've secured the input that all parsers share.
What does 98.94 percent coverage mean concretely?
The sample CV serialises to 284 expected tokens, counted with multiplicity. In a 98.94 percent run, 281 of 284 token occurrences were found in the PDF's extracted text; the 3 misses were the URL scheme 'https' (expected three times, displayed differently by the templates). All job titles, employers, dates, skills, and bullet content extracted completely.
Why do three compact templates score 98.24 percent instead of 98.94?
In Vector, Primer, and Mono, the sample's long GitHub project URL wraps across a line break in a way that splits two of its path tokens during extraction, on top of the three scheme tokens missing everywhere. That's 5 of 284 tokens, all from one URL. CV prose was unaffected, and all three templates clear the 95 percent gate with reading order intact.
Can I reproduce this study?
The gate is a script in our codebase (scripts/check-template-parity.ts) that renders every registry template through the production build, extracts each PDF's text with unpdf, and fails if any template drops below 95 percent coverage or breaks reading order. It saves all 29 PDFs as inspectable artefacts. Same input fixture, same tokeniser, same threshold on every run.
If the two-column templates scored 98.94 percent, why not badge them?
Because our test proves less for them. A single column has one provable reading order; two columns have two internally ordered lanes that different parsers may reassemble differently, and multi-page renders interleave the lanes page by page. We verify what's verifiable and label the rest honestly: Best for human review, with single-column DOCX and TXT fallbacks built in.
How do I check what a parser reads in my current CV?
Upload it to the ATS checker. It extracts your file's text layer with the same approach used in this study and shows you the raw result, plus deterministic checks on extraction quality, contact details, section headings, and dates. Scans are unlimited, and files are processed in memory, never stored.

Sources

Facts, prices, and policies verified on 22 August 2026. They can change; vendor checkout pages are the final word.

Build yours in minutes

Pass the bots

Every template is built single-flow and parse-tested. ATS View shows you exactly what an applicant tracking system extracts from your CV, before you send it.

AI that sounds like you

Our writing suggestions start from your real experience, not a phrase library. You keep your voice; the AI handles structure, verbs, and cut-the-fluff editing.

One document, every tool

Your CV powers everything: the ATS report, the job-match analysis, and a cover letter in the same design. Switch templates any time and your content reflows without retyping.

Create my CV, no sign-up needed

No sign-up required to start. Import your old CV or build from scratch, and see exactly what the bots read on your finished PDF.