Inspiration
Medical bills are hard to read and easy to overpay. This isn't a made-up problem for us. Three of our teammates have gotten hospital bills full of charges they couldn't explain. None of us knew what the fees meant or where they came from. Like most people who feel buried by the system, we gave up and paid.
We're not alone.
- 80% of medical bills contain errors
- 1 in 5 hospitals mark up drug prices by 700% or more
- 64% of Americans have never challenged a medical bill
What it does
Medical Bill Guardian is a billing assistant you talk to over iMessage.
- You text it something like "look into Morgan's bill."
- It pulls the patient's medical records from FinchNode.
- It asks before it calls anyone. You reply YES and it calls hospital billing to ask for the itemized bill.
- The hospital give the agent a PDF link. The agent downloads it, reads it, and checks every charge against the records.
- If a charge has no record behind it, the agent tells you and asks again. On YES it calls billing to review that charge.
- It texts you the outcome. If you're owed money, it offers the refund and sends it when you say so.
A big screen shows the same case updating live while you text.
How we built it
- Next.js 16, React 19, TypeScript for the app and the live screen
- SQLite for case storage, with an outbox so every text is sent only once
- Photon / Spectrum for iMessage in and out
- Fish Audio voice agents for the bill request call and the billing review call
- FinchNode public demo API for patient records
- Capital One Nessie sandbox to find the hospital payment and send the refund (fake money)
- unpdf to read the hospital's bill PDF
- CMS lab payment data and published hospital prices as labeled price context
The bill check is plain code, not AI. The same records and the same bill always give the same answer.
Challenges we ran into
- Getting the hospital and the agent to talk. We had to pick how the hospital and the agent would reach each other. We built around iMessage, email, and phone calls.
- Giving the agent a phone number. We tried ElevenLabs, Twilio, a SIP trunk with our own numbers, and Vapi. None of them worked out. We landed on Fish Audio because it gave us \$5 in free credit and a free phone number.
- No custom patients in FinchNode. FinchNode wouldn't let us add our own patients. We also wanted to build automations on top of Capital One Nessie. In the end we used FinchNode's built-in demo patients and tied their records more tightly into the app.
- One number per conversation in Photon. Photon gives you one number per conversation. Our agent has to juggle three of them, the patient's number, the hospital's number, and a number that receives documents from the hospital.
Accomplishments that we're proud of
- The whole case runs from a text thread, with a human approval before every outside action
- Every bill line is traced back to a record or marked as missing
- The app always says where its data came from, even when it falls back to a saved copy
- 1000+ automated tests
What we learned
The hard part of an agent that touches money and health data is deciding what it is not allowed to do. Asking for permission, keeping honest labels, and making every step safe to repeat took more work than the happy path.
What's next for Medical Bill Guardian
- Real identity, patient consent, and encrypted storage before any real patient uses it
- Support for real hospital bill layouts and scanned PDFs
- Insurance EOB checks so the agent knows what you actually owe
- A hosted version that doesn't depend on one laptop
Built With
- anime.js
- capital-one-nessie
- finchnode
- fish-audio
- next.js
- node.js
- openai-api
- photon-spectrum
- react
- sqlite
- three.js
- typescript
- unpdf
- vitest
Log in or sign up for Devpost to join the conversation.