What an ATS really is
An applicant tracking system stores applications and makes them searchable. When you upload a resume, a parser tries to extract structured fields — name, contact details, employers, dates, titles, education, skills — into a database record. A recruiter then searches and filters that database.
The failure mode you should fear is a bad parse, not a low score. If the parser reads your two-column layout in the wrong order and files your job titles as skills, you are searchable for nothing, and no human ever sees the document.
That reframes the whole exercise. You are not writing a document to impress software. You are writing a document that survives being converted into rows in a table, and then reads well to a human who found those rows. Every real rule below serves one of those two jobs.
How parsing actually works, stage by stage
Parsers differ by vendor, but the pipeline is broadly the same everywhere, and each stage has a distinct way of failing. Knowing which stage broke tells you which rule you violated.
| Stage | What it does | What breaks it | Symptom on your side |
| 1. Text extraction | Pulls a character stream out of the PDF or DOCX | Image-only PDFs, scans, design-tool exports with outlined type, text baked into shapes | The record is blank or nearly blank; you appear to have submitted nothing |
| 2. Reading order | Reconstructs which characters belong in which visual block, top to bottom | Two-column layouts, sidebars, text boxes, tables used for layout | Your skills sit inside a job title; sentences interleave across columns |
| 3. Section detection | Matches headings against a known vocabulary to split the document | Creative headings, headings styled identically to body text, headings placed inside graphics | An entire Experience section is filed as unclassified text |
| 4. Entity extraction | Inside each section, pulls employer, title, dates, location, bullets | Title and employer sharing a line with an unusual separator, dates like Summer 25, missing months | Date fields come back empty, so date filters skip you entirely |
| 5. Normalisation | Maps what you wrote onto a canonical taxonomy of skills, schools, and companies | Private abbreviations, invented acronyms, misspelled framework names | You are on file with a skill nobody searches for |
| 6. Indexing and search | Makes the record findable by boolean and keyword search | None of the recruiter's search terms appear anywhere in your text | A clean record that never surfaces in a single result list |
Stage 1 is the one that silently costs you everything
A resume with no extractable text is not a weak application, it is an empty one. The two common ways to get there are exporting from a design tool with fonts converted to outlines, and sending a photograph or scan of a printed page. Both look perfect on your screen and contain zero characters.
The thirty-second test: open your own PDF, select all, copy, and paste into a plain text editor. What you see is approximately what the parser sees. If nothing pastes, you have an image. If the words arrive in the wrong order, you have a reading-order problem.
Stage 3 fails quietly and looks like bad luck
Section detection works off a vocabulary of expected headings. Experience, Work Experience, Education, Skills, Projects, Certifications are all understood. My Journey, Where I Have Been, and Things I Am Good At are not. The parser does not reject them — it just cannot tell where one section stops and the next begins, so it dumps the lot into a generic text blob that is searchable but not filterable.
The heading needs to look like a heading to a machine, not only to your eye. Bold and larger than body text, on its own line, with blank space above it. A heading that is merely a different colour, or that shares a line with the first bullet under it, is frequently missed.
Stage 4 is where students lose the graduation-date filter
Recruiters filter internship pipelines on expected graduation date constantly, because eligibility for a given programme is usually defined by it. If the parser cannot find a month and a year in your Education entry, you fall out of that filter without ever being rejected by anyone. Write Expected May 2028, not Class of 28 and not a bare year.
The formatting rules that are real, and what each one prevents
| Rule | Stage it protects | Failure it prevents |
| Single column, no sidebars | Reading order | Skills and titles interleaving into nonsense |
| Standard section headings | Section detection | The whole document collapsing into one unclassified blob |
| Real selectable text, never an image | Text extraction | An application that arrives functionally empty |
| Month and year on every date range | Entity extraction | Falling out of graduation-date and tenure filters |
| No tables or text boxes used for layout | Reading order | Cell-by-cell extraction producing fragments |
| Contact details in the body, not the header region | Text extraction | Headers and footers being dropped by some extractors |
| Common fonts, no exotic ligatures | Text extraction | Characters arriving as unmapped glyphs |
| One consistent bullet character | Entity extraction | Bullets being read as body prose |
| Industry-standard terminology | Normalisation and search | Being on file under a term nobody types |
| File under about 1 MB, PDF or DOCX | Upload and extraction | Silent upload failures and slow parse timeouts |
The myths
| Myth | Reality |
| "White-text keyword stuffing beats the ATS" | Trivially detected, and it is grounds for rejection when a human sees the document. Do not. |
| "The ATS gives you a match score out of 100" | Some products compute a match score, most recruiters ignore it, and none of them reject solely on it. |
| "Never use a PDF" | Modern parsers handle text-based PDFs fine. The problem is image-based or design-tool PDFs with outlined text. |
| "One page or you are rejected" | One page is good advice for students because it forces editing, not because a parser counts pages. |
| "Fancy templates get filtered out" | They get parsed badly, which is worse than filtered. The template is not judged; it is misread. |
| "There is a magic keyword density" | There is no density target. A term either appears in a defensible context or it does not. |
| "Applying through the company site beats a job board" | Both usually land in the same system. The advantage of the company site is fresher postings, not better treatment. |
| "A referral bypasses the ATS" | It does not bypass it, it flags the record for human review. That is a much bigger advantage than bypassing anything. |
Section order: students versus experienced candidates
Order matters for the human, not the parser. The reader spends their attention top-down, so the section carrying your strongest evidence goes first after contact details.
| Position | Student or new grad | Three or more years of experience |
| 1 | Contact block, in body text | Contact block, in body text |
| 2 | Education, with expected graduation month and year | Two-line summary, optional |
| 3 | Technical skills, grouped by category | Experience, most recent first |
| 4 | Experience, including internships and part-time work | Technical skills |
| 5 | Projects, each with a live link | Education, compressed to two lines |
| 6 | Research, leadership, publications | Projects, publications, or open-source work |
The student ordering exists because a recruiter screening an internship pipeline needs the graduation date within the first two seconds. The experienced ordering exists because by then nobody is filtering on your degree. Do not carry the student layout into your fourth year of work, and do not bury Education as a sophomore.
Bullets that survive a six-second read
A parser gets your bullets into the database; a human decides in seconds. The structure that works: action verb, object, method, result — and the result is a number wherever one honestly exists.
Five rewrites. The first is from real work; the rest are illustrative examples of the shape, using invented numbers to show the arithmetic of a good bullet rather than to claim anything.
1. REAL
Weak: Responsible for the team's data pipeline
Better: Built an NLP scoring pipeline over 50+ market sources per day,
cutting manual research time 60%
2. ILLUSTRATIVE
Weak: Worked on the checkout page
Better: Rewrote checkout validation in TypeScript, cutting failed
submissions from 9% to 2% of sessions over one release
3. ILLUSTRATIVE
Weak: Helped improve site performance
Better: Profiled and lazy-loaded the dashboard bundle, taking first
paint from 4.2s to 1.1s on a mid-tier Android device
4. ILLUSTRATIVE
Weak: Assisted with testing
Better: Added 140 unit tests around the billing module, raising branch
coverage from 31% to 78% and catching 3 pre-release regressions
5. ILLUSTRATIVE
Weak: Member of the robotics club
Better: Led a 5-person team to a working autonomous rover in 11 weeks;
owned the path-planning module in Python
If there is no number, use scope: how many users, how many records, how many workflows, over what period. "Improved performance" is unreadable. Anything with a before, an after, and a unit is a fact, and facts are what get remembered in a stack of forty similar documents.
Never invent a metric. A fabricated number is the one thing on a resume that can end an interview in a single follow-up question, because the interviewer will ask how you measured it. Scope numbers you can defend beat impact numbers you cannot.
Keyword mirroring, worked on a real-shaped posting
Mirroring is not gaming. It is making sure that the term you and the recruiter both mean is spelled the same way in both documents. Here is a posting excerpt of the kind you will actually meet, and the mapping exercise it implies.
POSTING (excerpt)
Software Engineer Intern, Platform
- Build and maintain backend services in Python or Go
- Work with REST APIs and relational databases (PostgreSQL)
- Participate in code review and CI/CD workflows
- Familiarity with containerisation (Docker) a plus
- Experience with unit testing and debugging distributed systems
- Must be enrolled in a Bachelor's programme graduating in 2028
| Term in the posting | What you actually did | Where it goes | Verdict |
| Python | Two years of coursework plus three shipped projects | Skills line and two Experience bullets | Include, exact spelling |
| Go | Never used it | Nowhere | Omit. This is the whole ethics of the exercise |
| REST APIs | You wrote 'built endpoints' | Rewrite the bullet to say REST API endpoints | Include, adopt their wording |
| PostgreSQL | You used SQLite and wrote 'SQL' | Skills line keeps SQL and SQLite; do not write PostgreSQL | Partial. Name what is true |
| CI/CD | You set up GitHub Actions | Bullet says CI/CD pipelines in GitHub Actions | Include both terms |
| Docker | Containerised one project locally | Skills line, and the project bullet | Include, honestly scoped |
| Unit testing | You wrote pytest suites | Bullet says unit tests with pytest | Include both terms |
| Graduating in 2028 | Expected May 2028 | Education line, month and year | Critical. This is a hard filter |
- Pull the 8 to 12 concrete nouns from the posting: languages, frameworks, tools, domains, methods.
- Delete any you cannot defend for ten minutes in an interview. That deletion is the entire ethics of the exercise.
- For the rest, make sure the exact term appears where you genuinely used it — in the bullet describing the work, not in a keyword dump at the bottom.
- Where you and the posting use different words for the same thing, include both:
CI/CD pipelines (GitHub Actions) is findable under either search.
- Copy the hard eligibility facts verbatim into the obvious place: graduation month and year, degree name, location.
- Re-read the result out loud. If a sentence exists only to hold a keyword, it will read that way to a human too.
A base resume plus per-role variants, without rewriting anything
Rewriting from scratch for every application is how people stop applying by week three. The sustainable structure is one master document that is deliberately too long, and thin variants cut from it.
resume/
master.md all bullets ever written, ~4 pages, never submitted
bullets/
backend.md the 12 strongest backend bullets
data-ml.md the 12 strongest data and ML bullets
frontend.md the 12 strongest frontend bullets
variants/
swe-intern.pdf built from master, 1 page
data-intern.pdf built from master, 1 page
quant-intern.pdf built from master, 1 page
README.md which variant went to which company, and why
- Write every bullet once, into the master. Never delete from the master; only stop selecting a bullet.
- Build a variant by selection, not by writing: pick the 10 to 14 bullets that match the role family.
- Keep the contact block, education block, and skill categories identical across variants so a recruiter comparing two of your documents never sees a contradiction.
- Change at most the skills ordering and two or three bullets per specific application. More than that is not tailoring, it is a second job.
- Log which variant went where in the README, because six weeks later an interviewer will reference a bullet you cannot remember sending.
Three variants covers almost every student search. If you find yourself building a fourth, that is usually a signal your target list has drifted rather than a signal you need more documents — and target-list discipline is covered in the internship search guide.
File naming and submission mechanics
- Name the file for the reader, not for you.
Firstname-Lastname-Resume.pdf, or Firstname-Lastname-SWE-Intern.pdf. Not resume_final_v3(2).pdf, which is what a recruiter sees in a folder of two hundred attachments.
- PDF by default, DOCX when asked. If the form says Word document, send a Word document; that instruction usually means their parser is old.
- Keep it under about 1 MB. Large files time out in some upload widgets and fail without a visible error.
- Fill the parsed fields even when they auto-populate. The auto-fill step is the parser showing you its work. Correct anything wrong there, because that corrected version is what gets stored.
- Never upload from a link-sharing service. Some portals store the link rather than the file, and links rot.
- Answer the eligibility questions carefully and consistently. Work authorisation and sponsorship questions are structured fields that get filtered on directly; the reasoning behind them is in the sponsorship verification guide.
- Screenshot or log the confirmation. A req number, a date, and a status field. Without that log you will re-apply to the same req and look disorganised.
The pre-submit checklist
- Select-all, copy, paste into a plain text editor. Reading order correct? Nothing missing?
- Name, email, phone, city, LinkedIn, GitHub, portfolio — all present as text, none of them only inside a graphic.
- Every date range has a month and a year, formatted the same way throughout.
- Education shows the expected graduation month and year.
- Section headings are the standard vocabulary, bold, on their own lines.
- Single column throughout. No text boxes, no layout tables, no sidebar.
- Every link is a real URL that resolves, and the anchor text shows the URL for anyone reading on paper.
- The eight to twelve terms from the posting that you can defend all appear in a real sentence.
- No metric on the page that you cannot explain how you measured.
- Spell-check run, including on proper nouns: framework names are the most commonly misspelled words on technical resumes.
- File named
Firstname-Lastname-Resume.pdf, under 1 MB.
- One page for a student. If it is spilling, the fix is cutting weak bullets, not shrinking the font to 9pt.
The resume is one document in a system. The profile recruiters find you through is covered in the LinkedIn guide, the projects it points at are covered in the portfolio guide, and the interview it buys you is covered in the interview patterns guide. Terms you do not recognise are in the glossary.
I do this as a service if you want it done for you: an ATS-safe resume rebuild, optionally with tailored applications. And Apply OS is the free tracker for keeping the applications themselves straight.
Tools referenced in this guide
- Resume rebuild — ATS-safe rebuild, optionally with tailored applications.
- Apply OS — free deadline radar and application pipeline, browser-only.
- Internship guide — the full search process for international students.