
My friend's recruiter was drowning in CVs of every format – I built her a Slack assistant that summarizes them on the spot (n8n template)
👋 Hey VibeCoders Community,
You might remember Mike – friend of mine who runs a small company. Most of the automations I've built over the last months have been for him and his finance colleague Sarah (duplicate invoice detector, Slack approvals, invoice classification, the whole thing).
This time it wasn't a finance problem. Mike called me last week because the company's going through a bigger hiring phase right now, and he has exactly one recruiter – let's call her Lisa – who's drowning.
The problem:
Lisa goes through dozens of CVs every day. The annoying part isn't reading them – it's that every single CV looks different. Different layouts, different sections, different orders. Some are PDFs, some are screenshots, some are exports from LinkedIn. Lisa already knows exactly what she cares about for the first-pass screen:
- Last 3 roles
- Last 3 educations
- Top 3 skills
- Location
- Years of experience
- LinkedIn link (if she wants to dig deeper)
But to extract those 6 things from a CV that's structured however the candidate felt like structuring it, she has to read the whole thing every time. Multiply by 30 a day. That's hours.
Mike asked: "Can you build her something that just shows her those 6 things, in the same format, every time?"
The build:
I wanted Lisa to be able to use this from where she already works – which is mostly Slack. So the flow ended up being:
- Lisa drops a CV (PDF, PNG, or JPG) into a dedicated Slack channel
- Bot picks it up, runs it through the easybits Extractor with 8 structured fields
- Bot posts a clean summary back in the thread within ~5 seconds: name, location, years of experience, top 3 skills, last 3 roles with dates, education, salary expectations (if mentioned), LinkedIn
- Below the summary, an action card with two buttons: 💾 Save to Sheet or Dismiss
- Save → appends a row to a Google Sheet with all the fields split into discrete columns (sortable, filterable). Dismiss → just removes the card
The Sheet is a placeholder for now – Mike's actually still in talks with different ATS providers, so once they pick one I'll just swap the Sheets node for whatever API the ATS exposes. Same workflow shape, different endpoint.
What ended up being harder than I expected:
I had to split this into two workflows. Workflow A handles the trigger and posts the summary + card. Workflow B catches button clicks from the card and does the Sheet append. Same pattern as the Slack invoice approval I shared a while back — Slack interactivity needs its own webhook endpoint, and you can't have both a trigger and a webhook listener in the same workflow without conflicts.
The other annoying gotcha: the n8n Slack node has a bug right now where Block Kit payloads sometimes just don't render – you get the fallback text only ("Action menu") with no buttons. Worked around it by posting the action card via a direct HTTP call to chat.postMessage instead of using the Slack node. Documented this in the sticky notes so anyone running into it knows the fix.
Why CV screening fits extraction so well:
The interesting thing here is that this is exactly the kind of task that has historically been done with custom CV parsers or expensive ATS resume-parsing add-ons. But once you treat a CV as just another structured document, the easybits Extractor handles it the same way it handles invoices or contracts. 8 fields, description per field, return null when not present – same pattern I've been using all year.
The whole thing runs on the free plan since it's under 10 fields.
The templates:
- Workflow A (lookup): https://github.com/felix-sattler-easybits/n8n-workflows/blob/a8138f54ec6b225b7e90e2a66b4491c746767214/easybits-cv-slack-assistant/easybits_cv_slack_assistant_instant_summary.json
- Workflow B (save action): https://github.com/felix-sattler-easybits/n8n-workflows/blob/a8138f54ec6b225b7e90e2a66b4491c746767214/easybits-cv-slack-assistant/easybits_cv_slack_assistant_save_to_sheet_and_card_actions.json
Sticky notes cover the full setup – Slack app config, scopes, credentials, Sheet schema. Both workflows together take about 20 min to wire up if you've done a Slack integration before.
Curious if anyone else has built recruiter tooling in n8n – would love to hear what fields you found most useful, or if you've gone deeper into ATS integration than I have so far.
Best,
Felix