A neural network for HR: job posts, candidate emails and resume review
A model can draft job posts and emails and do a first-pass resume review. What to hand over, how to treat candidates' personal data and how to prevent biased decisions.
6 min · · бизнес · автоматизация
A neural network for HR saves time on text routine: job posts, emails, interview questions, first-pass review of a stream of resumes. But this field has two traits absent in marketing or support. First: resumes and forms contain personal data of real people. Second: decisions about people depend on the result, so a model's bias turns into real harm. Below: what to hand a model, how to treat data, how to build resume review so the decision stays with a human, and what it costs.
A neural network for HR: which tasks suit a model
A guide: the fewer the consequences of a mistake and the easier it is to verify the result, the better the task fits.
| Task | Model's role | Risk | How to reduce it |
|---|---|---|---|
| Job post text | writes a draft from your requirements | discriminatory wording | proofreading, a list of banned phrases in the prompt |
| Candidate emails | invitation, interview reschedule, rejection | wrong tone, error in details | a template, manual sending |
| Interview questions | suggests questions for the role's competencies | generic questions | give the job description and level |
| First-pass resume review | matches the resume against criteria | bias, missing a strong candidate | criteria from the job post, quotes, a human decides |
| Onboarding | checklists, FAQ for newcomers | outdated data | the source is your documents |
| Document drafts | job descriptions, regulations | legal inaccuracy | review by a lawyer |
For job posts and emails you do not have to take the most expensive model: start with an inexpensive one and test it on your own examples. How to choose a model by price and strength index is in the article on the model strength index. There is also a separate piece on texts in general: a neural network for writing texts.
Job posts and emails: what to ask for
A good request contains facts, not a plea to "write it nicely": the position, duties, required and desirable requirements, terms, the salary range (if you publish it), work format. Add constraints: "do not mention age, gender or marital status, do not use words like 'young' or 'energetic'". And ask to separate the required from the desirable: it is easier to match resumes against that.
For candidate emails set the tone and structure. A rejection email: thanks, a clear decision without needless detail, no promises like "we will keep your resume" if you will not keep it. A model will prepare a draft of such an email, but send it yourself: automatic rejection mailings sent unread quickly lead to awkward situations.
Candidates' personal data
A resume is a full name, contacts, date of birth, workplaces, sometimes a photo, marital status and an address. Everything you pass to a model in a request goes to the provider's side. Practical rules:
- Pass the minimum. To match against criteria you do not need the name, phone, email and address. Remove them before sending and label the candidate with a number. How to replace data with labels and restore them, we covered in the article on logging without leaking data.
- Do not send extras. A photo, health data, marital status and nationality are not needed to assess skills, and even less in a request.
- Clarify the legal side. Processing candidates' personal data is governed by the personal data law: consents, purposes, storage, transfer to third parties. We do not give legal opinions; discuss questions about passing data to a model API and about where it is stored with the company lawyer before launch.
- A separate key. Create a key for HR: in the dashboard you set a daily and monthly limit on it and a list of allowed models (more about key limits). That way HR spend is visible separately and stays under its ceiling.
- Store results carefully. A model's answer about a specific candidate is also personal data and should live where the resume lives.
Bias: how not to hand the decision to a model
A model is trained on texts that carry human stereotypes. So resume review must be built to leave it no room for a "gut feeling" score.
- Criteria are set in advance and taken from the job post. Do not ask "rate the candidate on a ten-point scale". Ask it to mark each criterion as met, not met or unclear and to give a quote from the resume.
- No protected attributes. Remove the name, gender, age, photo, marital status and nationality before sending to the model.
- The model does not reject. Its output is a summary for the recruiter, not a decision. A human rejects.
- A swap test. Take one resume and send two versions with different names or a different gender. The results per criterion must match. If they do not, you have a problem and such a process cannot be used. Repeat the test whenever you change the model or the prompt.
- Spot audits. Once a month a recruiter manually reviews random resumes that received "not met" and looks for strong candidates who were missed.
Example: a resume summary against criteria
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key=os.environ["ZUKKO_API_KEY"],
)
CRITERIA = [
"At least 3 years of experience with PostgreSQL",
"Experience writing REST APIs in Python",
"Experience leading a project in a team of 3 or more",The quote_found field catches the nastiest failure: an invented quote. If the model cites a phrase that is not in the resume, the result for that criterion cannot be used. The unclear status does not mean "a weak candidate"; it is a signal for the recruiter to look themselves.
What it costs
Prices on October 18, 2026, per 1M tokens. Suppose a stream of 200 resumes. A resume and form take about 1,000 tokens, criteria and instruction about 500, the answer about 250. Input is 200 × 1,500 = 300,000, output 200 × 250 = 50,000.
gpt-6.1-sol(input $0.27, output $1.32): 300,000 × 0.27 / 1,000,000 + 50,000 × 1.32 / 1,000,000 = 0.081 + 0.066 = $0.147.claude-sonnet-5-5($0.4 / $2): 0.12 + 0.10 = $0.22.deepseek-v4.1-flash($0.013 / $0.038): 0.0039 + 0.0019 ≈ $0.006.
That is the cost of a run over 200 resumes. The model price is secondary here: what matters is that the process is verifiable. If you rerun the same resumes with the same criteria, turn on the response cache with the X-Zukko-Cache: true header: an identical request within 7 days is served from the cache and not charged. Current prices: GET https://api.zukko.pro/v1/models.
FAQ
Can a neural network be trusted to select candidates?
Not as the final decision. A model is good for a summary against set criteria, and the decision must be made by a person who can explain it to the candidate.
Which model for HR tasks?
For emails and job posts you can start with claude-sonnet-5-5 or gpt-6.1-sol and check the result on your own texts. For first-pass review compare two or three models on 20 resumes and check the stability of the result, including with the name-swap test.
How do I avoid sending personal data to a model?
Remove names, contacts and addresses before sending and label the candidate with a number. If former employers' names and job titles remain in the text, that is context that may identify a person too: decide whether the task needs it.
How do I connect from Russia?
Access from Russia goes through the gateway, payment by SBP, a MasterCard card or crypto. The key is created in the Zukko dashboard.
zukko
Pay 25×
less
for Claude Code & ChatGPT
One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.
Related articles
- AI for testers: test cases, checklists and bug reportsHow a QA engineer can use a model for test cases, checklists and bug reports, check coverage, and avoid requirements the model made up.
- Anonymizing data before sending it to a neural network: a practical wayYou do not have to send personal data to a model for it to process a document. How to replace it with labels, restore it in the answer and check that nothing leaked.
- Generating an FAQ with a neural network from tickets and a knowledge baseA good FAQ is built on what customers really ask. A pipeline: group the tickets, answer from the knowledge base with a source reference, and verify the result.
- Website copy with AI: homepage, services and FAQ without fillerAI writes smoothly but does not know your business. How to build a brief with facts, get page structure, edit the result before publishing, and what it costs.