Nonprofit hospitals report charity care to two federal regulators. The numbers don't match.

Yale New Haven Hospital told the IRS it provided $113.1M in financial assistance for its fiscal year ending September 2023, and told Medicare $35.6M in charity care for the same year, on a comparable ~$4.1B expense base. Large gaps like this are far from rare.

By Chris Betz · · public-domain data, MIT-licensed code

Every nonprofit hospital in the United States reports the cost of the free and discounted care it gives patients who can't pay to two different federal regulators — for two different purposes, on two different forms:

To the IRS, on Schedule H of Form 990 — the "financial assistance at cost" line (Part I, line 7a) — which documents the community benefit that helps justify the hospital's tax exemption. And to CMS, on Worksheet S-10 of the Medicare Cost Report — the "cost of charity care" line — which feeds Medicare's uncompensated-care (DSH) payments. Two different regulatory purposes, but both lines are meant to capture the same underlying thing: what it cost to treat patients who couldn't pay.

They are supposed to describe the same activity. For a lot of hospitals, they don't come close.

The gap, for hospitals where the comparison is clean

Comparing these two numbers naïvely is a trap. The biggest raw differences come from artifacts: a single 990 can cover a dozen hospitals reported under one name, and the two forms often cover fiscal years that are 12 months apart. So I filtered down to the hospitals where the comparison is genuinely apples-to-apples — a single reporting facility, both filings covering the same fiscal year, both numbers above $1M, and the two forms reporting a comparable total-expense base (within 5%). I also compare like with like: the net figure on each side — Schedule H line 7a column (e), net of offsetting revenue, against the S-10 cost of charity care net of partial patient payments — so this isn't a gross-versus-net illusion.

99 hospitals clear that bar for tax year 2022. Among them, 22 reported charity-care numbers to the two regulators that differ by more than 50%. A sample of the largest:

HospitalTold the IRSTold CMSDifference%
Yale New Haven Hospital$113.1M$35.6M−$77.5M69%
Tampa General Hospital$51.0M$102.4M+$51.3M50%
Greenwich Hospital$23.6M$4.0M−$19.6M83%
Baptist Medical Center (Jacksonville)$34.8M$52.6M+$17.8M34%
Western Regional Medical Center$1.1M$18.1M+$16.9M94%
Lawrence & Memorial Hospital$21.1M$4.8M−$16.3M77%
Cook Children's Medical Center$11.3M$26.8M+$15.5M58%
Bayfront Health St. Petersburg$4.4M$17.6M+$13.2M75%

The full ranked index of all 99, and a searchable lookup of all 1,295 systems, is at troveproject.com/hospitals. The IRS figure for each hospital links to its actual 990 on ProPublica so you can check it yourself. (Figures are rounded to $0.1M; differences are computed from the exact values.)

Notice something in that list: Yale New Haven, Greenwich, and Lawrence & Memorial — plus Bridgeport, just outside the top eight — are all part of Yale New Haven Health. Several hospitals in one system, all showing large same-direction gaps. That's exactly what you'd expect when a system applies one financial-assistance policy and one Schedule H costing method across all its hospitals: a methodological signature, not evidence that any one hospital did something wrong. But it's the kind of pattern the index surfaces that a single filing never would — a reason to ask a system how it costs financial assistance, not to assume the answer.

A gap is not an accusation

This is the part that matters, and it's why the tool leads with the source documents. A difference between these two numbers does not mean a hospital did anything wrong, and it is not evidence of fraud.

The two forms genuinely define and cost charity care differently: where the line falls between "charity care," "bad debt," and "contractual allowance"; how uninsured discounts are classified; and the cost-to-charge methods each form permits. On top of that, the reliability of S-10 charity-care reporting has been questioned for years — MedPAC has repeatedly flagged S-10 data quality — so in many cases the gap is simply that one figure, often the S-10 side, is incompletely reported. (A few children's and specialty hospitals bill so little Medicare that they file no Medicare cost report at all, or an S-10 with almost nothing in it — so a near-zero S-10 should be treated as suspect, not as a real zero.)

None of this is secret. That the S-10 and Schedule H charity-care figures diverge is a well-documented reporting inconsistency, not a novel finding: the GAO has noted there is no standard definition of uncompensated care across federal programs (GAO-16-568) and has separately scrutinized Schedule H reporting (GAO-20-679); the Congressional Research Service laid out the differing Medicare and IRS charity-care definitions (2018); and health-services researchers have compared the two sources (Zare et al., Health Services Research, 2022). What hasn't existed is a fast way to check it for a specific hospital, with a link to both filings. That's the whole point of this tool: not to accuse, but to make a known inconsistency legible — one hospital at a time.

Why I built it

The raw data is public but punishing. CMS ships the Medicare Cost Reports as headerless, 100,000-row "long-skinny" CSVs. The IRS publishes 990s as XML inside bulk ZIP files. Lining up a single hospital's two charity-care numbers means parsing both, matching CCNs to EINs, and reconciling fiscal calendars — hours of work per hospital. trove does that parsing and joining once, for everyone, and publishes the result as clean tables plus a Claude Code skill you can ask questions in plain English.

Look up your hospital →
Search 1,295 nonprofit hospital systems. See what each told the IRS vs. CMS, side by side, with links to both filings.

Data: CMS HCRIS Worksheet S-10 (FY2023) × IRS Form 990 Schedule H (TY2022), joined via the Community Benefit Insight CCN↔EIN crosswalk. Method and every caveat: summary · ranked index: charity_care_gap_index_2022.md · all code MIT-licensed at github.com/cbetz/trove.