Whipped this up today and it's already saved me hours processing 1000+ resumes! It's an AI technical recruiter in n8n (selfhosted, local) to help me screen initial resumes. The purpose is to quickly respond to candidates who are a potentially good fit and screen out resumes that don't fit the role at all (e.g. all Java, no Typescript). It has 3 triggers: - new applicant via job board, which sends me an email with resume attached - new applicant via linkedin, which directs candidates to google form, then resume gets dropped into google drive - manual trigger to bulk process lots of past applicants in my gmail (label: Hiring) Then upload resume to ChatGPT. I make a custom API call to OpenAI RESPONSES endpoint and pass in the file id, so that ChatGPT can analyze the resume and extract the candidate's email address. Finally, ChatGPT returns json with explanation of its decision. You could also return a confidence score, then adjust the threshold. The last step is to send a follow up email to candidate with next steps. Here's the simple ChatGPT prompt - I removed a bunch of scoring criteria, but you'd put them in the "general guidelines" section. GPT 4.1 is probably overkill for this task and you do get niceties like structured JSON output if you stick with 4o family: ``` { "model": "gpt-4.1", "temperature": 0, "input": [ { "role": "user", "content": [ { "type": "input_text", "text": "You are a technical AI recruiting assistant. Analyze the attached resume and decide whether to proceed with an interview for a senior backend engineer with 5+ years of Typescript. Also extract the candidate's email from the resume. General guidelines: 1 2 3 4 5 6. You are welcome to make exceptions to these guidelines if you believe the candidate is exceptionally talented. Return JSON like {\"should_proceed\": false, \"explanation\": \"2 sentence explanation of decision\", \"email_address\": \"
[email protected]\"}." }, { "type": "input_file",