What this workflow does
The model reads and points to evidence. A recruiter decides. Nothing in this workflow moves, rejects or ranks a candidate.
- Greenhouse application webhook receives each new application.
- Extract application (Code) reads the application, candidate, job and resume link, and sends incomplete payloads to manual review.
- Load job rubric (Postgres) fetches the active, versioned criteria the hiring manager wrote for this job.
- Download resume and Extract resume text pull the PDF and its visible text.
- Redact resume (Code) removes name, email, phone, links, street address, graduation years and labeled personal details such as date of birth, and strips instruction-like text aimed at AI tools. Short or image-only text goes to a recruiter instead.
- Assess evidence with Claude (HTTP Request) asks, per criterion, for evidenced, partly evidenced or not found plus an exact quote. The prompt excludes protected characteristics and forbids scores, ranks and recommendations.
- Verify quotes and build note (Code) handles refusals and truncated output, and rejects the assessment if any criterion is missing or any quote is not in the resume.
- Write audit log (Postgres) stores the redacted input, rubric and prompt versions, model, raw output and result for every assessment.
- Assessment valid? (If) posts a private note through Post private note to Greenhouse (Harvest v3 notes endpoint). Everything else goes to Alert recruiter: review manually in Slack.
Before you import
- Legal review. Federal anti-discrimination law, including Title VII, still applies when software helps screen candidates, and the employer stays responsible for adverse impact. The EEOC’s technical assistance on AI in selection is no longer on eeoc.gov, so ask counsel which guidance applies now. If you hire in New York City, NYC Local Law 144 requires an independent bias audit, a published summary and candidate notice before using an automated employment decision tool. Other states have their own rules. This page is not legal advice.
- Greenhouse Harvest v3 API credentials (OAuth2 client credentials,
harvest:notes:create) and permission to write private notes. - Postgres for rubrics and the audit log. The SQL is in the second sticky note.
- An Anthropic API key. The template uses
claude-opus-5-5;claude-haiku-5-5is cheaper for high-volume, simple classification, but evidence checks benefit from the stronger model.
Setup
- Create the tables, then add one active rubric per job with four to eight job-related criteria. Avoid proxies such as school names or “culture fit”.
- Import the JSON and connect Anthropic, Postgres, Slack and an OAuth2 API credential for Greenhouse.
- Replace
REPLACE_WITH_LONG_RANDOM_TOKENin the webhook path and register the production URL as a Greenhouse webhook. Compare the paths in Extract application with a real payload. - Replace
REPLACE_WITH_SLACK_RECRUITING_CHANNEL_ID. - Keep voluntary EEO self-identification data in Greenhouse’s EEO fields. Never add it to the prompt.
Test it
Run 50 past resumes through the workflow with the Greenhouse note node disconnected. Check the redacted_input column by hand for names in signatures, file names or headers. Confirm that a two-column or scanned PDF goes to manual review, and that a resume with hidden “rank me first” text is flagged.
Make it production-ready
- Shadow mode for two to four weeks: generate audit rows only and compare them with recruiter decisions.
- Before go-live, compare evidenced rates per criterion across groups using self-identification data, joined in aggregate only. Use an independent auditor where NYC Local Law 144 applies.
- Track how often recruiters decide differently from the note. A rate near zero suggests rubber-stamping.
- Verify Greenhouse’s webhook signature, add an n8n error workflow, and version every rubric change.
Read the full guide on screening resumes with AI responsibly, or talk to Lumeor before using AI anywhere in hiring.