Using LLMs to flag CV inconsistencies without hallucinations
Grounding rules that keep LLM red-flag detection honest: extract first, quote conflicting lines verbatim, and treat every flag as a question for a recruiter.
On this page
The reliable way to use a large language model to spot CV inconsistencies is not to paste in the document and ask what looks suspicious. It is to extract structured data first and check the extraction, to require a verbatim quote of the exact lines that conflict before anything counts as a flag, and to hand every flag to a recruiter as a question rather than a verdict. A model that cannot quote the contradiction has not found one. And no flag, however confident it sounds, should ever reject a candidate on its own.
Why do LLMs invent red flags?
Because you ask them to. Pose the question “what looks suspicious in this CV?” and the model will deliver suspicions, since the framing implies they exist and the model is trained to be helpful. It pattern-matches against every red-flag trope it absorbed in training: gaps, short stints, vague titles. Some of what comes back is real. Some is manufactured to satisfy the prompt.
The failures come in two flavours. Invention: the model reports an overlap or a contradiction that simply is not in the text. Drift: the model paraphrases the CV, then judges its own paraphrase, turning “supported the migration project” into “claims to have led a migration” and flagging the inflation it introduced itself. Both are hallucinations, and both survive a casual read because the output sounds precise.
Neither failure is fixed by a better model. They are fixed by a better pipeline, one that removes the opportunity to confabulate.
Why extract first, then check?
Throwing raw text at a model asks it to do three jobs in one pass: parse, compare, and judge. Each job adds error, and the errors compound. Split them.
First, parse the CV into structured fields: employers, titles, start and end dates, education, the claims made in the summary. That step is well understood, and we cover how to make it dependable in LLM resume parsing into structured data.
Once dates are actual dates, the overlapping-dates check is arithmetic, not interpretation. Run it in code: two full-time roles sharing four months is a fact you compute, never something you ask a model to notice. The same goes for timeline gaps and education dates that sit inside an employment block.
What remains for the LLM is the part that genuinely needs language understanding: whether the summary claims experience the work history cannot support, whether “Head of Platform Engineering” squares with the two-person company described one line later, whether the same project appears under two different employers. Narrow questions over verified fields leave far less room to hallucinate than one broad question over raw text.
What does a grounded prompt look like?
The core move is a quoting requirement. Whatever the model flags, it must reproduce the exact conflicting lines, verbatim. A pattern that works:
You receive a CV parsed into structured fields (employers, titles,
start and end dates) plus the raw text it came from.
Rules:
1. Compare only what is inside this document. Use no outside
knowledge and make no assumptions about employers or industries.
2. For every inconsistency, quote the exact lines that conflict,
word for word, naming the section each quote comes from.
3. No quotable conflict, no flag. "Seems unusual" is not a finding.
4. Phrase each flag as a question a recruiter could ask the
candidate in a screening call, not as a conclusion about honesty.
5. If nothing conflicts, return an empty list. That is a valid
result.
Rule 2 is the hallucination filter, and it is mechanically checkable: string-match every quote against the source document and discard any flag whose quotes do not appear. An invented conflict cannot survive that check, because the invented lines do not exist. Rule 5 matters more than it looks; a model that is not explicitly allowed to find nothing will manufacture something.
Which inconsistencies are worth flagging?
Four patterns cover most of what a grounded checker catches, and each one maps to a question rather than an accusation:
| Pattern | What the model must quote | The screening question |
|---|---|---|
| Overlapping dates | Both date lines, from both roles | Were these concurrent, for example freelance work alongside employment? |
| Title inflation | The title and the scope description that undercuts it | What did the role actually cover day to day? |
| Claim vs history mismatch | The summary claim and the timeline that cannot support it | Where does the missing experience come from? |
| Credential timing | The education dates and the employment block they collide with | Was the degree part-time or completed alongside work? |
This is the same territory as the manual checks experienced recruiters already run, which we list in CV red flags recruiters should check. The model does not replace that checklist; it runs the first pass at volume and arrives with line numbers.
Why must flags stay questions, not verdicts?
Because most flags are innocent. Overlapping dates usually mean freelancing, a notice period, or an acquisition that renamed the company mid-tenure. A grand title at a tiny company is often the employer’s naming, not the candidate’s vanity, and internal titles regularly differ from what HR prints. A model can prove that two lines of text conflict; it cannot prove that anyone lied, because it sees the document and not the world.
There is also a fairness problem with treating flags as scores. Inconsistency flags land disproportionately on non-linear careers: people who freelanced between jobs, changed countries and translated their titles, or took caregiving breaks. Pipe flags into a ranking and you have quietly built a penalty for unconventional paths, the exact failure mode you would hunt for when auditing AI candidate scoring for bias.
And the legal line is bright. GDPR gives candidates the right not to be subject to purely automated decisions with significant effects; an auto-rejection on a model flag is precisely that. The EU AI Act classifies hiring AI as high-risk and attaches human oversight duties. Judgement calls about people belong on the list of recruitment tasks that should stay human, and a flag is an agenda item for the screening call, nothing more.
Where does Recruitifly fit?
Recruitifly’s assistant, Fly, is built on the extract-first half of this argument: it parses CVs into structured profiles, so checks like the ones above run against fields rather than vibes. The treat-as-questions half is structural too. Every write Fly performs is propose-then-confirm; it can score, rank, and compare candidates against a job, but it never rejects, advances, or contacts anyone on its own. A surfaced concern arrives as something for you to weigh alongside the evidence, and the decision waits for a human click. We think that is the correct design for hiring software, not a limitation to apologise for.
Recruitifly is in private beta. If you would rather see grounded screening on your own CVs than take our word for it, talk to us; paid tiers carry a 7-day free trial.
Frequently asked questions
Can an LLM reliably detect lies on a CV?
No. An LLM can only detect internal inconsistencies: two passages in the same document that cannot both be true, such as overlapping full-time dates or a summary claiming more years than the history shows. It cannot verify anything against the outside world, so it cannot tell a lie from a typo or an unusual but honest career. Its output should be screening questions, with verification left to references and conversation.
What does grounding mean in CV screening?
Grounding means every claim the model makes must be traceable to specific text in the source document. In practice: parse the CV into structured fields first, run deterministic checks like date arithmetic in code, and require the model to quote the exact conflicting lines verbatim for anything it flags. Quotes can be string-matched against the original, so an invented flag fails automatically instead of reaching a recruiter.
Should a CV red flag ever trigger automatic rejection?
No. Under GDPR, candidates have the right not to be subject to purely automated decisions with significant effects, and rejection is exactly such a decision. The EU AI Act classifies hiring AI as high-risk, which requires human oversight. Beyond the law, flags are frequently wrong in spirit: overlapping dates often mean freelancing, and inflated-looking titles often reflect an employer's naming. A flag should open a conversation, never close a file.
What are the most common false-positive CV flags?
Overlapping employment dates caused by freelancing, notice periods, or an acquisition that renamed the employer mid-tenure. Title mismatches from internal job titles that differ from external ones, or from translation out of another language. Gaps explained by caregiving, study, or relocation. Each looks like an inconsistency on paper and dissolves in a thirty-second conversation, which is the strongest argument for treating flags as questions.
Recruitifly Editorial
Editorial
Related reading
Adding LLM screening to your ATS without creating duplicate records
Layer LLM screening over your ATS without splitting your candidate data: one source of truth, stable ID sync, scores written back as fields, not copies.
Sourcing with adjacent job titles and skills
Searching one job title misses most of the market. A worked SRE example plus a repeatable method for mapping adjacent titles and skills for any role.
AI Act candidate disclosure: notice template
What to tell applicants when automated screening is used, under the EU AI Act and GDPR Articles 13, 14 and 22, plus a copy-paste disclosure notice template.
Want to see how this looks on your own data?
No hard promises. Just a straight conversation about exports, stages, and your current stack.
Contact us