The Rise Hayes Valley Units 308 508 210 315 408
1699 Market St, San Francisco, CA
Today, applicants upload pay stubs, W-2s and bank statements to every property manager. This demo shows a different path — one Plaid check, one reference number, zero raw documents shared. Landlords only ever see your income bracket.
This is a demo. Not affiliated with MOHCD or the City of San Francisco. Listings shown are mirrored from the public DAHLIA portal. No real verification has been performed.
Each one rules out an entire class of risk that today's pay-stub-upload flow creates.
Your email is stored as a one-way SHA-256 with a server pepper. Your exact income is computed in memory, used to pick a bracket, then discarded. We can't leak what we never wrote.
Income is read once from your payroll provider via Plaid's audited OAuth flow. No bank credentials touch this server. No SSN. No document scans. No pay stubs.
Property managers see only a bracket like $50,000 – $79,999. They never see the exact figure, your employer, or your pay frequency.
Every affordable unit in San Francisco is fought for. Once an applicant is in front of a lottery, the bottleneck stops being supply and becomes paperwork — pay stubs, W-2s, bank statements, asked for again at every property manager. That paperwork has a price. Below is what a centralized layer would change, framed as back-of-envelope ranges, not city accounting.
Estimated annual administrative cost of decentralized income verification across SF's affordable-housing portfolio.
Back-of-envelope: tens of thousands of DAHLIA applications per year × several hundred dollars in staff time per applicant for document collection, review, and re-verification across multiple property managers. Range reflects published HUD compliance time studies and SF MOHCD annual reporting.
Typical lag between submitting an application and verification clearing under the status quo.
Applicants upload the same documents to each property manager separately; PMs serially review. Based on applicant testimony in public SF Board of Supervisors housing committee hearings and reporting from the SF Standard and Mission Local.
Per-verification cost using a centralized Plaid Income check at scale.
Order-of-magnitude estimate from Plaid's published Income Verification pricing for large-volume contracts. The whole portfolio at this unit cost is small relative to current administrative spend.
No accounts, no passwords. You receive a reference number; that's the whole credential.
Pulled hourly from SF.gov DAHLIA. Every listing has a "Verify income" link that opens this demo.
One screen explains what's shared and what isn't, with a version-stamped checkbox. Stored as audit evidence.
Plaid's income_verification product reads your last 90 days of payroll without a bank login. In mock mode, you can pick any bracket.
A 12-character ID like K4P9XQ2YR7M3. Valid 90 days. Hand it to as many landlords as you like — they query a read-only eligibility endpoint.
Pulled from SF.gov's public housing feed every six hours. Click any listing to start a demo verification.
1699 Market St, San Francisco, CA
39 Bruton St, San Francisco, CA
1108 Connecticut St, San Francisco, CA
363 6th St, San Francisco, CA
555 Bryant St, San Francisco, CA
4742 Mission St, San Francisco, CA
The short version: no, your bank password isn't going anywhere; and yes, the bracket really is the only thing landlords see.
Plaid returns it once, encrypted, to this Worker. The Worker rounds it to a bracket (e.g. $50,000 – $79,999), stores the bracket, and discards the raw number. The exact figure is never written to disk and never logged.
Only as a one-way SHA-256 hash with a server pepper. We need the hash so that — if you later use "Get my data" or "Delete my data" — we can prove the records belong to you. We cannot reverse the hash to recover your address.
A reference like K4P9XQ2YR7M3, the income bracket, the verification date, and the expiration date. They do not see your name, email, exact income, employer, or pay frequency.
90 days from verification, then a nightly cron permanently deletes it. You can also request immediate deletion via Delete my data.
No. This is an independent civic-tech prototype. It is not affiliated with, endorsed by, or operated by MOHCD or the City & County of San Francisco. The listings shown are pulled from the public DAHLIA API as a demonstration.
No. Plaid Income reads payroll provider records (Workday, ADP, Gusto, etc.). It does not read your bank balance or transactions. We never get bank account or routing numbers.
In a real deployment, registered property managers receive a JWT and call one endpoint. The response is a single line: eligible / not eligible, and a bracket.
POST /api/pm/login
GET /api/pm/eligibility/:applicantRefId?listingId=...
{
"eligible": true,
"bracket": "50_80K",
"verified_at": "2026-04-12T14:32:11Z",
"expires_at": "2026-07-11T14:32:11Z"
}Every PM query is rate-limited and audit-logged. The applicant's reference is the only identifier; no email or document ever transits this endpoint.