Free medical bill OCR

Upload a hospital bill or medical invoice and extract the patient, provider, service dates, charges and totals as structured data, free. It reads PDFs, scans and photos, with no account needed. It's for billing and administration, and it gives no clinical or coverage advice.

Upload your medical billTake a photo or pick a PDF, up to 10 MB
  • Free
  • No sign-up, no card
  • Download as Excel, CSV or JSON

Medical bills hold health information. Don't upload a patient's bill unless you're allowed to. Use a redacted copy to test. We keep the first page and the result for 7 days to run and improve this tool, then delete them. The rest of your file is not stored. Privacy policy

Sample. Every value is invented.

Sampletown General Hospital

Patient bill

Patient Name
Alex Sample
Patient Number
MR-000123
Admission Date
2026-09-12
Discharge Date
2026-09-14
Insurance Paid
860.00
Amount Due
215.00
DateServiceAmount
2026-09-12Consultation120.00
2026-09-12Blood panel95.00
2026-09-13Ward, per day430.00
{
  "patient_name": "Alex Sample",  "patient_number": "MR-000123",  "admission_date": "2026-09-12",  "discharge_date": "2026-09-14"}
  • Any layout, no template

    It works out the fields from the page itself, so there's nothing to set up.

  • Scans and phone photos

    Digital PDFs, scanned pages and photos all go through the same way.

  • Structured, not just text

    Named fields and table rows you can download as Excel, CSV or JSON, not a wall of OCR text.

  • An API when you need it

    The same data from your own code, as the sample call further down shows.

What the free medical bill extractor reads

  • Provider: hospital, clinic or lab name, address and tax or provider number.
  • Patient: name, patient or account number, admission and discharge dates.
  • Services: date of service, description, procedure code where printed, quantity and charge.
  • Payment: insurance paid, adjustments, patient balance and amount due.

Types of medical bill you can upload

  • Hospital bills, discharge bills and itemised hospital statements.
  • Clinic, doctor and specialist invoices.
  • Diagnostic and lab bills, including radiology and pathology.
  • Pharmacy bills and dental or eye care invoices.
  • Explanation of benefits (EOB) statements and patient statements.

Medical billing terms by region

What medical bills are called and what they print
RegionNamesCodes and references
PakistanHospital bill, discharge bill, Sehat Card claim billMR number, panel or corporate reference
IndiaHospital bill, final bill, TPA bill, discharge summary billUHID, IPD number, GSTIN, TPA reference
UAE, Saudi ArabiaMedical invoice, insurance claim invoiceMember ID, TRN, approval number
United StatesMedical bill, itemised bill, superbill, EOB, CMS-1500, UB-04CPT, ICD-10, NPI
United KingdomPrivate medical invoice, treatment invoiceProvider number, CCSD codes
Canada, AustraliaMedical invoice, Medicare statementItem numbers, provider numbers

Why itemised bills need every page

A summary on page 1 tells you the total. The line-by-line charges that claims and billing teams check usually run on behind it, sometimes for many pages. A free account reads every page, and rows carry over into one table.

Medical bills aren't a built-in document type yet, so an account reads them through a workflow: upload one sample, pick the fields you want and save. If you need a type trained on your own samples, we do that at no charge. See healthcare administration for how billing teams use it.

Sample API call

This is how the same medical bill looks from your own code. wf_demo_medical_bill is a dummy workflow id and every value below is invented, so the call won't run as written. A real run reads every page and adds a confidence score and page position to each field.

Run a workflow, then read the result
curl -X POST "$DOCREFINERY_API/v1/workflows/wf_demo_medical_bill/run" \
  -H "Authorization: Bearer $DOCREFINERY_API_KEY" \
  -F "[email protected]"

# Take trace_id from the answer, then poll until status is "fulfilled"
curl "$DOCREFINERY_API/v1/runway/9f1c0a7e" \
  -H "Authorization: Bearer $DOCREFINERY_API_KEY"
Response (invented values)
{
  "trace_id": "9f1c0a7e",
  "status": "fulfilled",
  "document_type": "medical_bill",
  "result": {
    "fields": [
      {
        "key": "patient_name",
        "alias": "Patient Name",
        "text": "Alex Sample",
        "field_confidence": 0.99,
        "location": { "page": 1, "bbox": [0.08, 0.12, 0.46, 0.14] }
      },
      {
        "key": "patient_number",
        "alias": "Patient Number",
        "text": "MR-000123",
        "field_confidence": 0.98,
        "location": { "page": 1, "bbox": [0.08, 0.17, 0.46, 0.19] }
      },
      {
        "key": "admission_date",
        "alias": "Admission Date",
        "text": "2026-09-12",
        "field_confidence": 0.97,
        "location": { "page": 1, "bbox": [0.08, 0.22, 0.46, 0.24] }
      },
      {
        "key": "charges",
        "alias": "Charges",
        "table": [
          [
            { "key": "date", "alias": "Date", "text": "2026-09-12" },
            { "key": "service", "alias": "Service", "text": "Consultation" },
            { "key": "amount", "alias": "Amount", "text": "120.00" }
          ]
        ]
      }
    ],
    "extraction_approval": "auto",
    "low_confidence_fields": []
  }
}

Make it run on your own medical bill

  1. Create a free account.
  2. Upload one sample under Workflows, keep the fields you want and save. That gives you a real workflow id.
  3. Create an API key under Settings. Keys are switched on per account, so ask us if you don't see the option.
  4. Set DOCREFINERY_API and DOCREFINERY_API_KEY as in the quickstart, and swap in your id.

Free try or free account?

Free try and free account, compared
FeatureFree tryFree account
Pages readPage 1Every page
Allowance5 tries a day100 pages a month
File sizeUp to 10 MBUp to 100 MB
How it readsFinds the fields on the pageA workflow built from one sample
CheckingCompare with your pageConfidence scores and page citations
OutputFields on screen, download as Excel, CSV or JSONExcel, CSV and JSON for every page, and API keys on request

Common questions

Can I extract data from a hospital bill for free?

Yes. Upload the bill and page 1 comes back as structured fields and rows of charges. You get 5 free tries a day with no account or card.

Can it read an itemised medical bill?

Yes. Charges come back as table rows with their date, description and amount when the bill prints them. Itemised bills that run past page 1 need a free account.

Is this tool HIPAA compliant?

docRefinery makes no HIPAA or other regulatory compliance claim, and this free tool is not meant for regulated patient data. A SOC 2 Type II audit is in progress with no report issued yet. Enterprise plans support private VPC and air-gapped on-premises deployment.

Will it tell me if a medical bill is wrong?

No. It reads what's printed so you can review or reuse the data. It doesn't judge whether a charge, code or coverage decision is correct.

Related

Try it on your own medical bill.

Free, with no sign-up and no card.