Recrutei + OpenAI: searchable CV notes, no rework
CVs arrive. Names get copied. Vacancies get mis-selected. Then someone spends their afternoon fixing a pile of “almost right” candidate records that should’ve been clean from the start.
This is where recruiters lose time, honestly. HR managers feel it when pipelines get messy and reporting stops making sense. And if you run a small agency, you can’t afford rework. This Recrutei OpenAI automation routes applicants to the right vacancy and turns the PDF resume into searchable notes inside your ATS.
Below you’ll see how the workflow runs, what it changes day-to-day, and what you need to implement it without turning your hiring process into a tech project.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Recrutei + OpenAI: searchable CV notes, no rework
flowchart LR
subgraph sg0["On Form Submission Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>On Form Submission"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Create Prospect in Recrutei"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Pipe Stages"]
n3@{ icon: "mdi:robot", form: "rounded", label: "Get Vacancy ID from AI", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Vacancy ID", pos: "b", h: 48 }
n5@{ icon: "mdi:wrench", form: "rounded", label: "Recrutei's MCP", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Add Curriculum as Observation"]
n7@{ icon: "mdi:cog", form: "rounded", label: "Extract Text from PDF Resume", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Candidate Data"]
n5 -.-> n3
n4 --> n2
n2 --> n1
n0 --> n3
n0 --> n8
n8 --> n7
n3 --> n4
n1 --> n8
n7 --> n6
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n3 ai
class n5 ai
class n1,n2,n6 api
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n6,n8 customIcon
The Challenge: CV intake that creates rework
Most “Apply Now” funnels look simple until you’re the person cleaning up the output. Candidates type a vacancy name that doesn’t match what’s in your ATS. Someone picks the wrong opening because two job titles sound similar. The resume sits in a file field, so you can’t search it later, and the same CV gets opened and reread again and again. It’s not just slow. It’s mentally noisy, and small mistakes compound when you have multiple roles open at once.
It adds up fast. Here’s where it breaks down in real teams.
- Applicants select “Javascript Developer” while your ATS uses “Front-end Engineer,” so the candidate lands in the wrong vacancy or gets stuck waiting for manual triage.
- Someone has to fetch pipe stages, choose the right first stage, and create a prospect by hand, which is easy to do wrong when you’re rushing.
- Resume content stays trapped in a PDF upload, which means you can’t search for “React,” “Spanish,” or “B2B SaaS” inside Recrutei when you need a quick shortlist.
- When the ATS record is incomplete, the team fills the gaps in Slack, email, and spreadsheets, and nobody trusts the pipeline view anymore.
The Fix: form-to-Recrutei intake with AI vacancy matching
This workflow turns your application form into a clean, consistent intake channel for Recrutei. A candidate submits an n8n form with their contact details, the vacancy name they chose, and a PDF resume. OpenAI then helps map that human-friendly vacancy label to the exact vacancy_id Recrutei expects, so you aren’t relying on someone to guess correctly. Once the workflow has the right vacancy, it fetches the pipe stages for that role, creates the prospect in the first available stage, and merges everything back together so the resume is still attached to the same candidate. Finally, it extracts the text from the PDF and posts it into the candidate profile as an internal observation, making the resume searchable right inside Recrutei.
The workflow starts at the form submission, then AI resolves the correct vacancy ID, and Recrutei receives a properly staged prospect. After that, the PDF is parsed and the CV text is saved as a note, so search works the way recruiters expect it to.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you receive 20 applications a week across 4 open roles. Manually, it’s common to spend about 10 minutes per application finding the right vacancy, creating the prospect, choosing the stage, and adding a quick resume note (that’s roughly 3 hours a week). With this workflow, the submission takes the candidate a minute, and your team mostly just reviews what’s already in Recrutei. You get those hours back, and the “wrong vacancy” problem largely disappears.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Recrutei to create prospects and attach observations.
- OpenAI to match vacancy name to vacancy_id.
- Recrutei API key (get it from Recrutei token docs/admin).
Skill level: Intermediate. You’ll connect accounts, add API credentials, and test with a real PDF resume.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Application submission triggers the run. A candidate completes your n8n form with name, email, phone, the vacancy name they chose, and a PDF resume.
AI resolves the vacancy_id. The vacancy name from the form is sent to an AI Agent powered by OpenAI, which uses a Recrutei MCP tool connection to find the official vacancy ID your ATS expects.
Recrutei prospect creation happens with the right stage. The workflow fetches pipe stages for that vacancy, then creates the prospect via the Recrutei API using the first available stage so the candidate appears in the correct pipeline immediately.
The resume becomes searchable inside the ATS. n8n extracts text from the PDF and posts it back to the candidate profile as an internal observation (note), so recruiters can search and filter using real CV content.
You can easily modify the form fields and the AI matching prompt to fit your naming conventions and screening rules based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the intake form that starts the workflow and captures candidate details.
- Open Form Intake Trigger and set Form Title to
Job Application Form. - Set Form Description to
Apply for the job of your choice.. - Confirm the form fields match the workflow: Full Name, Email, Phone, Vacancy (dropdown), and Resume (file).
- Verify the submit button text under Options is
Submitand the success message isYour application has been successfully submitted..
Form Intake Trigger outputs to both AI Vacancy Lookup and Combine Applicant Data in parallel.
Step 2: Connect Recrutei API Requests
Configure the Recrutei HTTP requests to fetch pipeline data and create the prospect record.
- In Retrieve Pipe Stages, set URL to
=https://api.recrutei.com.br/api/v1/vacancies/{{ $json.id }}/pipesand keep Send Headers enabled. - In Retrieve Pipe Stages headers, replace
Bearer [CONFIGURE_YOUR_TOKEN]with your Recrutei API token. - In Create Recrutei Prospect, set URL to
https://api.recrutei.com.br/api/v2/prospects, Method toPOST, and Content Type tomultipart-form-data. - Map body parameters in Create Recrutei Prospect exactly as shown: name
={{ $('Form Intake Trigger').item.json['Full Name'] }}, pipe_stage_id={{ $json.id }}, vacancy_id={{ $('Assign Vacancy Identifier').item.json.id }}, email={{ $('Form Intake Trigger').item.json.Email }}, telephone={{ $('Form Intake Trigger').item.json.Phone }}, and prospect_acquisition_channel_id8. - In Create Recrutei Prospect headers, replace
Bearer [CONFIGURE_YOUR_TOKEN]with your Recrutei API token and keepContent-Typeasmultipart/form-data.
Bearer [CONFIGURE_YOUR_TOKEN] unchanged will cause authorization failures in Retrieve Pipe Stages, Create Recrutei Prospect, and Attach Resume Observation.Step 3: Set Up AI Vacancy Matching
Configure the AI model to translate the applicant’s vacancy selection into a Recrutei vacancy ID.
- Open AI Vacancy Lookup and confirm Model is
gpt-4.1-mini. - Set the user message content to
=Vacancy: {{ $json.Vacancy }}. - Keep the system message text exactly as provided so the model returns only the vacancy ID.
- In Assign Vacancy Identifier, set the assignment id to
={{ $json.message.content }}with typenumber. - Configure Recrutei MCP Client with your MCP endpoint: set Endpoint URL to your value instead of
YOUR_MCP_ENDPOINT_URL_HERE.
Credential Required: Connect your OpenAI credentials in AI Vacancy Lookup. The Recrutei MCP Client is an AI tool sub-node connected to AI Vacancy Lookup, so credentials should be added to the parent node.
Step 4: Merge Applicant Data and Parse the Resume
Combine the form submission with the created prospect and extract text from the resume file.
- In Combine Applicant Data, set Mode to
chooseBranchand Use Data Of Input to2so it uses the prospect creation output. - Configure Parse Resume PDF with Operation set to
pdfand Binary Property Name set toResume.
Step 5: Add the Resume Observation to Recrutei
Send the extracted resume text to Recrutei as a talent observation linked to the application.
- In Attach Resume Observation, set URL to
https://api.recrutei.com.br/api/v1/talents-observationsand Method toPOST. - Set Content Type to
multipart-form-dataand enable Send Headers. - Map body parameters: application_id
={{ $('Create Recrutei Prospect').first().json.data.application.id }}, talent_id={{ $('Create Recrutei Prospect').first().json.data.talent.id }}, talent_observation_type_id11, and description={{ $json.text }}. - Replace the Authorization header value
Bearer [CONFIGURE_YOUR_TOKEN]with your Recrutei API token.
$json.text, and Attach Resume Observation will send an empty description.Step 6: Test and Activate Your Workflow
Run a full test to validate AI matching, Recrutei creation, and resume parsing before enabling production use.
- Click Execute Workflow and submit a test entry via Form Intake Trigger with a PDF resume and a valid vacancy selection.
- Verify AI Vacancy Lookup returns a numeric ID and Assign Vacancy Identifier sets id correctly.
- Confirm Retrieve Pipe Stages and Create Recrutei Prospect return successful responses from Recrutei.
- Check that Attach Resume Observation creates an observation containing parsed resume text.
- When satisfied, toggle the workflow to Active so it runs on every new form submission.
Watch Out For
- Recrutei credentials can expire or need specific permissions. If things break, check the Authorization bearer token in your n8n credential and confirm the Recrutei API access still works.
- PDF resumes aren’t always clean text. Some are scanned images, which means extraction can return very little. If your notes look empty, test with a different PDF and consider adding OCR upstream.
- OpenAI vacancy matching depends on naming consistency. If your team renames vacancies often, update the system prompt (and confirm the MCP endpoint URL) so the AI keeps mapping to the right vacancy_id.
Common Questions
About an hour if your Recrutei API access is ready.
Yes, but someone needs to be comfortable pasting API keys and testing a few real submissions. No coding, just careful setup.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually a few cents per batch of applications.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start with the AI Vacancy Lookup prompt, because that’s where your naming quirks show up. You can tighten matching by adding examples of “messy” vacancy names your candidates use, plus the exact titles that exist in Recrutei. If your process needs a different starting stage, swap the “first available pipe stage” logic in the Retrieve Pipe Stages and Create Recrutei Prospect steps. Many teams also add extra form fields (location, salary expectation, portfolio URL) and merge them into the prospect payload.
Usually it’s an expired or wrong bearer token in the n8n credential used by the HTTP Request nodes. Update the Authorization header, then retest the “Retrieve Pipe Stages” call first since it’s the quickest signal. If that works, check that your MCP endpoint URL is correct and reachable. Rate limits can also show up when you test with a burst of submissions, so space out runs during troubleshooting.
On n8n Cloud, capacity depends on your plan’s monthly executions; Starter covers a typical small hiring team, and you can move up as volume grows. If you self-host, there’s no execution limit from n8n itself, but your server and the Recrutei/OpenAI APIs become the practical bottlenecks. In real use, this workflow is fine for day-to-day inbound applications, even with multiple roles open at once. If you’re processing hundreds of CVs in a short window, add queueing and retry logic.
Often, yes. This workflow leans on AI + a tool call (the MCP client) and multi-step API handling, which is doable in Zapier/Make but tends to get clunky and expensive as you add logic. n8n also gives you a clean self-hosting path, which matters if you want predictable costs at higher volume. If your intake is truly simple (one form, one “create record” action), Zapier can be faster to set up. But for vacancy matching plus PDF text extraction, n8n is usually the more comfortable long-term choice. If you want a second opinion, Talk to an automation expert and we’ll sanity-check your stack.
Once this is running, your ATS starts feeling dependable again. The workflow handles the repetitive intake work, and your team can stay focused on interviewing and decisions.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.