Free n8n flow

AI candidate matcher: single role

This workflow collects public job listings, asks Claude to score them against one candidate profile, and emails the listings that clear a score. The workflow name in the file is AI candidate matcher: single role. It matches listings. It does not offer a role, a placement, or an interview. It is free. There is no form on this page. You import it into your own n8n and run it there.

The flow file and setup help are in #freebies on our Discord.

How it works

Two schedules, plus an error branch. They do not depend on each other.

Every 3 hours, it collects listings

Every 3 Hours Trigger starts Set Search Queries. The query in the file is YOUR ROLE KEYWORD until you replace it. From there it fetches three feeds:

  • Company boards on Greenhouse, Lever, and Ashby. Curate ATS Board List already names public boards such as Stripe, HubSpot, Klaviyo, Airbnb, Databricks, Meesho, Gopuff, Notion, and OpenAI. No key.
  • Adzuna, India search (/jobs/in/), using your app id and key. Change the country in that URL if India is the wrong one.
  • RemoteOK's public feed. No key.

Merge Job Sources joins them. Normalize and Deduplicate Jobs drops listings older than 90 days and keeps one row per id. Upsert Jobs to Pool writes the Supabase jobs table.

Every day at 08:00, it scores one profile

Daily Morning Trigger uses cron 0 8 * * *, which is 08:00 on your n8n clock. Set Role Configuration holds a single profile: an id (role-1), an email ([email protected]), a function keyword, locations, min_score of 75, and a profile paragraph you rewrite. Nothing personal is baked in.

Fetch Pool Shortlist takes up to 15 fresh listings whose title matches the function keyword. Get Already Matched IDs drops listings already stored for this role. Create Scoring Batches sends what remains to Claude (claude-haiku-4-5) through $env.ANTHROPIC_API_KEY, 20 at a time. With a shortlist of 15, that is usually one call. Filter Scored Jobs keeps listings at or above min_score. Save Job Matches writes user_job_matches. Send Email Digest sends the score, title, company, location, link, and fit line through Resend.

If a run fails, it can email you

Error Trigger formats the workflow name, the node, the message, and an execution link, then Send Alert Notification posts it through Resend. Wire this workflow as its own error workflow in n8n settings if you want that branch to fire.

What you need

  • Supabase. YOUR_SUPABASE_URL and YOUR_SUPABASE_SERVICE_ROLE_KEY. The service role key skips row security, so keep it in n8n. You need a jobs table and a user_job_matches table. The notes in the file name the columns.
  • Adzuna. App id and app key on the Adzuna request.
  • Anthropic. ANTHROPIC_API_KEY. The Claude node reads $env.ANTHROPIC_API_KEY.
  • Resend. YOUR_RESEND_API_KEY, a from address, the profile email, and YOUR_ALERT_EMAIL for the error branch.

Greenhouse, Lever, Ashby, and RemoteOK need no account. Replace every placeholder before you turn the workflow on.

This file reads secrets with $env. n8n 2.x blocks that by default. If a node stops with an env access error, use the n8n env access fix.

How to use it

Four steps. The file in #freebies is rup-candidate-matcher.json.

1

Get the file

Join Discord and open #freebies. The flow file and setup help are there.

2

Import into n8n

In n8n, use Import from File and pick the JSON from #freebies.

3

Connect what it asks for

Create the Supabase tables, paste the Supabase, Adzuna, and Resend values, set ANTHROPIC_API_KEY, and rewrite Set Role Configuration and the search keyword.

4

Run it

Run the daily branch from Daily Morning Trigger. You should get a digest of listings that cleared the score, or no mail if nothing did.

Questions

Does this get someone hired?

No. It matches public job listings to one profile and emails the ones that clear a score. It does not submit applications.

How is this different from the multi-person job matcher?

This file scores one profile stored in Set Role Configuration. The job matcher flow loops people stored in a job_seekers table. Use this one when you have a single candidate to run each morning.

What score gets emailed?

Listings at or above min_score. The file sets that to 75. Change it on Set Role Configuration.

Which country does Adzuna search?

The URL is Adzuna's India search, /jobs/in/. Change the country code in that URL if you need a different market.

A small note

Goat O Mate is a community of builders shipping marketing and AI automations together.

Join Discord