Deceased user account access
Use this when a family member or estate representative contacts support because a user has died and they need access to that user’s Silvia account, usually to help settle the estate. For a living user who lost access to their own account, useaccount-access-lockout.md instead.
Why this is delicate
- We hold sensitive financial data (linked bank / brokerage balances, transactions, holdings) so we don’t hand over an account without proof.
- “Deceased relative” is a classic social-engineering angle, so we verify.
- On the other hand: the person contacting us is usually grieving, overwhelmed, and working with lawyers. Our job is to be warm and make our part easy, not add friction.
Verification bar
Not legally required, but strongly recommended. No US federal law mandates specific documents to release account access after death. RUFADAA (adopted by most states) says the opposite: companies aren’t required to hand anything over without a court order, but can if they want to, and our Terms of Service govern first. What we actually want is enough evidence to be confident about two things: the user really died, and the person asking is who they say they are and has standing to act for the estate.Documents to request
Ask for all of these. Most families can produce them within a day.- Government-issued photo ID of the requester (driver’s license or passport).
- Proof the user died, any of:
- Certified or non-certified copy of the death certificate (photo is fine)
- Public obituary link with the requester listed as surviving family
- Funeral-home program
- Standing to act for the estate, any of:
- Court-issued Letters Testamentary or Letters of Administration (a will alone is not enough; it must be probated)
- NJ Surrogate paperwork (or the equivalent from other states) showing the person as executor / administrator
- IRS letter assigning an EIN to the estate (proves an estate has been formally opened)
KBV against the Silvia account
Also ask for two facts they should know about the deceased user’s Silvia account. Pick from:- The email the user signed up with
- The phone number on the account, if any
- The names of at least two institutions the user had connected (Chase, Fidelity, Vanguard, etc.)
- Approximate signup timeframe (month + year)
Red flags that require escalation
- Any hint of a family dispute (other siblings, ex-spouse, contested estate)
- Requester’s name is not on the obituary and doesn’t obviously connect to the user
- Requester asks for anything unusual beyond access (wire transfers, changing where money is held, etc.)
- The account has significant assets and the documents don’t include Letters Testamentary
Look up the user
You’ll need theirclerk_id (usually the family member will give you
the email; find the account from there).
institution_name
column. Note also what’s stale vs. fresh; you’ll want to tell
them what to expect.
What to actually give them
Two options, pick whichever fits their need.Option A: Transfer the account (recommended for ongoing estate work)
Move the account to an email the requester controls, so they can log in going forward and see current balances as connected accounts sync. Steps (Clerk dashboard):- Users → search the deceased user’s
clerk_id→ open profile - Email addresses → add the requester’s email
- If they already have their own Silvia account under their
primary email, use the Gmail
+aliastrick:theirEmail+deceasedName@gmail.com. Emails still land in their inbox, but Clerk treats it as a separate identity, so both accounts coexist. - Verify the new email (admin bypass, or let them enter the code)
- If they already have their own Silvia account under their
primary email, use the Gmail
- Set the new email as primary
- Delete the old email on the account
- Multi-factor authentication → remove all methods
- Phone numbers → remove the deceased user’s phone (their number could get reassigned by the carrier)
user.updated webhook syncs email, phone_number, and
has_mfa into all_users on its own. Verify with the query below.
Option B: Data export + close the account
Only if they explicitly say they don’t need ongoing access and just want a snapshot for probate paperwork. Generate an export of accounts, balances, holdings, and transactions as CSV / PDF and send it to the requester. Then soft-delete the account via the standard account-deletion path. (Note: as of writing, we don’t have a self-serve export flow for support-initiated exports. Escalate to engineering to pull one.)Verify Supabase sync
After making the Clerk changes, give the webhook ~30 seconds, then check:updated_at tells you the webhook fired and wrote
something; it does not tell you the email specifically
changed. all_users.email is stored encrypted, so it isn’t
human-readable in a raw SELECT. To confirm the new primary email
actually landed, check the Clerk dashboard (source of truth for
identity) or decrypt the column with a decrypt helper.
For the other Clerk-sourced fields (phone_number, has_mfa) the
values above are directly comparable to Clerk’s state. If one looks
stale, patch only that field; do not blanket-clear the row. The
webhook is the source of truth for anything you changed in Clerk; a
manual UPDATE here is a fallback for the rare case it didn’t
fire.
For example, if you removed the phone and turned off 2FA in Clerk
but Supabase still shows the old values, this brings the row back in
line with Clerk state:
sms_opt_in. It is Silvia’s own SMS-consent state,
not sourced from Clerk, and only changes via the explicit opt-in /
opt-out flows.
If only the email looks stale, patch just that column instead.
Reply templates
Warm, human, low-friction. Do not be transactional. Interim document handling. Until Silvia has a secure upload channel, verification documents (ID, death certificate, court paperwork) may arrive as email attachments tosupport@cfosilvia.com.
When they do:
- Ask the requester to redact numeric identifiers where reasonable (driver’s license number, SSN, EIN). Keep name, DOB, and photo visible; that’s what we’re actually matching.
- Handle the request, then delete the message + attachments from the inbox once the incident-log entry is written. Do not forward the attachments to anyone.
- Never store attachments in a shared drive, chat, or ticket system.
README.md.
First reply, asking for documents
After verification, account moved
Log the incident
Before you write anything here, confirm your team has designated one approved system for these records with defined access, retention, and deletion controls. A deceased-user entry names the deceased user, the requester, verification decisions, and admin actions taken against a real account; it must not live in random channels or personal notes. Until a system is formally designated, escalate to the founder rather than writing an ad-hoc entry. Tracked as a follow-up inREADME.md.
Once a system is in place, entries follow this shape:
Related engineering context
- Auth plumbing:
../CLERK-AUTH-ONBOARDING-ROUTING.md - The
user.updatedwebhook (app/api/webhooks/clerk/route.ts) clearsphone_numberwhen Clerk removes the number and mirrorstwo_factor_enabledintohas_mfa. Fixture and test coverage live inapp/api/webhooks/clerk/__tests__/user-updated-phone-mfa.test.ts.