Inspiration

When I came to the United States as an international student, I got sick and was told that I needed to see a doctor. I have always been scared of hospitals, so even though the visit was expensive, I simply paid the bill to get it over with, and I never found out whether that price was fair. Later I learned that my experience was very common, because in California 6 in 10 people put off a doctor visit because of the cost, 2 in 3 fear a surprise medical bill more than paying their rent, and 1 in 9 adults in LA County owe money for medical bills. The people who wait often get sicker, since 42% of those who delayed care got worse, and 45% of LA adults with medical bills cannot afford food or rent.

I built Billo so that nobody has to feel the way I felt. Billo helps every patient get a fair price, know that price before they go, and have the paperwork taken care of after the visit, which is why our promise is Make every care dollar count.

Sources: CHCF California Health Policy Survey (fall 2025), CHCF 2025 survey via Health Access, and LA County Public Health, Medical Debt Update (May 2025).

What it does

Billo is an AI care companion that lives in the chats people already use, so you can talk to it in ASI:One or tag @Billo in iMessage, and one conversation helps you before, during and after your visit.

Before care, you describe what happened in plain words, and Billo runs fixed emergency rules first, so if you mention something like chest pain it tells you to call 911 and stops. If there are no danger signs, Billo shows up to three nearby places with comparable prices, and when you pick one, it saves the expected price as your Good Faith Estimate and gives you calendar links.

During care, you can text what the clinic does, for example "they did an X-ray and put on a splint," and Billo turns your words into likely billing codes and keeps a running total of what the visit should cost.

After care, you send a photo of the final bill or a paid receipt, and Billo reads it with local OCR, checks that the lines add up to the printed total, and matches the provider, the line items and the amount to the visit it already knows about. Each line then goes through two separate checks, and Billo only calls a charge wrong when both checks agree. In our demo case, Linh was quoted \$240 for her knee visit but received a bill for \$2,140, so Billo found an X-ray that was charged twice, flagged an expensive knee brace as something to ask the hospital about, and showed that the bill was \$1,900 higher than her estimate. Because that difference is more than the \$400 limit, Linh can dispute it under the No Surprises Act, so Billo's plan is to pay the \$240 estimate and dispute the remaining \$1,900.

Billo also checks for benefits, such as an HSA or FSA, but only when you name a benefit you actually have, and it describes the result as a possible path rather than a promise. When it is time to pay, Billo can check a clinic's payment QR code, and it only lets the payment continue when the clinic, the invoice, the currency and the exact amount all match and you approve it yourself. You can type status at any time to see the whole case and the next step.

How I built it

The language model only reads documents and phrases the replies, while every decision about emergencies, flags, matches and payments lives in plain, tested code, so the AI cannot talk its way past a rule.

Each sponsor technology handles one specific layer of the system:

  • Fetch.ai: agent layer. The Billo Coordinator is a uAgent registered on Agentverse that speaks the Agent Chat Protocol, so anyone can find it and use it directly in ASI:One. The Coordinator keeps track of the conversation and hands each task to one specialist agent: the Red-Flag Screener checks for emergencies, the Care Finder compares places and prices, the After-Care Organizer reconciles bills and receipts, the Settlement Router guards every payment-like step, the iMessage Gateway translates messages from iMessage, and Case Medic repairs a case when something breaks.
  • Photon: iMessage messaging layer. Billo joins real iMessage conversations through Photon Spectrum, and it stays quiet unless someone tags @Billo, so ordinary messages are never forwarded. In a group chat it only helps with choosing care, and anything private, such as a bill or a payment, stays in a one-to-one chat.
  • Tiger Data: data layer. It stores price history, the saved estimate, visit events, the fields read from each document, and the audit record for every step, so one case stays connected from the first message to the final payment. Price summaries let Billo compare each charge with the typical price and with the 90th percentile price for the same billing code in the area.
  • Sentry: monitoring and recovery layer. One patient case maps to one trace that follows the request through Photon, the agents, the OCR, the API and the reply, with Sentry Crons watching the visit follow-up and a signed webhook waking Case Medic when a monitored step fails. Sentry only ever sees a keyed hash of the case, because the app scrubs health data, phone numbers, amounts and uploaded documents before any telemetry leaves.
  • Visa: payment layer (simulation). The Visa layer shows how a guarded clinic-QR payment and a reimbursement would work, and it rechecks every guard before it records anything. For this hackathon it is clearly labeled as a simulation, so it never collects card numbers and no real money moves.

The bill check works like a small vote between two separate checks. For each line on the bill, the rules check looks for problems such as duplicate charges, code pairs that should not be billed together, and services that never appear in the visit log, while the price check looks at whether the charge is higher than 90% of prices for the same service in the area. When both checks find a problem, Billo marks the line as a dispute, when only one check finds a problem, Billo tells the patient to ask the hospital about it, and when neither check finds a problem, the line is marked OK.

The document reader follows a fixed order of trust. It first validates the file and runs RapidOCR locally, and it only accepts the OCR result when the reading is confident enough and the lines on the bill add up to the printed total. When OCR is not confident enough, Billo asks a vision model for help, but it compares every code and amount the model returns against what OCR actually saw, so a misread or invented number is marked for review instead of being trusted. The uploaded photo is deleted as soon as the reading is finished.

The backend is a FastAPI service that all agents share, together with the Python uAgents and a TypeScript Photon bridge. They run as ARM64 Docker containers on an Oracle Ampere VM behind Caddy, while the Next.js frontend, with its landing page and journey pages, runs on Vercel. GitHub Actions runs 69 backend tests, 27 frontend tests and 4 Photon routing tests on every push, and it also builds the three ARM64 containers.

Challenges I ran into

Photon was one of my hardest problems early in the event, because I could not connect Billo to my phone number at first, and without that connection Billo could not join any real iMessage chat. I kept testing the connection step by step until Billo could finally send and receive messages through Photon, and only then could I build the group chat and private chat rules on top of it.

Hosting was another big struggle. I first tried to deploy the backend on DigitalOcean and then on Render, but neither of them worked for me, so I lost time and had to find a new plan in the middle of the night. In the end I moved the backend to an Oracle Ampere VM, where it runs as ARM64 Docker containers behind Caddy.

Accomplishments that I'm proud of

I am proud that I finished Billo in 24 hours without sleeping, even after Photon and hosting both failed for me earlier in the event, because I kept going until every part worked together. I am also proud that Billo can take a real-looking bill from a photo to a clear answer in one chat, and that in the demo it finds the duplicate X-ray, refuses to call the expensive brace "wrong" because only one check agreed, and explains the \$1,900 difference in plain words. Finally, I am proud that safety is built into the structure rather than added at the end, because emergency rules always run first, photos are deleted, Sentry never sees health data, and nothing payment-like happens without the patient's own approval.

What I learned

I learned that an AI agent becomes trustworthy when it works inside limits that it cannot break, which in Billo means that the model reads, deterministic code decides, a guard rechecks, and the patient approves. I learned that meeting people in the chats they already use matters more than asking them to install one more app, especially for people who are already scared or stressed. I also learned how much useful public information already exists, such as hospital price files, the NPI registry and the No Surprises Act, and that the hard part is connecting it at the exact moment a patient needs it.

What's next for Billo

Next, I want to load real public price files for Los Angeles hospitals instead of the synthetic demo prices, switch the NPI check to live mode, and keep the full case history in Tiger Data in production. I would like to pilot Billo with international students and university health centers, because they face the same fear I did, and to add charity-care applications, since many California hospitals must help patients with lower incomes. Once a trusted payment partner is ready, I want to turn the Visa simulation into real, guarded payments, and later I hope to check insurance claims before the paper bill even arrives.

Built with

Sponsor Layer What it does in Billo
Fetch.ai (Agentverse + ASI:One) Agent layer A coordinator and specialist agents that ASI:One can find and use directly
Photon iMessage messaging layer Brings Billo into real iMessage chats, and Billo answers only when tagged
Tiger Data Data layer Stores prices, estimates, visit events and the audit trail for each case
Sentry Monitoring and recovery layer One trace per case, privacy-safe monitoring, and Case Medic recovery
Visa Payment layer (simulation) A clearly labeled payment simulation that enforces every guard

Every patient, provider, document and payment in the demo is synthetic. Billo does not give medical, legal, insurance, tax or financial advice, and in an emergency you should call 911.

Built With

Share this project:

Updates

Submission history