We Ran Our 24 Templates Through Our Extraction Gate: Here Is the Exact Text the Robot Sees
Updated August 16, 2026 · 15 min read
We rendered all 24 of our resume templates to real PDFs, extracted their text the way an ATS parser does, and compared it token by token to the source resume. Every template preserved reading order; token coverage measured 98.24 to 98.94 percent, and the only losses were URL fragments.
Every resume 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 24 templates in our catalog, rendered the same sample resume 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 resume'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 artifacts (the actual PDFs) are kept for inspection.
Below: the full methodology, the per-template results from the latest run (2026-08-16), 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 resume; 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. 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 resume 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 catalog 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 24 templates in the registry:
- The same fixed sample resume 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
- 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
- The extraction is compared to the canonical text of the source resume (the resumeToText serialization), token by token: text is Unicode-normalized (NFKC, which also folds PDF ligatures like fi back into letters), lowercased, and split on non-alphanumeric characters
- 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
- 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
- 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 artifacts for manual inspection
The sample resume
The fixture is a deliberately complete two-page resume (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. Serialized for comparison, it yields 284 expected tokens. Using one fixed fixture is what makes runs comparable across template changes: same input, same tokenizer, 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 resume'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-16, all 24 templates, two-page render of the sample resume in every case. Reading order was preserved in 24 of 24 templates. Token coverage by template:
| Template | Family | Badge | Token coverage | Order preserved |
|---|---|---|---|---|
| Metro | Modern | ATS-Verified | 98.94% | Yes |
| Slate | Modern | ATS-Verified | 98.94% | Yes |
| Signal | Modern | ATS-Verified | 98.94% | Yes |
| Nova | Modern | ATS-Verified | 98.94% | Yes |
| Aster | Modern | ATS-Verified | 98.94% | Yes |
| Verve | Modern | ATS-Verified | 98.94% | Yes |
| Axis | Modern | ATS-Verified | 98.94% | Yes |
| Onyx | Modern | ATS-Verified | 98.94% | Yes |
| Harlan | Heritage | ATS-Verified | 98.94% | Yes |
| Madison | Heritage | ATS-Verified | 98.94% | Yes |
| Clarendon | Heritage | ATS-Verified | 98.94% | Yes |
| Beacon | Heritage | ATS-Verified | 98.94% | Yes |
| Tenure | Heritage | ATS-Verified | 98.94% | Yes |
| Regent | Heritage | ATS-Verified | 98.94% | Yes |
| Kernel | Compact | ATS-Verified | 98.94% | Yes |
| Vector | Compact | ATS-Verified | 98.24% | Yes |
| Stacker | Compact | ATS-Verified | 98.24% | Yes |
| Ledger | Compact | ATS-Verified | 98.94% | Yes |
| Primer | Compact | ATS-Verified | 98.24% | Yes |
| Mono | Compact | ATS-Verified | 98.24% | Yes |
| Studio | Statement | Best for human review | 98.94% | Yes |
| Panorama | Statement | Best for human review | 98.94% | Yes |
| Duet | Statement | Best for human review | 98.94% | Yes |
| Atlas | Statement | Best for human review | 98.94% | Yes |
Reading the spread: 98.24 to 98.94 percent
Twenty of the 24 templates measured 98.94 percent coverage; four of the densest compact templates (Vector, Stacker, 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 resume contains three full links (a LinkedIn profile, a portfolio site, and a GitHub project URL). Our canonical resume 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 four 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 resume prose (a job title, an employer, a skill, a date, a bullet) was lost in any of the 24 templates.
Why we publish the asterisk instead of rounding it away
We could tokenize 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 tokenizer. 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 catalog
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 catalog 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 generalizes beyond our templates, and it's a thing almost no 'ATS-friendly' checklist mentions: if your current resume uses stylized 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 resume 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, career 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 defense 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 resume. A different resume (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 resume 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 catalog as measured on August 16, 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 catalog, and the standard pattern in the resume-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 catalog as NOT verified?
- Can the test be re-run, and are the artifacts 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 resume text plus declared-reading-order verification; a 95 percent gate that fails the build, with all 24 PDFs kept as artifacts; 20 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 badged designs, and every individual template page states its badge and what it means.
What this means for your resume, 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 resume's extracted text before an application spree. Our free checker shows it in seconds, unlimited, no account.
- Treat letter-spacing as a hard risk. Stylized 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 resume, pick from the verified gallery and the structural questions are pre-answered; worked examples like the registered nurse resume, the software engineer resume, or the project manager resume pair a verified template with role-specific content. If you already have a resume, check its extraction first; the fastest fix is knowing whether you need one. And for the concepts behind all of this, start with what makes a resume ATS-friendly.
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 resume '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 resume serializes 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 four compact templates score 98.24 percent instead of 98.94?
- In Vector, Stacker, 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. Resume prose was unaffected, and all four 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 24 PDFs as inspectable artifacts. Same input fixture, same tokenizer, 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 resume?
- Upload it to the free 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 free, and files are processed in memory, never stored.