Medical Bill Parser

Extract provider, charges, insurance payments, and patient balance from medical bills into CSV, Excel, or JSON.

Drag & drop your document here

Supports PDF, JPG, PNG, WEBP

Docyield's medical bill parser reads a hospital or clinic statement — scanned, photographed, or supplied as a PDF — and returns its details as structured data. A medical bill ties a patient to a provider and breaks a course of care into charges, then accounts for what insurance paid, what was adjusted, and what the patient still owes. The parser captures the provider and patient, the account and dates, every itemized charge, and the financial summary, and exports them as CSV, Excel, or JSON.

Medical statements are some of the most inconsistent documents anyone handles. A hospital summary, a clinic invoice, and a specialist's statement each look different, use different words for the same figure, and carry charges that may be plain descriptions or terse billing codes. "Patient responsibility," "amount you owe," and "balance due" can all mean the same thing on different bills. Rather than depending on a template, Docyield reads each statement by meaning, so the charges, the insurance payment, and the patient balance land in the right fields whatever the provider called them.

Inputs
PDF, JPG, PNG, WEBP
Outputs
JSON · CSV · Excel · XML
Price
Free · no signup

What a medical bill contains

A medical bill records the cost of care and how that cost is settled. The identity fields name the provider — the hospital, clinic, or practice — and the patient, and tie the statement to an account or statement number. The dates pin it down: the date or dates of service, the statement date, and the date payment is due. The charges then itemise the care, each with a description, often a CPT or billing code, and an amount.

The financial summary is where a medical bill differs from a plain invoice. After the charges are totalled into a subtotal, the bill records what insurance paid, any adjustments or write-offs the provider applied, the patient responsibility, and the total still due. That sequence — charges, insurance, adjustments, patient balance — is the story of how a headline charge becomes the amount a patient actually pays.

Why structured extraction beats raw OCR and manual entry

Reading a medical bill by eye is hard precisely because of that financial sequence. The largest number on the page is usually the gross charge, not what is owed, and the amount due sits among insurance payments and adjustments that have to be netted out. Copying those figures into a tracker by hand invites mixing up the gross charge with the patient balance.

Plain OCR returns the text but not the relationships, so the charges, the insurance payment, and the patient responsibility come back as undifferentiated numbers. Structured extraction separates them: the itemized charges form their own list, and each summary figure lands in its own field, so the patient balance is always the patient balance and never confused with the total charges.

Who uses a medical bill parser

  • Patients and families tracking what they have been charged, what insurance covered, and what they owe across providers.
  • Medical billing advocates and patient-advocacy services reviewing statements for clients.
  • Bookkeepers and finance teams recording healthcare costs and reimbursements into spreadsheets.
  • HR and benefits teams reconciling employee medical claims and out-of-pocket amounts.
  • Practices and billing offices digitising incoming statements for their own records.
  • Developers adding medical-bill capture to a health-finance app through the API.

Itemized charges and billing codes

The charges are returned as a nested list, and it is worth describing how each one comes back. Every charge is its own record: a description of the service, the billing code where the statement prints one — often a CPT code — and the amount. Exported to CSV or Excel, each charge becomes a row you can sort, group, and total, which makes a long itemised statement far easier to review than scrolling the original.

Keeping the code beside the description matters because the code is what links a charge to a procedure and to an insurance claim. Where a statement gives only a description with no code, the code field comes back empty rather than invented, so you can see at a glance which lines are coded and which are not.

Accuracy, limitations, and review

No parser reads every statement perfectly, and a medical bill that varies this much in layout is exactly where care is needed. Accuracy is highest on clean, flat scans and native PDFs; a folded paper statement or an angled photo of dense fine print is where a figure can be misread, and a sharper image helps. The parser keeps the source statement beside the extracted values so the summary figures are quick to verify.

Where a value is genuinely absent — a bill with no recorded insurance payment, say — the field comes back empty rather than filled with a guess, because a fabricated amount on a financial record is worse than a blank. This tool extracts the data printed on the statement and offers no medical or legal advice and no judgement about whether a charge is correct or billable; those questions are for the patient, the provider, and the insurer.

Output formats, API, and batch

Each parse exports as CSV, Excel, JSON, or XML from the same result. CSV and Excel suit someone tracking charges and balances across statements; JSON suits a health-finance integration; XML fits an older billing import. The free tool handles one statement at a time.

When statements arrive in volume — a billing office or an advocacy service handling many at once — the Docyield API and batch dashboard run the same extraction at scale, return results by webhook, and let you apply your own checks, such as confirming the charges sum to the subtotal. The field names are identical between the free tool and the API.

What the medical bill parser extracts

Each statement is returned against a fixed schema. Values the bill does not show come back empty rather than guessed. The charges are a nested list, one record per line.

Provider
The hospital, clinic, or practice that issued the statement.
Patient name
The patient the bill is for.
Account number
The account or statement number.
Service date
The date or dates the care was provided.
Statement date
The date the statement was issued.
Due date
The date payment is due.
Charges
A nested list of itemized charges. Each charge holds a description, a billing code such as a CPT code where given, and an amount.
Subtotal
The total of all charges.
Insurance paid
The amount paid by insurance.
Adjustments
Adjustments or write-offs applied by the provider.
Patient responsibility
The amount owed by the patient.
Total due
The total amount still due.

How to convert a medical bill to CSV, Excel, or JSON

  1. 1Upload your statement — drop a scan, photo, or PDF of the bill onto the box above, or choose a file.
  2. 2Wait a few seconds while Docyield reads the statement and separates the charges from the summary figures.
  3. 3Review the structured result, checking the patient balance and insurance payment against the original.
  4. 4Pick your output tab — CSV or Excel to track costs, or JSON and XML for integrations.
  5. 5Copy the result or download the file, ready for your records or finance system.

Frequently asked questions

Processing documents at scale?

Batch upload, an extraction API, and webhooks for 100+ documents a month.

View the API

Related tools