Resume, Portfolio & GitHub Profile Module 1 – How applications are read
How applicant tracking systems really work
What an applicant tracking system does with a resume: parsing, the form rules that reject, exact-match search, AI ranking and the laws on hiring tools.
What you will learn
- Describe what an applicant tracking system does with a resume, from parsing to search
- Explain how knockout questions can end an application before anyone reads the resume
- Predict whether a recruiter's exact-match keyword search finds a given resume
- Explain what AI ranking features do and which laws govern automated hiring tools
- Separate documented tracking-system behaviour from myths, using the vendors' own documentation
Before you start
What you’ll learn · Before you start
What you will learn
- Describe what an applicant tracking system does with a resume, from parsing to search
- Explain how knockout questions can end an application before anyone reads the resume
- Predict whether a recruiter's exact-match keyword search finds a given resume
- Explain what AI ranking features do and which laws govern automated hiring tools
- Separate documented tracking-system behaviour from myths, using the vendors' own documentation
Before you start
On this page
In a survey of 2,275 executives in the United States, the United Kingdom and Germany, 63 % said their companies used recruiting software, more than 90 % of those companies used it to filter or rank candidates first, and 88 % believed that qualified high-skills candidates were screened out because they did not match the exact criteria of the job description. Software does shape who gets read, but what it does is narrower, and easier to check, than most advice suggests.
This lesson takes one kind of system apart with its vendors’ own documentation: what parsing does, the form rules that can reject an application, the exact-match search that recruiters run, what AI ranking does and does not do, and the laws that now govern such tools. Then it checks ten common claims against those sources.
Parsing fills a profile, and a failed parse is not a rejection
The software that holds applications is an applicant tracking system: Software an employer uses to receive applications, store resumes, fill candidate profiles from them, search them and move candidates through the stages of hiring.. When a resume arrives, it keeps the file, extracts its text and parses it: it looks for the name, the contact details, the jobs and the education, and copies each into a field of the candidate’s profile. Step through one upload:
The drawing shows the whole scene; its 6 steps are listed below.
Every step as text
- The upload. Asha uploads her resume as a PDF. The system keeps the file itself, attached to her candidate profile, whatever happens next.
- Text comes out first. The system extracts the text of the file. Everything after this step works on that text, not on the page as Asha sees it.
- Fields are filled. The parser looks for her name, e-mail, phone, jobs and education in the text and copies each into its field of the profile. This is the parse.
- The text is searchable. The same text goes into a search index, so a recruiter can search the full text of resumes for job titles, skills and places.
- A recruiter searches. A recruiter searches for the posting's keywords and opens the profiles that match. What the search can find is only what the extracted text contains.
- When the parse fails. If the parser cannot read the file, the resume is only attached to the profile and someone types the fields in by hand. A failed parse is not a rejection, but a file with no text, such as a photo, gives the search nothing to find.
Greenhouse, one widely used system, documents what happens when resume parsing: Reading a resume file with software to copy details such as the name, contact details, jobs and education into the fields of a candidate profile. goes wrong. A resume it cannot parse is only attached to the candidate, and someone fills in the profile by hand. It cannot parse files larger than 2.5 MB. And it lists the layouts that lead to a partial parse:
- spaces between the letters of words;
- graphics, photos or word art, and a resume uploaded as an image instead of a document such as .docx or .pdf;
- complex resumes with tables, headers and footers, the name and contact details in a header, footer or text box, or the page set in columns;
- sections that are not clearly marked, or formats that differ within a section.
None of these is a rejection. A partial parse means empty or wrong fields that a person corrects, while a resume with no text at all, a photo or a scan, gives the search in the next sections nothing to find. The formatting lesson of this track measures what each of these layouts does to the extracted text.
Checkpoint
Check: What parsing does, and a failed parse
Form rules, not formatting, are what reject automatically
Automatic rejection comes from the application form. Greenhouse’s auto-reject rules act on a job post’s yes or no, single-select and multi-select questions: the employer chooses the answer that rejects, and an applicant who gives it is rejected automatically, with the rejection reason the rule assigns, and sent a rejection email if the rule is set to send one. Greenhouse’s own example is a job that needs a commercial driver’s licence. A question used this way is a knockout question: An application-form question whose answer can end an application by itself, such as whether you hold a licence or a right to work that the role requires., and these are typical ones:
| Question on an invented posting | An answer a rule may reject | Why the posting asks |
|---|---|---|
| Can you work from the Pune office three days a week? | No | The role is hybrid, in one city |
| Do you have a bachelor’s degree in computer science or a related field? | No | It is a minimum qualification |
| Will you need visa sponsorship to work in this country? | Yes | The employer does not sponsor visas |
Rules can act on what the resume shows, too. In the Hidden Workers survey, almost half of the employers screened out resumes with a gap of more than six months in the work history, so that no recruiter ever saw them. Such filters are set by the employer. They are reasons to answer every question accurately and to account for a long gap, not reasons to redesign the page.
Answering what the rule wants to hear
Wrong: answering Yes to the degree question with a diploma, hoping nobody checks. Right: answer truthfully, and where the form allows equivalent experience, say what yours is. A form answer is a statement of fact that will be compared with your documents and your interviews later.
Checkpoint
Check: Knockout questions and form rules
Recruiters search the text, and the search is exact
Once applications are in, a recruiter can search them. Greenhouse’s talent filtering looks for the words a recruiter types, such as job titles, skills and places, anywhere in the text of the resumes and in the team’s internal notes, and its documentation is specific about matching: a keyword “must exactly match the keyword in the application”. This is an exact match: A search rule under which a keyword counts only when the same word appears in the text. A synonym, an abbreviation or another spelling does not count.. Keywords can be preferred, where any one of them is enough (an OR), or required, where all of them must appear (an AND), and filters then narrow the results by location, referrals and education.
The program applies a form rule and then that search to four invented applications. Press Edit, change a resume or the search, and run it again:
# Four invented applications to one posting, run through two documented kinds of rule: an auto-reject rule on a
# yes/no form question (Greenhouse's auto-reject acts on yes/no and select answers), then a recruiter's keyword search
# (Greenhouse's talent filtering: a keyword must exactly match the application; every required keyword must appear,
# and at least one preferred keyword). A model of the documented rules, not any vendor's code.
# Press Edit, change the resumes, the answers or the search, and run it again.
import re
REQUIRED = ["Python", "PostgreSQL"] # every one must appear (AND)
PREFERRED = ["Kafka", "Kubernetes"] # at least one must appear (OR)
KNOCKOUT = "Can you work from the Pune office three days a week?" # the posting rejects the answer "No"
APPLICATIONS = {
"Asha": {"answer": "Yes", "resume": "Backend engineer. Python and PostgreSQL services; Kafka consumer for 2 million events a day."},
"Ravi": {"answer": "Yes", "resume": "Backend developer. Python and Postgres services on Kubernetes, 99.9 % uptime."},
"Meera": {"answer": "Yes", "resume": ""}, # she uploaded a photo of her printed resume: no text to search
"Kiran": {"answer": "No", "resume": "Senior engineer. Python, PostgreSQL, Kafka and Kubernetes at scale."},
}
def has(term, text):
"""The keyword as a whole word of the text: "Java" is not found in "JavaScript", nor "PostgreSQL" in "Postgres".
Letter case is ignored here; the article does not say whether it counts."""
return re.search(rf"(?<![\w-]){re.escape(term)}(?![\w-])", text, re.IGNORECASE) is not None
print(f"Form rule: answering No to {KNOCKOUT!r} rejects the application.")
print(f"Search: all of {', '.join(REQUIRED)}; at least one of {', '.join(PREFERRED)}.")
print()
for name, application in APPLICATIONS.items():
resume = application["resume"]
if application["answer"] == "No":
print(f"{name:<6} rejected by the form rule; the search never runs on this resume")
continue
if not resume:
print(f"{name:<6} not shown: the file has no text, so no keyword can match")
continue
missing = [k for k in REQUIRED if not has(k, resume)]
preferred = [k for k in PREFERRED if has(k, resume)]
if missing:
print(f"{name:<6} not shown: missing the required {', '.join(missing)}")
elif not preferred:
print(f"{name:<6} not shown: none of the preferred keywords")
else:
print(f"{name:<6} shown: required {len(REQUIRED)} of {len(REQUIRED)}, preferred {', '.join(preferred)}")
# Ravi has the skill; only the spelling differs. Writing the posting's own term fixes it.
fixed = APPLICATIONS["Ravi"]["resume"].replace("Postgres", "PostgreSQL")
print()
print(f"Ravi, with 'PostgreSQL' written as the posting writes it: {'shown' if all(has(k, fixed) for k in REQUIRED) else 'not shown'}") Output
Form rule: answering No to 'Can you work from the Pune office three days a week?' rejects the application. Search: all of Python, PostgreSQL; at least one of Kafka, Kubernetes. Asha shown: required 2 of 2, preferred Kafka Ravi not shown: missing the required PostgreSQL Meera not shown: the file has no text, so no keyword can match Kiran rejected by the form rule; the search never runs on this resume Ravi, with 'PostgreSQL' written as the posting writes it: shown
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 exact_match.py
Runs on this device, in your browser. The first run downloads Python (about 13.5 MB), which is kept for the next runs.
Your run, in this browser
Ravi has the same skill as Asha and is not shown, because his resume says Postgres and the search says PostgreSQL. Meera is not shown because her photographed resume has no text, and Kiran’s resume is never searched, because the form rule rejected her application first. Writing the posting’s own term for a skill he has fixes Ravi’s case without adding a single new claim.
Key idea
A search finds only the words your resume contains, spelled the way the recruiter types them: write the posting’s own name for each skill you really have, and make sure the file has text to search.
Checkpoint
Check: Exact-match keyword search
AI ranking sorts candidates, and people still decide
Newer systems add AI that compares applications with the role. In the documentation of the two features below, it sorts and suggests; it does not decide:
| Feature | What it does | What its documentation says it does not do |
|---|---|---|
| Greenhouse Talent Matching | Puts each applicant in a match category, such as Strong, Good, Partial or Limited, against a calibration of required skills, experience and job titles that the hiring team sets up | It “does not auto-reject or auto-advance any candidate”, and more matched terms do not always mean a higher match |
| Microsoft’s job match indicator | Shows a job seeker whether a posting is a good or strong match for their skills, title and experience | It “doesn’t guarantee any outcome” for an application |
Two conclusions follow. Keyword stuffing is not a strategy: Greenhouse explains that several resume terms can map to the same calibrated skill, so more matched terms do not always raise a match. And a candidate can sometimes ask to be assessed without AI: Talent Matching has an optional opt-out that an employer’s administrators can switch on, after which the application is labelled for manual review and assessed by the team’s usual process.
Checkpoint
Check: What AI ranking does and does not do
Laws now govern automated hiring tools
Automated hiring tools are no longer unregulated, and neither is the data in your resume. Walk through the laws in the order they were made and began to apply:
- 2021
New York City passes Local Law 144 city law
The law lets an employer or employment agency use an automated employment decision tool only after a bias audit within the past year, with information about the audit made public and notices given to candidates.
- 2023
New York City starts enforcing it enforcement
The city's Department of Consumer and Worker Protection began enforcing the law and its rules. A candidate can complain to it, for example when an employer has not posted a summary of the audit's results.
- 2023
India enacts its data protection law national law
The Digital Personal Data Protection Act sets out the duties of organisations that handle digital personal data and the rights of the people it belongs to, which includes the data in a resume you send.
- 2024
The EU adopts its AI Act EU law
Regulation (EU) 2024/1689 lists AI systems for the recruitment or selection of people as high-risk, in particular those that place targeted job adverts, analyse and filter job applications, or evaluate candidates.
- 2025
India notifies the DPDP Rules national rules
The Rules bring the Act fully into operation over an 18-month phased timeline for organisations. They set out how people can ask to access, correct, update or erase their personal data: an organisation must answer within 90 days.
- 2027
EU high-risk rules for hiring apply EU law
After the EU agreed to simplify the AI Act, the European Commission says the high-risk rules for areas such as employment apply from late 2027. The Act's bans, such as emotion recognition in workplaces, already apply.
The timeline has 6 events, from 2021 to 2027.
For a candidate, two of these change what an employer must do. In New York City, an employer that uses an automated employment decision tool needs a bias audit: An independent check of whether an automated hiring tool selects or scores people differently by sex, race or ethnicity, which New York City requires before an employer uses such a tool. of it within the past year, a public summary of the results and a notice to candidates, and the city takes complaints. In the EU, AI that analyses and filters job applications is high-risk, and the Commission says the strict obligations for such systems apply from late 2027.
Your resume is personal data
India’s Digital Personal Data Protection Act and the Rules notified under it, which give organisations an 18-month phased timeline to comply, set out people’s rights to access, correct, update or erase their personal data, and an organisation must answer such a request within 90 days. A resume you send by e-mail or upload to a portal is digital personal data.
Checkpoint
Check: Laws on automated hiring tools
Ten common claims, checked against the sources
Much advice about tracking systems repeats claims that their documentation does not make. Here are ten, each with what the sources of this lesson actually say:
| Claim | Verdict | What the sources say |
|---|---|---|
| A resume that fails to parse is rejected | Not supported | Greenhouse attaches it to the candidate and the fields are typed in by hand |
| Two-column resumes are rejected automatically | Not supported | Columns are a documented cause of partial parses, not of rejection |
| A No to a required form question can reject you at once | Documented | Greenhouse auto-reject rules act on yes or no and select answers |
| Recruiters search resumes for keywords | Documented | Greenhouse talent filtering searches the full text of resumes |
| A search for PostgreSQL also finds Postgres | Not supported | The keyword must exactly match the application |
| Repeating keywords raises your AI match | Not supported | More matched terms do not always mean a higher match |
| AI rejects candidates on its own | Not supported for Talent Matching | It does not auto-reject or auto-advance any candidate |
| Filters can screen out qualified people | Reported by employers | 88 % of surveyed employers believed it happens to high-skills candidates |
| A very large file may not parse | Documented | Greenhouse cannot parse resumes larger than 2.5 MB |
| Software rejects 75 % of resumes before a person sees them | Not supported | None of the documentation or surveys here says anything like it |
The last claim is the most repeated, and no study is given when it is. Treat a number like it as unsupported until someone shows where it was measured, and judge advice about tracking systems by whether it names its source.
Resume PDF ATS Checker See the text a parser gets from your resume PDF, in reading order and line by line, checked on your device.Checkpoint
Check: Documented behaviour against myths
Practise: write the search a recruiter runs
Build the search of this lesson yourself: every required keyword, at least one preferred keyword, whole words only. The sample tests use the lesson’s four applications and a few edge cases:
Exercise · Easy · Python
Write the keyword search a recruiter runs
Write shown(text, required, preferred) in search.py: the keyword search a recruiter runs over the text of one application, modelled on the rules Greenhouse documents for its talent filtering.
- It returns
Truewhen every keyword inrequiredappears intextand, whenpreferredis not empty, at least one keyword inpreferredappears too. Otherwise it returnsFalse. - A keyword appears when it is a whole word of the text:
"Java"does not findJavaScript, and"PostgreSQL"does not findPostgres. Greenhouse's article does not say whether letter case counts, so this search ignores it:"python"findsPython. - A keyword with a hyphen, such as
"infrastructure-as-code", appears only with its hyphens. - A text with no words, the text of a photographed resume, matches no keyword.
The sample tests try the four invented applications of the lesson's program and a few edge cases.
Starter code · search.py
import re
def shown(text, required, preferred):
"""True when every required keyword and, if any are given, at least one preferred keyword appear in text."""
# Replace this line with the search.
return False The sample tests · test_search.py
from search import shown
REQUIRED = ["Python", "PostgreSQL"]
PREFERRED = ["Kafka", "Kubernetes"]
ASHA = "Backend engineer. Python and PostgreSQL services; Kafka consumer for 2 million events a day."
RAVI = "Backend developer. Python and Postgres services on Kubernetes, 99.9 % uptime."
def test_every_required_and_one_preferred():
"""shows Asha, who has both required keywords and one preferred keyword"""
assert shown(ASHA, REQUIRED, PREFERRED) is True
def test_a_different_spelling_is_not_a_match():
"""does not show Ravi: Postgres is not PostgreSQL"""
assert shown(RAVI, REQUIRED, PREFERRED) is False
assert shown(RAVI.replace("Postgres", "PostgreSQL"), REQUIRED, PREFERRED) is True
def test_a_missing_preferred_keyword_hides_the_application():
"""does not show an application that has the required keywords but none of the preferred ones"""
assert shown("Python and PostgreSQL scripts.", REQUIRED, PREFERRED) is False
assert shown("Python and PostgreSQL scripts.", REQUIRED, []) is True
def test_case_does_not_matter():
"""finds python in any letter case"""
assert shown("PYTHON, postgresql and kafka.", REQUIRED, PREFERRED) is True
def test_whole_words_only():
"""does not find Java inside JavaScript"""
assert shown("Five years of JavaScript.", ["Java"], []) is False
assert shown("Java and JavaScript.", ["Java"], []) is True
def test_hyphens_belong_to_the_keyword():
"""finds infrastructure-as-code only with its hyphens"""
assert shown("Terraform for infrastructure-as-code.", ["infrastructure-as-code"], []) is True
assert shown("Terraform for infrastructure as code.", ["infrastructure-as-code"], []) is False
def test_no_text_matches_nothing():
"""does not show a photographed resume, which has no text"""
assert shown("", REQUIRED, PREFERRED) is False A hint
Write a helper appears(keyword, text) first. A regular expression can check a whole word in any case: re.search(rf"(?<![\w-]){re.escape(keyword)}(?![\w-])", text, re.IGNORECASE) finds the keyword only where no letter, digit or hyphen touches it. Then shown is one all(...) over required and one any(...) over preferred.
Results of the sample tests
| Test | Result | Details |
|---|
What your code printed
The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.
Then answer questions on all six ideas, from parsing to the claims table; each new question goes to the idea you are least sure of:
Practice that adapts to you
Practise this lesson
12 questions about 6 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.
Interview questions
Warm-up (fresher to mid-level): What does an applicant tracking system do with your resume?
It stores the file, extracts its text and parses it, copying details such as your name, contact details, jobs and education into the fields of a candidate profile, and it makes the text searchable. Recruiters then search that text for keywords, which in documented systems must match exactly. What rejects an application automatically is usually a rule on the form, such as a required yes or no question, not the layout: a resume that fails to parse stays attached and is filled in by hand. AI features in documented systems sort applicants into match categories, but people make the decisions.
Two module questions take this further:
Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.
-
Fresher to mid
An application form asks, "Do you have at least five years of Java experience?" as a required yes or no question. You have four and a half years. What do you answer, and what else do you do with the application?
Flashcards · 8 cards
Recall it, then check
Say the answer to yourself before you look: recalling it is what makes it stick.
-
What does an applicant tracking system do with an uploaded resume?
It keeps the file, pulls the text out and parses it, copying details such as your name, contacts, jobs and education into profile fields. The text then becomes searchable by recruiters.
-
What happens in Greenhouse when it cannot parse a resume?
Nothing is rejected. The file stays attached to the candidate and someone fills in the profile by hand. Greenhouse also cannot parse a file above 2.5 MB.
-
Which layouts does Greenhouse name as causes of a partial parse?
Spaced-out letters; graphics, photos, word art or a resume uploaded as an image; tables, headers, footers, text boxes and columns, above all with the name or contacts inside them; and sections that are unclearly marked or formatted unevenly.
-
What usually rejects an application automatically?
A rule on the application form. In Greenhouse the employer marks the answer to a yes-or-no or select question that rejects, and anyone who gives it is turned down without a person reading the resume.
-
Will a recruiter's search for PostgreSQL find a resume that only says Postgres?
Not in Greenhouse's talent filtering, where the keyword has to match the application exactly. Write the posting's own name for a skill you really have.
-
Does Greenhouse Talent Matching reject candidates on its own?
No. It sorts applicants into categories such as Strong or Limited against a calibration the hiring team sets, and its documentation says it neither auto-rejects nor auto-advances anyone. Matching more terms does not always lift the category.
-
What do New York City and the EU require of automated hiring tools?
New York City wants a bias audit from within the past year, a public summary of its results and a notice to candidates. The EU classes AI that analyses and filters job applications as high-risk, which brings strict obligations for such systems.
-
Is there a source for the claim that software rejects 75 % of resumes before anyone reads them?
None of the vendor documentation or surveys the lesson checks says anything like it, and people who repeat the figure give no study. Treat it as unsupported until someone shows where it was measured.
Key takeaways
- An applicant tracking system stores your file, extracts and parses its text into profile fields and makes it searchable; a failed parse is not a rejection, but a file with no text cannot be searched.
- Automatic rejection comes from rules on form answers, such as a required yes or no question, so every answer must be accurate.
- Recruiter searches are exact: write the posting’s own name for each skill you have.
- AI ranking in the documented systems sorts and suggests, and more matched terms do not always raise a match.
- New York City requires yearly bias audits of automated hiring tools, the EU treats AI that filters applications as high-risk, and data protection law gives you rights over the data in your resume.
Terms in this lesson
- applicant tracking system
- Software an employer uses to receive applications, store resumes, fill candidate profiles from them, search them and move candidates through the stages of hiring.
- bias audit
- An independent check of whether an automated hiring tool selects or scores people differently by sex, race or ethnicity, which New York City requires before an employer uses such a tool.
- exact match
- A search rule under which a keyword counts only when the same word appears in the text. A synonym, an abbreviation or another spelling does not count.
- knockout question
- An application-form question whose answer can end an application by itself, such as whether you hold a licence or a right to work that the role requires.
- resume parsing
- Reading a resume file with software to copy details such as the name, contact details, jobs and education into the fields of a candidate profile.
References
- Unsuccessful resume parse (Greenhouse Support)
- Auto-reject (Greenhouse Support)
- Talent filtering (Greenhouse Support)
- Talent Matching FAQ (Greenhouse Support)
- How we hire (hiring tips) (Microsoft Careers)
- Hidden Workers: Untapped Talent (Harvard Business School and Accenture)
- Automated employment decision tools (AEDT) (New York City Department of Consumer and Worker Protection)
- Regulation (EU) 2024/1689 (Artificial Intelligence Act), Annex III (EUR-Lex, European Union)
- AI Act: regulatory framework for AI (European Commission)
- Government notifies DPDP Rules to empower citizens and protect privacy (Press Information Bureau, Government of India)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress