Quick overview
This workflow watches a Slack channel for shared LinkedIn profile screenshots or PDFs, uses easybits Extractor to convert the file into structured candidate fields, deduplicates against a Google Sheets candidate database, and replies in the original Slack thread with either a confirmation or a duplicate warning.
How it works
- Triggers when a file is shared in a specified Slack channel.
- Retrieves full Slack file metadata and downloads the file using the private download URL.
- Sends the downloaded LinkedIn screenshot or PDF to easybits Extractor to extract structured profile fields.
- Normalizes the extracted data into a consistent candidate schema, adds a source tag, and timestamps when the candidate was added.
- Reads the existing Google Sheets candidate list and checks for duplicates using a normalized key of candidate name plus current company.
- If a duplicate is found, posts a warning reply in the same Slack thread and does not write to Google Sheets.
- If no duplicate is found, appends the candidate as a new row in Google Sheets and posts a confirmation reply with a link to the sheet.
Setup
- Connect Slack credentials with permission to read shared files and post messages, and select the Slack channel to watch in the trigger.
- Connect your easybits Extractor API credentials (and install
@easybits/n8n-nodes-extractor if you are self-hosting).
- Connect Google Sheets OAuth2 credentials and set the spreadsheet document ID and sheet/tab name for both the read and append steps.
- Ensure your Google Sheet has headers matching the workflow fields (for example: name, current_title, current_company, location, total_years_experience, top_skills, last_roles, education, certifications, summary, source, added_at).
- Update the “Open candidate sheet” button URL in the Slack messages to point to your actual Google Sheets document.