Skip to content
Columbia MSDS Dec 2026
Resume
All projects

Structured Extraction · Workflow Automation

Job Tracker

Extract job descriptions and recruiter emails into validated records with local NLP, duplicate checks, and optional Notion synchronization.

  • Python
  • spaCy
  • Streamlit
  • Pydantic
  • Notion API
  • Gemini
  • Docling

What I built

Local extraction first; an optional Gemini fallback fills incomplete fields.

  • Built ingest, split, extract, classify, merge, validate, and sync stages with regex, spaCy, and Pydantic.
  • Support plain text, URLs through trafilatura, and PDFs through Docling, with local completeness scoring before optional generation.
  • Deduplicate Notion records using exact hashes and fuzzy company/role matching; preserve locked records except for appended notes.

How it works

  1. Normalize the job description and optional email thread.
  2. Extract entities and classify stage, urgency, and related fields locally.
  3. Merge and validate the structured record; optionally fill missing fields with Gemini.
  4. Check for duplicates and synchronize to a user-configured Notion database.

Evaluation & evidence

Validation and completeness gates make missing fields explicit. Fuzzy-match thresholds are implementation choices, not measured extraction-accuracy results.

Scope & limitations

Notion sync and optional Gemini requests require connectivity and credentials. The local extraction path can operate independently.

Inspect the details

Discuss this project