To screen resumes against a job description with AI, start by writing five weighted, job-related criteria. Then give an agent the whole folder of CVs, not one resume at a time, and ask for one sheet back: a row per candidate, a 0–3 score per criterion, and a short quote from the CV behind every score. Pasting resumes into a chat window works for five applicants. At sixty, the rubric drifts, scores come back without evidence, and the results sit in a conversation, not a file you can sort.
This guide covers the full job: the rubric, the batch run, catching people who applied twice, rejection drafts that wait for you, and a Monday summary of weekend applications. It also covers the part most how-to posts skip: NYC Local Law 144, Illinois, the EU AI Act, and what "a human decides" has to mean in practice.
Why does one-resume-at-a-time chat screening break at volume?#
Most ChatGPT screening tutorials show the same workflow. Paste the job description, paste a resume, ask for a fit score, repeat. Some say to add resumes one at a time with the same prompt; others say to work in small batches, because a chat window only takes so much text at once.
That holds for a handful of candidates. With sixty CVs, four things go wrong:
- The rubric drifts. Turn 3 and turn 47 are not scored the same way, and "strong" quietly means something different by the end.
- Scores arrive without evidence. "Communication: 4/5" gives you nothing to check.
- Nothing becomes a sheet. Building the comparison table means copying sixty answers by hand.
- Order effects. When candidates are compared with each other rather than against the criteria, whoever came first sets the bar.
The fix isn't a better prompt. You need a fixed rubric, a batch run that writes to a file, and an evidence requirement you can verify.
How do you screen resumes against a job description with AI? Start with the criteria#
Write the criteria before you open a single CV, and write them from the job, not from the pile. Five is enough. More than seven and each one carries so little weight that scores stop separating candidates.
Each criterion needs three things:
- It is job-related. You could defend it to a candidate and to a regulator. "Five years at a top company" is a proxy. "Has run a customer renewal cycle end to end" is the job.
- It has a weight. The weights are your decision about what matters. The model shouldn't be guessing them.
- It says what counts as evidence at each level. This is the step people skip, and it matters most.
Here is an example for a mid-level Customer Success Manager:
| # | Criterion | Weight | 3 = | 1 = | 0 = |
|---|---|---|---|---|---|
| 1 | Owned a book of accounts | 30% | Named portfolio size or revenue they owned | Supported accounts, ownership unclear | Not evidenced |
| 2 | Renewals and expansion | 25% | A renewal or upsell result they drove | Mentions renewals without their role | Not evidenced |
| 3 | B2B SaaS tooling | 15% | Named CRM/CS platform used day to day | Generic "CRM experience" | Not evidenced |
| 4 | Onboarding or implementation | 15% | Led onboarding for customers | Participated | Not evidenced |
| 5 | Written communication | 15% | Wrote customer-facing material (guides, QBR decks) | Mentions communication as a skill | Not evidenced |
Two rules make this scoreable:
- A score of 0 means "not evidenced," not "doesn't have it." CVs leave things out. A 0 tells you to ask about it in a call. It isn't a verdict.
- Every score above 0 needs a quote, copied word for word from the CV, plus the file name. No quote, no points.
Save the rubric as a file (criteria.md) next to the CVs. Every run then uses the same one, and when the hiring manager asks why someone scored low, you can show them.
How do you batch-score a folder of CVs into a spreadsheet?#
Lay out the folder so inputs and outputs are separate:
csm-hiring/
jd.md
criteria.md
cvs/ # 60 files: PDF and .docx
out/
scores.csv
duplicates.csv
rejections/
Then give the agent one instruction, not sixty:
Read
criteria.md. For every file incvs/, score each of the five criteria 0–3 using only the evidence rules in the rubric. Score each CV on its own. Don't compare candidates. For every score above 0, copy an exact quote from the CV into the matching quote column. Writeout/scores.csvwith one row per file. After scoring, check that every quote appears verbatim in the text of its file, and list any that don't. Report the file count you read, and name any file you couldn't read.
The sheet that comes back has these columns:
| file | c1 | c1_quote | c2 | c2_quote | … | weighted | unreadable |
|---|
A few details make it trustworthy:
- A file count. Sixty files in, sixty rows out, or a named list of what failed. A scanned CV the model couldn't read should show up as a row flagged
unreadable, not a missing row. - Quote verification. The model's typical error here isn't a wrong score. It's a plausible quote that isn't in the document. Checking each quote against the file's text catches it mechanically. Treat any row with a failed quote as unscored until a person reads that CV.
- Scoring columns stay blind. The name and email are there so you can contact people, but they aren't part of the evaluation. Tell the agent not to use name, photo, address, age signals or graduation year when scoring.
- You re-sort; the agent doesn't decide. Sort by weighted score, then read the quotes for the top of the list and for anyone just below your cutoff. The borderline rows are where your judgement matters most.
Spot-check five CVs at random against the rubric yourself. If you disagree on the same criterion twice, its evidence rules are too vague. Fix the rubric and re-run.
How do you find the same person who applied twice under different emails?#
Duplicates happen in a busy pipeline. People apply through a job board and then directly, or use a personal email the second time. Matching on email alone finds nothing. Ask for a second pass:
Compare every pair of CVs. Flag likely duplicates where the name matches loosely (initials, a nickname, a changed surname) AND at least two of these match: phone number, LinkedIn URL, the same employer and dates, the same school and year. Write
out/duplicates.csvwith both files, what matched, and a confidence of high or medium. Don't merge or delete anything.
A matching name alone is not a duplicate: two people called Priya Shah can apply for the same job. And the agent only flags. Which application you keep is your call.
How do you draft rejections without anything being sent?#
Once you have a shortlist, which is your decision and not the sheet's, the rest of the pile needs a reply. Silence is a common complaint from candidates, and a folder of sixty is exactly when it happens.
For every candidate not in
shortlist.csv, write a short, polite rejection addressed to them by first name, referencing the role. Don't mention scores or criteria. Save each one as a file inout/rejections/. Don't send anything.
Keep them generic: "you scored 1 on renewals" invites a debate. Read the recipient list before sending. That's when someone remembers the hiring manager wanted to talk to one of them.
How do you get a Monday summary of the weekend's applications?#
Applications that land on Saturday sit until someone gets to them on Monday. A scheduled run turns that into a short list:
Every Monday at 8am: score any CV added to
cvs/since last Monday usingcriteria.md, append the rows toscores.csv, check the new ones for duplicates against everyone already in the sheet, and write a one-page summary of new applicants with a weighted score of 2.2 or above, with the two strongest quotes for each.
The point is that the rubric doesn't change between weekends. The Monday run scores new candidates exactly as the first batch was scored, so the sheet stays one comparable table for the life of the role. For more on recurring runs over local files, see how to schedule a weekly report with AI that reads your files.
Is AI resume screening legal? Bias, adverse impact, LL144 and the EU AI Act#
This section matters more than any prompt above. It isn't legal advice. Laws differ by where the job and the candidate are, so check your own situation.
Adverse impact comes from criteria, not intent#
Most discrimination in screening comes from criteria that are proxies: graduation year (age), employment gaps (caregiving, disability), specific schools, "culture fit." A model will reward those if the rubric lets it. That's why the rubric above is job-related and evidence-based, and scoring ignores names and dates.
If you have voluntarily collected demographic data, compare pass rates between groups. The US four-fifths rule treats a group's selection rate below 80% of the highest group's rate as a warning sign worth investigating. With sixty applicants the numbers are small and noisy. Treat a gap as a reason to re-read the criteria, not as proof either way.
NYC Local Law 144#
Local Law 144 covers an automated employment decision tool (AEDT) used for hiring or promotion in New York City. A tool is an AEDT if its simplified output (a score, classification or recommendation) "substantially assists or replaces" the decision. Under DCWP's rules, that means the employer:
- relies solely on the output,
- weighs it more than any other criterion, or
- uses it to overrule human judgement.
If you are covered, you need three things:
- An independent bias audit within a year before use.
- A published summary of the audit results.
- Candidate notice at least 10 business days before use.
Penalties are up to $500 for a first violation and $500–$1,500 for each later one, and each day counts separately. A December 2025 New York State Comptroller audit found DCWP's complaint process for these tools "ineffective" and recommended stronger enforcement.
A score sheet a recruiter reads as one input, alongside the quotes and their own reading of the CV, is a different use from auto-rejecting everyone under 2.0. Which side of the line your process sits on is a question for counsel. The design choice you control is keeping the score from becoming the decision.
Illinois#
Since January 1, 2026, the Illinois Human Rights Act (as amended by HB 3773) makes it a civil rights violation to use AI that has a discriminatory effect in hiring, or to use zip codes as a proxy for protected classes. It also requires employers to give notice when they use AI in these decisions. Check the Illinois Department of Human Rights for current guidance on what that notice has to say.
The EU AI Act#
The EU AI Act lists AI used to analyse and filter job applications and to evaluate candidates as high-risk (Annex III). Under the Act as amended by the Digital Omnibus on AI, which entered into force on July 27, 2026, the rules for employment systems apply from December 2, 2027. When they apply, employers using such a system (deployers) need human oversight, must follow the provider's instructions, and must inform the people affected. GDPR already applies to CVs today, so keep a retention period and a lawful basis.
The practical common ground across all three: job-related criteria, evidence behind every score, a person who makes and owns each decision, and telling candidates.
ATS AI vs chat vs an agent working your folder: which should you use?#
As of September 2026, the big applicant tracking systems have their own AI screening. The Workable Agent screens candidates against an ideal candidate profile you set and runs on AI credits: one credit per candidate evaluated, and every paid account starts with 3,000 free. Greenhouse lists Talent Matching, part of its Real Talent features, on its Core plan. It compares each resume against calibration criteria you define, and Greenhouse says it "never advances or rejects candidates for you."
| ATS AI (e.g. Workable Agent, Greenhouse Talent Matching) | Chat (ChatGPT, Claude) | An agent working your folder | |
|---|---|---|---|
| Input | Applications already in the ATS | Pasted or uploaded a few at a time | A folder of CVs, any source |
| Rubric | Configured in the ATS | Re-stated each prompt | A file, reused every run |
| Evidence | The vendor's match explanation | Whatever you ask for, unchecked | Quotes checked against the file |
| Output | Results inside the ATS | Text in a conversation | A sheet you own |
| Duplicates | Varies by product | Manual | A flagged list |
| Recurring runs | Built into the pipeline | None | A schedule |
| Cost | ATS plan, plus AI credits where they apply | Your chat plan | Your model plan; Universe is free to start |
| Best when | You already run hiring through an ATS | A handful of applicants | CVs arrive by email, boards and referrals, and there's no ATS budget |
If you already pay for an ATS with screening built in, and every application flows through it, use it. It sits where your pipeline already lives. The folder approach fits a small agency or an in-house recruiter whose CVs arrive from several places and who wants the rubric, the evidence and the sheet as files they control.
Where Universe fits#
Universe is a Mac app where agents work on your own computer, through the Claude or ChatGPT account you already pay for. That's the folder approach above. You point an agent at csm-hiring/, it reads the CVs and writes out/scores.csv, rows you can sort and filter. Files are files in a folder you can open. The model runs on your own account, so candidate data goes to that model provider under your plan's terms. If you sign in, what syncs to Universe's cloud is what sharing and your other Macs need.
What it gives this job specifically:
- The rubric as a skill. Save the criteria and evidence rules once, and every run uses the same ones.
- A schedule for the Monday run. Schedules run on a Mac, so that Mac needs to be on at eight.
- A space where the hiring manager can see the sheet and ask questions in the same room.
- Drafts wait for you. Sending, paying and posting wait for you. Reading and drafting do not.
What it won't do is make the hiring decision, run a bias audit, or make you compliant with LL144 or the AI Act. Those stay with you and your counsel. It's also Mac only: Apple silicon or Intel, macOS 13 or later.
The recruiting page shows the four asks this post is built around: Universe for recruiting. See everything it does, the plans, or download it. If you're weighing other desktop agents, start with what a desktop AI agent on a Mac actually is.
Questions#
- Can ChatGPT screen resumes?
- It can read a resume and compare it to a job description, and for five applicants that works. At sixty, pasting one resume per turn gets you sixty answers you can't compare: the rubric drifts, scores come back without evidence, and nothing lands in a sheet. Write fixed criteria first and ask for a quote behind every score. Treat the output as notes for a person to review, not a ranking.
- Is AI resume screening legal?
- Generally yes, with conditions that depend on where you hire. NYC Local Law 144 requires a bias audit and candidate notice if an automated tool substantially assists the decision. Illinois has required notice when AI is used in hiring decisions since January 1, 2026. The EU AI Act treats recruitment AI as high-risk, with obligations applying from December 2, 2027. Keep a person deciding, and get advice for your own case.
- How accurate is AI resume screening?
- Accuracy depends on the rubric more than the model. Vague criteria like 'strong communicator' produce confident, inconsistent scores. Specific, evidence-based criteria ('has owned a renewal book of $1M or more') score consistently. The common failure is a quote that isn't actually in the CV. Have the agent check each quote against the file's text, and spot-check a sample of CVs yourself.
- How do I stop AI screening from being biased?
- Score only job-related criteria. Keep names, photos, addresses and graduation years out of the scoring columns. Score each CV on its own, not by comparing candidates, and require evidence for every point. Then check your pass rates by group where you legitimately have voluntary data, using the four-fifths rule as a warning sign. A person reviews every rejection.
- Should AI send rejection emails automatically?
- No. A rejection sent to someone the hiring manager wanted to call is hard to take back. Have the agent draft the rejections and leave them unsent. Read the recipient list, pull anyone you disagree with, and then send them yourself.