Open Grade
Financial trust scoring platform using Israeli Open Finance APIs (PSD2).
The Problem
When renting an apartment or lending money, there's no easy way to assess someone's financial reliability. Credit scores are opaque and inaccessible to individuals. Open Finance APIs provide real banking data, but nobody has built a consumer-friendly trust scoring tool on top of them.
How It Works
OpenGrade connects to Israeli banks via the Open Finance API (PSD2-compliant). When a client creates a check, the applicant receives an email invitation, verifies their identity via OTP, consents to bank access through an OAuth flow, and their financial data is fetched in real time.
The scoring engine analyzes 7 factors: income stability, balance health, expense discipline, recurring payment consistency, savings behavior, credit utilization, and risk flags. Each factor produces a 0-100 score with explainable contributing factors, aggregated into a traffic-light result (green/yellow/red).
For multi-participant checks (e.g., roommates), the system deduplicates internal transfers between participants using a greedy matching algorithm, then computes pooled scores for shared factors and worst-of scores for risk factors.
Key Challenges
Scoring financial behavior without machine learning or training data
Built a rule-based 7-factor engine with configurable tiers. MCC-based expense categorization uses a priority-ordered fallback: MCC codes → merchant name dictionary (1,200+ entries) → heuristic rules.
Detecting internal transfers between multi-participant accounts
Greedy matching algorithm with 1% amount tolerance and 3-day date tolerance. Matched transfers are excluded from pooled scoring to avoid double-counting.
Processing sensitive financial data while maintaining privacy
Zero-PII architecture: raw transactions are processed in memory and immediately deleted. Only computed scores and factor breakdowns are persisted. GDPR-compliant by design.
Real-time check status updates without polling
Server-Sent Events (SSE) stream check progression (fetching → scoring → complete) to the client dashboard. Lower latency and server load than polling.