← work
data · 2024

LinkedIn Job Scraper

An n8n workflow that polls saved searches, dedupes, enriches, and pushes new postings into a daily digest. Personal tool; ~95% noise reduction over the LinkedIn UI.

rolePersonal project
timespan2024
stackn8npython
statusoperational

Motivation

The LinkedIn job feed surfaces the same postings repeatedly, buries relevant roles under sponsored noise, and offers no way to track which listings you've already seen. A one-hour n8n workflow fixed all three.

What it does

  1. n8n polls 4–5 saved LinkedIn searches on a daily schedule
  2. Raw results are deduped against a Postgres table of seen job IDs
  3. New postings are enriched: company size lookup, keyword extraction from the description, seniority classification
  4. A digest email is assembled with the new roles sorted by relevance score
  5. Seen IDs are written back to Postgres

Relevance scoring

Simple heuristic: each posting gets points for matching keywords (data engineer, kafka, airflow, iceberg, python), loses points for mismatches (react, frontend, sales), and gets a bonus for Beirut/remote locations. Not ML — just a weighted keyword match that took 30 minutes to tune.

Result

From ~80 daily LinkedIn notifications to 3–5 genuinely relevant roles per digest. The noise reduction alone was worth the hour of setup.