OpenGrade

One bank connection.
Verified identity, scored trust.

A privacy-first layer on Israeli Open Finance: a consented bank login proves a real person — then scores their financial trust. We store nothing.

Real-person verification 0–100 trust score Zero data stored
Amit ZamirBackend & Architecture
Noa ElmakiesProblem & Market
May GurevichProduct & Demo
Hai TalScoring & Validation
Final Project Defense · Fintech & Algorithmic Trading · COLMAN B.Sc. CS Supervisor: Ari Ben Ephraim · Project Day 2026
Presenter · Noa The pain

Trust scoring is broken.

A landlord, lender or business has to bet on a stranger's reliability — armed only with tools that are opaque, leaky, or easy to fake.

Scores don't explain themselves

Traditional credit scores hand back a black-box number. No factors, no recourse, nothing you can question or act on.

Statements spill PII

Bank statements and salary slips expose everything — salary, address, every transaction — to a landlord who only needed one signal.

Self-reported data lies

References and uploaded PDFs are gameable. The applicant curates exactly what you see — the risky signal is the one omitted.

OpenGradeThe Problem
Presenter · Noa Why now

Open Finance changed what's possible.

Israel's Open Finance regime (PSD2-style) lets a person grant read-only, consented access to their real bank data through a regulated API — no documents, no manual collection.

The twist

The API returns transactions, balances and credit behavior — but no identifying information: no name, ID, address or date of birth.

So identity-based verification is impossible by design. The only thing left to score is behavior — which is exactly the signal that actually predicts reliability.

WHAT THE BANK API RETURNS

Transactions (6 mo) Account balances Credit utilization Recurring payments

WHAT IT NEVER RETURNS

✕ Name ✕ National ID ✕ Address ✕ Date of birth
OpenGradeWhy Now
Presenter · Noa Who it's for

One score, four trust decisions.

Renting Primary

Landlords vet a tenant's reliability before handing over the keys.

Lending

P2P & micro-lenders risk-price a borrower on live data, not stale bureau signals.

Hiring

A financial-stability signal for cash-handling or compliance-sensitive roles.

Partnership

Verify a counterparty's financial health before a deal — skip audited statements.

Client — the party requesting the check. Pays per check. (landlord, lender, business)

Applicant — the person being checked. Authenticates with their bank. Pays nothing.

OpenGradeMarket & Use Cases
Presenter · May Our solution

Real bank data → an instant 0–100 trust score, without storing a single document.

7
Scoring factors,
each labeled & weighted
0PII
No name, ID, or raw
financial data stored
<5min
From "create check"
to score delivered
5
Use-case profiles,
each with learned weights
Transparent 7-factor scores Privacy-first by design Live & deployed
OpenGradeOur Solution
Presenter · May Beyond the score

Have a bank account? You're a real person.

Every OpenGrade check rides on a bank connection — and that connection is itself proof of a real person. Identity verification is built in: a consented bank login proves a unique, real human. No documents, no selfie — and in this mode we read no financial data at all.

Verify mode

Just connect the bank. We collect and store nothing — the successful, consented connection is the proof.

✓ Verified human0 data read · 0 stored

Score mode

Read → score → forget. Seven factors become a 0–100 trust score, then the raw data is deleted.

85 · Greenread in memory · deleted after scoring

Verify unlocks a far bigger market

MarketplacesDating & socialP2P lendingFintech onboardingBot & fraud defense
OpenGradeIdentity Verification
Presenter · May · Demo 1 / 3 Product · the client

Create a check in two fields.

OpenGrade client dashboard
1

Pick a use case

Renting, lending, hiring… sets which weights apply.

2

Enter applicant email

Spends one credit. An invitation link is emailed automatically.

3

Watch it score live

The result lands on the dashboard in real time — no refresh.

OpenGradeDemo · Client Flow
Presenter · May · Demo 2 / 3 Product · the applicant

Consent, then connect the bank.

1

Verify email (OTP)

Proves the invited person opened it. Rate-limited.

2

Legal attestation

"I am the account holder." Decline → check canceled, credit refunded.

3

Bank auth in Open Finance

Bank selection & consent happen inside the regulated provider's iframe.

4

Score, then forget

We fetch, score in memory, and delete the raw data — instantly.

▶ Play the 15-sec product walkthrough →
OpenGradeDemo · Applicant Flow
Presenter · May · Demo 3 / 3 Product · the result

Not a black box.

TRUST SCORE · RENTING

85
Green · Good Confidence MEDIUM · single account

Real engine output, pinned in our test suite.
Input: ₪8,000 salary · ₪6,000 balance · ₪5,000 savings · no defaults.

GREEN 70–100 · YELLOW 40–69 · RED 0–39

CONTRIBUTING FACTORS · SHIPPED WITH EVERY SCORE

Income Stability100
Recurring Payments50
Balance Health70
Expense Discipline55
Savings Behavior63
Credit Utilization50
Risk Flags1 minor flagirregular income−2
OpenGradeDemo · The Score
Presenter · Amit How it works

One pipeline, data minimized at every hop.

Client (React 19)
dashboard · SSE
API · Express + TypeScript
check state machine · scoring pipeline
Open Finance API
consented bank data
PostgreSQL · Prisma
scores + audit only
Redis
sessions · rate limits
Gmail SMTP
invites · OTP · results

The scoring pipeline  fetch (parallel) → deduplicate → score the 7 factors → persist score → delete raw data → push result over SSE. Raw transactions live only in memory and one short-lived table that is deleted in the same transaction that saves the score.

React 19 · ViteExpress 4 · TSPrisma 6 · Postgres 15Redis 7BetterAuthServer-Sent EventsDocker Compose
OpenGradeArchitecture
Presenter · Hai Technical depth · 1

We learned the weights — we didn't guess them.

Hand-tuned weights are just guesswork — "why 25%?" has no real answer. So we built an ML pipeline that derives them per use case.

1

2,500 synthetic applicants — 500 per use case, seeded & reproducible.

2

LLM-judge labels — Claude scores each against a use-case rubric.

3

Non-negative regression — coefficients ≥ 0, normalized to sum to 1.

4

Bootstrap SEs — 200 resamples quantify weight uncertainty.

Training fit R² = 0.88–0.96 · every score records its weightsVersion

LEARNED WEIGHTS — RENTING PROFILE

Income Stability57.9%
Recurring Pmts19.2%
Balance Health7.0%
Risk Flags6.6%
Expense Disc.6.0%
Savings2.5%
Credit Util.0.7%

Partnership flips this — savings & balance dominate. Same engine, different learned profile.

OpenGradeTechnical Depth · Learned Weights
Presenter · Amit Technical depth · 2

The hard parts we actually solved.

Zero-PII data lifecycle

Raw bank data lives in one short-lived table, deleted in the same DB transaction that persists the score. Provable, not promised.

Real-time without polling

Server-Sent Events push every status transition — invited → verified → scoring → done — straight to the dashboard.

Concurrency-safe scoring

An atomic guarded updateMany ensures a check scores exactly once, even if participants finish simultaneously.

Resilient bank integration

Async bank auth is polled with back-off; flaky calls retried (5xx/429), fatal ones aren't. Degrades gracefully to lower confidence.

OpenGradeTechnical Challenges
Presenter · Hai Validation · evidence over claims

Tested against a real benchmark.

We scored the UCI German Credit dataset (1,000 real labeled records) with our learned weights and measured AUC against two baselines.

Use caseAUCvs. baselines
Partnership0.728beats both ✓
Hiring0.722beats both ✓
Other0.703beats both ✓
Lending0.655passes gate, trails prior
Renting0.581weak on this dataset

Baselines — uniform weights 0.641 · prior hand-tuned 0.657

What we're honest about

German Credit's features map only loosely onto our 7 factors — and the learned Lending weights clear the 0.65 gate but narrowly trail the prior hand-tuned set (0.655 vs 0.657), so they're not shipped for lending yet.

50+
test files
11
weight-contract tests
6
ML pipeline tests
OpenGradeResults & Validation
Presenter · Hai Business model

Pay per check. No subscription.

Clients buy credits up front and spend one per check. Bigger packs lower the per-check price — and declined or failed checks are refunded.

Pay-per-use

No subscription · credits never expire

Lean cost

Marginal cost per check ≈ one Open Finance call

Fair

You only pay for a delivered score

CREDIT PACKS

PRICE · PER CHECK

Starter10 credits₪40₪4.00
Standard25 credits₪90₪3.60 · −10%
Pro50 credits₪160₪3.20 · −20%
Enterprise100 credits₪280₪2.80 · −30%

Prices served live from the API · mock checkout for the academic build

OpenGradeBusiness Model
Presenter · Hai Journey & what's next

From characterization to a deployed product.

Characterization

Pivoted to behavior-scoring once we hit the zero-PII constraint.

POC

Full check flow specced & built — client, applicant, scoring, SSE.

ML & validation

Learned weights + German-Credit benchmark + test suite.

Deployed

Running on the college server with live docs & CI.

Verify a human. Score the risk. Store nothing.

Next · payment processor Next · broader validation Next · partner API

Live · opengrade.cs.colman.ac.il/docs

Amit Zamir · Noa Elmakies · May Gurevich · Hai Tal

Questions welcome
OpenGradeSummary & Ask