Case study
BitzeOOP — judicial-appointments analytics
[01] batu@batu0:~/case-studies/bitzeoop
BitzeOOP is the project that bridges the two halves of my career. I started it as an investigative journalist with Python — scraping, parsing, and normalizing Turkish judicial-appointment gazettes so I could see patterns across 13 years. By 2023 it had become a contract deliverable for EuroMed Rights, feeding two published investigative reports on the state of the Turkish judiciary. By 2024 it was the first engineering contract I won on the strength of investigative-journalism-era tooling.
The problem
Turkey publishes judicial appointments in gazettes — messy PDFs, inconsistent CSVs — with no public person-level career history. Tracing a judge’s movements across 13 years requires parsing thousands of appointments across hundreds of documents, matching names across variations, and handling the ambiguous rows by hand. Doing it once is hard enough; doing it reproducibly, so the dataset can drive subsequent stories and reports, is an engineering problem.
What I built
A Python pipeline that turns the raw gazette corpus into an analyzable graph.
Ingestion
PDF and CSV parsing across Camelot, PDFPlumber, and PyPDF2, with per-document confidence scores. Source files organized by date and institution so the same pipeline can be rerun when a new gazette drops.
Normalization & data-quality workflows
Deduplication, problematic-row flagging, and manual-review queues for ambiguous records — because Turkish names transliterate inconsistently and judicial titles shift across institutional reforms. Output: a clean person-level career history dataset.
Neo4j graph model
People, posts, appointments, locations — modeled as nodes and relationships. Queries I can run: every judge who passed through a given courthouse; every transition between two specific posts; career trajectories that deviate from the median. The graph shape is what makes the “follow the judges” investigative question tractable.
Analyses layered on top
Transition analysis, anomaly detection, and visualization workflows for judicial career movements. The outputs informed two EuroMed Rights investigative reports and a subsequent EuroMed contract in which I extended the same pipeline to feed their judicial-independence research programme.
Stack
Python · Pandas · NumPy · Neo4j · Camelot · PDFPlumber · PyPDF2 · Git.
Scale & outcomes
- 60,000+ Turkish judicial appointments parsed, normalized, and graph-modeled across 13 years.
- 2 published EuroMed Rights investigative reports used the resulting dataset.
- The engagement pipeline: project started as journalism tooling → surfaced as an analytical dataset → became a contract deliverable → became the foundation for a subsequent paid data- engineering contract.
- Demonstrated that investigative instincts and engineering discipline are the same skill in different registers.