Inspiration
Medical bills are expensive yet difficult to challenge—even when something is wrong. A 2024 Commonwealth Fund survey found that 45% of insured, working-age adults received a bill for something they believed should have been covered. Another 17% reported that an insurer denied doctor-recommended care. Less than half challenged these bills or denials. On a personal level, all four of us have experienced family members struggling with inflated hospital bills. We built BillLess: a patient advocate that helps people understand a medical bill, identify specific items worth questioning, gather evidence, and take the next step.
What it does
BillLess works a medical-billing case from first document to official outcome. A patient uploads an itemized bill and BillLess extracts the information, asks the patient for confirmation, and applies deterministic rules to identify potential duplicate charges, disagreements between a bill and an EOB, and charges that lack matching documentation in the patient’s medical records. It then generates a cited dispute/appeal letter, tracks the case over time, and updates the patient through iMessage. Billy, our ElevenLabs voice advocate, can speak with a billing office or insurer using a case-specific brief.
How we built it
We built BillLess as a Next.js and TypeScript application deployed through Vercel. Neon Postgres and Drizzle stored cases, documents, findings, events, letters, approvals, and call outcomes. FinchNode provides medical records from multiple providers, while saved synthetic records provide a clearly labeled fallback for demonstrations. We developed the project through a series of 5 MVPs, with the central rule being that AI handles reading and conversation, deterministic code controls facts, findings, permissions, and finances.
Challenges we ran into
We first used Gemini for PDF parsing, but realized that their limited free quota wasn't enough - we then pivoted to using Grok instead. Another challenge we had was patient safety. Early voice-agent tests showed that an agent could invent a patient’s details when pressured by a representative. We responded by building case-specific briefs, patient-consent tools, and automated ElevenLabs conversation tests such as against identity pressure, payment pressure, prompt injection, hostile instructions, and requests for sensitive information.
Accomplishments that we're proud of
We configured and iteratively tested Billy as a constrained patient advocate. Its guardrails prevent it from inventing facts, accepting payment arrangements, exposing sensitive information, or following prompt-injection instructions from the other party. In our automated simulated-conversation suite, Billy passed all 23 evaluated safety and task-completion criteria, although we still treat automated grading as evidence rather than a guarantee.
What we learned
Our biggest lesson was the value of spec-driven development. We spent 5 hours at the beginning solely focusing on the spec and brainstorming the exact features that we wanted. At first, it felt expensive and a waste of time, but in actuality, it sped up the process of 4 developers working together in parallel and helped us progress through five MVP stages.
What's next for BillLess
We want to increase accessibility to BillLess, as medical debt affects different groups of people disportionately, such as women and elderly. In the future, we want to add multilingual document explanations and messaging, as well as zoom-able controls and voice-friendly workflows for those unfamiliar with technology. Most importantly, we want to validate BillLess with real-world experts and measure outcomes honestly. It should only claim success when the patient receives a documented correction or verified resolution, not simply an offer or questioned charge.
Built With
- drizzle
- elevenlabs
- figma
- grok
- json
- next.js
- paper
- pdf-lib
- photon
- tailwindcss
- twilio
- typescript
- vercel
- zod
Log in or sign up for Devpost to join the conversation.