How to write a CV that gets through an ATS to a human
The Cvizo team4 min read
An applicant tracking system takes your file apart into fields, and only those fields reach the recruiter. A field it cannot find stays empty, and an empty field is missing data rather than a low score. Format so the parser finds what you wrote.
In short
- The parser fills a fixed set of fields. Whatever it cannot find is simply absent from the record.
- A PDF generated from text, not a scan. If you cannot select the text, nothing can read it.
- One column. Many parsers read a page line by line, so a sidebar lands inside the main column.
- Match the exact phrase from the posting. React Native is a hit, RN is not.
- Test your own file by extracting its plain text and reading it in the order it came out.
Before a person sees your CV, a program reads it. An applicant tracking system takes the file apart into fields, and only those fields reach the recruiter. If the parse goes wrong, strong experience does not matter, because nobody sees it.
Formatting for an ATS is how you stop it from losing things you actually have.
What an ATS really does with your CV
The parser gets a file and tries to pull a fixed set of fields out of it: name, contact details, job titles, dates, companies, education, skills. Every field it cannot find stays empty. An empty field is missing data, which is worse than a low score: a recruiter filtering for “at least 3 years of Java” never sees a candidate whose years-of-experience field is blank.

So the only question that matters when you format a CV is whether the parser will find what you wrote, where it expects to find it. Which fields you should be filling at all is a separate question, and some of them work against you.
File format and page layout
A PDF generated from text, not a scan. A scan is a picture, and a picture is empty as far as the parser is concerned. If you are not sure which one you have, try selecting the text in a PDF reader. If you cannot select it, nothing can read it.
One column. A two-column layout looks good on screen, but many parsers read the page line by line from left to right, so the sidebar lands in the middle of sentences from the main column. The result is glued-together phrases like “Python Senior developer 2021”, and a job-title field the parser no longer recognises.
What to avoid
- Tables used for layout. A table in a PDF is a grid of coordinates, not a structure.
- Text in the page header and footer. Some parsers skip both entirely, and that is exactly where people put their phone number.
- Icons instead of labels. An envelope glyph means “email” to a human eye and to nothing else.
- Invented section names. “My professional journey” is nothing to a parser. “Experience” is a field.
- Vector artwork where text should be, because text converted to outlines stops being text.
Keywords without keyword stuffing
Matching happens at the level of a phrase, not a single word, and almost always against the exact wording in the posting. If the posting says “React Native”, then “RN” is not a hit.
| The posting says | Write this in your CV | Why |
|---|---|---|
| React Native | React Native (RN) | The full phrase plus the abbreviation, both present in the text |
| Team management | Managed a team of 6 | The phrase survives, the number gives a human something to read |
| SQL | PostgreSQL, SQL | The specific tool and the general term the filter looks for |
| English C1 | English C1 | Unchanged, the level is part of the phrase |
List a skill when you can talk about it for ten minutes. A list of twenty technologies where you know four passes the filter and falls apart in the first interview.
A recruiter scans a CV in a few seconds on the first pass. The parser decides whether that pass happens at all.
How to test your own CV in two minutes
The simplest test needs nothing beyond what is already on your disk. Pull the plain text out of the file and read it in the order it came out:
pdftotext -layout cv.pdf - | head -60
If the output reads like your CV, the parser will manage too. If you see merged columns, lost
dates, or nothing where your header should be, you have an exact list of things to fix.
Without -layout you see the raw order of the text stream, which is roughly what the simplest
parser gets.
The second thing to check is dates. 03/2021 - 06/2023 is unambiguous. spring 2021 is not,
and it usually ends as an empty years-of-experience field.
One CV per posting
This advice costs the most time, and it is the one that moves results. Postings describe the same role in different words, and matching happens on words. One CV sent to thirty companies is tailored to none of them.
Doing it by hand is about twenty minutes per posting: read the requirements, reorder the bullets, add two phrases in exactly the wording the posting uses. At ten applications a week that is half a day, which is why almost nobody does it.