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
- Normalize the job description and optional email thread.
- Extract entities and classify stage, urgency, and related fields locally.
- Merge and validate the structured record; optionally fill missing fields with Gemini.
- 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.