Medicare Cost Report Pre-Audit QA
Check a hospital's Medicare cost report (Form CMS-2552-10) the way the deterministic part of a MAC review checks it, before you file. Send the ECR file and the bad debt and charity care listings. You get back every record that breaks the CMS file format, every worksheet tie that does not hold, every S-10 line that does not recompute, every listing problem and the filing deadline, each with the worksheet, line, column, and the expected and actual amounts.
Why it matters
- Missing listings mean a rejected report. A cost report without a bad debt listing that matches the bad debt claimed, or without the charity care listing that supports S-10, is rejected and treated as if it had never been filed (42 CFR 413.24(f)(5)).
- Bad debt has hard rules. Only unpaid deductible and coinsurance, billed within 120 days of the remittance advice, after at least 120 days of collection effort, written off in the period it is claimed (42 CFR 413.89).
- The clock is five months. Due on the last day of the fifth month after the period ends, with extensions only for extraordinary circumstances (42 CFR 413.24(f)(2)).
Sources: the regulations and CMS instructions linked at the bottom of this page.
A pre-audit math check, not a determination. This checks the format, the arithmetic, the ties and the listings. It does not judge cost finding choices or allowability. A PASS is not MAC acceptance and does not determine allowability or payment.
What it checks
- The ECR file. Record types 1 to 4 and the level 1 edits of the CMS ECR specifications: record length, upper case, unique record identifiers, line feeds, the CCN, the Julian dates and the period, plus the specification date.
- Worksheet ties. A to B, the B step-down, B to C, the C totals and charges, D Part V to E Part B, and the bad debt reduction on E.
- Worksheet S-10. The cost-to-charge ratio from Worksheet C, then lines 7 to 31 recomputed, lines 27 and 27.01 tied to Worksheet E, and the S-10 edits.
- Listings present. Exhibit 2A when Medicare bad debts are claimed, 3B for S-10 charity care, 3C for S-10 bad debts.
- Listings correct. Totals that match the worksheets, no duplicate accounts, write-offs inside the period, the 120-day rules, bad debt within deductible and coinsurance, and no physician or professional charges counted.
- Prior years. Accounts already claimed, when last year's listings are in the package.
- The deadline. Five months after the period ends, or 150 days for a mid-month end.
Every report prints the transmittal and ECR specification it was checked against.
Who it's for
Thousands of hospitals file a Medicare cost report every year.
- Hospital reimbursement and finance teams: find the rejections and the arithmetic before the MAC does.
- Reimbursement consultants and preparers: a consistent last pass on every client's file.
- DSH hospitals: S-10 and its listings, line by line, against each other.
Not checked
- Whether any cost, bad debt or charity care is allowable, or what Medicare will pay.
- Statistics, allocation bases, reclassifications and adjustments, taken as filed.
- Collection documentation, indigence files and Medicaid remittances behind the listings.
- The type 4 encryption code itself, which only approved vendor software produces.
- Cost reporting periods beginning before October 1, 2022, and packages over 4 MB.
- Listings with PHI: they are refused, not checked.
Input and output
Send
A .zip with the ECR file and the de-identified listings (or the ECR file alone) as the request body, up to 4 MB, with the shifted
periodStartandperiodEndand optionallyasOf(YYYY-MM-DD) in the query string.Check
Every rule on this page. Standard library code, no network calls, nothing stored.
Report
JSON with
status,checkedAgainst,deadline,checks,listingsandfindings(worksheet, line, column or listing row and row ID, expected, actual, message, source). Day counts, never dates.
Every field and rule ID is in the API docs.
Try it now
The sample packages run free. Your own cost report runs as a paid pre-audit at $200.00 from your credit.
Prepare your file
The listings come to SpreadRun without PHI. Three steps, in your own copy of the files:
Replace the identifiers
Replace every account number with a row ID (R1, R2, R3, or 1, 2, 3), the same ID for the same account on every listing. Delete the patient name and MBI columns. Where a Medicaid number marks a dual eligible beneficiary, put Y instead of the number.
Shift the dates
Pick a number of days, say 1,000, and move every date in the listings forward or back by exactly that many: dates of service, bills, remittances, write-offs and the FYB and FYE cells at the top.
Shift the period
Enter the period start and end below, moved by the same number of days. Send the ECR file as it is: it holds no patient data.
If no write-off lands inside the period you enter, the report warns that the period was probably not shifted by the same number of days as the listing dates.
- PassECR file format
- FailWorksheets tie
- FailS-10 recomputes
- FailListings support the claims
- PassDeadline
- FailExhibit 2A, Medicare bad debts: 22 rows, required by what the report claims
- FailExhibit 3B, charity care: 0 rows, required by what the report claims
- FailExhibit 3C, total bad debts: 298 rows, required by what the report claims
- ErrorWorksheet B, Part I, line 60, column 0
TIE-A-BExpected 1,436,978Actual 1,441,978Worksheet B, Part I, column 0 must carry the total direct cost from Worksheet A, column 7, for the same line. - ErrorExhibit 2A MedicareBD_IP_999208.xlsx row 23, column 17
BD-120-DAYSExpected 120 days or moreActual 60 daysWritten off 60 days after the first bill. Collection effort must last at least 120 days after the first bill before the account is written off (42 CFR 413.89(e)(2)(i)(A)(5)). - ErrorExhibit 2A MedicareBD_IP_999208.xlsx row 23, column 13
BD-BILL-120Expected 120 days or fewerActual 287 daysThe first bill went out 287 days after the later remittance advice. The beneficiary must be billed within 120 days of it (42 CFR 413.89(e)(2)(i)(A)(3)). - ErrorExhibit 2A MedicareBD_IP_999208.xlsx row 29, column 23
BD-CAPExpected at most 1126.45Actual 1,276.45The allowable bad debt (column 23) is more than the deductible and coinsurance (columns 20 and 21) less recoveries and payments (columns 18 and 22). Medicare bad debt can only come from unpaid deductible and coinsurance. - ErrorExhibit 3B
LIST-MISSINGWorksheet S-10, line 20 claims charity care but no Exhibit 3B listing is in the package. A cost report is rejected without the listing that supports the charity care claimed (42 CFR 413.24(f)(5)(i)(D)). - ErrorExhibit 3C TotalBD_999208.xlsx row 19, column 5
TBD-DUPLICATEActual account B0000005Account B0000005 is listed twice for the same dates of service (rows 18 and 19). Claim each account once. - ErrorWorksheet S-10, Part I, line 30, column 1
S10-LINEExpected 453,134Actual 465,134Line 30 (cost of uncompensated care) must be line 23, column 3 plus line 29.
Checked against CMS Pub. 15-2, chapter 40, Transmittal 26 (June 30, 2026), ECR specification 2026181.
Pricing
$200.00 per completed pre-audit. One cost report, its listings, one full report.
- Billed when a report is produced, PASS, WARN or FAIL. Invalid input is never billed.
- Paid from the same prepaid credits as every SpreadRun API, in $5, $20, $50, $100, $250 or $500 packs. A $250 pack covers 1 pre-audit and a $500 pack covers 2. Credits never expire. All pricing
- Preparing cost reports for many hospitals? Talk to us first so we can tell you honestly whether this fits.
Call it from code
Parameters, report fields, rule IDs, error codes and limits are in the API docs.
cd cost_report_fy2025 && zip ../package.zip ECnnnnnn.25A1 MedicareBD_IP.xlsx MedicareBD_OP.xlsx Charity.xlsx TotalBD.xlsx
curl -X POST "https://www.spreadrun.com/api/v1/hcris-preaudit-qa?periodStart=2022-10-04&periodEnd=2023-10-03" \
-H "Authorization: Bearer $SPREADRUN_API_KEY" \
-H "Content-Type: application/zip" \
--data-binary @../package.zipQuestions
Does a PASS mean the MAC will accept the cost report, or that the amounts are allowable?
No to both. A PASS means the ECR file is in the CMS format, the worksheets tie, S-10 recomputes and the listings support what the report claims. A PASS is not MAC acceptance and does not determine allowability or payment. The MAC runs its own edits, desk review and audit, and the amounts you claim remain your responsibility.
What do I send?
The ECR file your cost report software exports for MCReF, as it is, and the listings that support it, de-identified: Exhibit 2A for Medicare bad debts (inpatient and outpatient), Exhibit 3B for charity care and Exhibit 3C for total bad debts, in the CMS template layout as .xlsx or as .csv in the same grid. Zip them together, or pick them all in the form and the browser zips them. Add last year's listings, prepared the same way with the same shift, and the check also looks for accounts claimed again.
Why shift the dates, and does it change the results?
Real dates of service are PHI, so they never leave your hands. Every listing check measures days between dates: a write-off inside the period, 120 days of collection effort after the first bill, a bill within 120 days of the remittance advice. Move every listing date and the period by the same number of days and each of those counts stays the same, so the findings do too. The filing deadline comes from the real period in the ECR file, which is public cost report data.
What if a listing still has patient information in it?
It is refused before any check runs, without a charge, with the file, row and column. The check looks for MBIs, HICNs, Social Security numbers, long account or Medicaid numbers, and text that reads like a patient name, and for anything in the name or MBI columns. A listing whose period is the real one, not shifted, is refused too. Reports name rows by row number and your row ID and give day counts, never dates.
What does it recompute?
Worksheet B, Part I, column 0 against Worksheet A, column 7, line by line; the step-down total on Worksheet B; Worksheet B, column 26 into Worksheet C, column 1; Worksheet C totals, line 202 and total charges; Worksheet D, Part V into Worksheet E, Part B, line 1; the 35 percent bad debt reduction on Worksheet E; and every line of Worksheet S-10 that is a calculation, including lines 27 and 27.01 against Worksheet E and the other worksheets the instructions name. Each finding gives the worksheet, line, column, expected and actual.
Which listings does it expect?
The ones the cost report itself calls for. Medicare bad debts on Worksheet E need Exhibit 2A; charity care on S-10, line 20 needs Exhibit 3B; bad debts on S-10, line 26 need Exhibit 3C. A cost report filed without the bad debt or charity care listings that correspond to the amounts claimed is rejected and treated as if it had never been filed (42 CFR 413.24(f)(5)). Each listing must add up to the line it supports.
Which bad debt rules does it check?
From 42 CFR 413.89 and the Exhibit 2A instructions: the account written off inside the cost reporting period, at least 120 days of collection effort after the first bill, the first bill within 120 days of the remittance advice, the allowable amount no larger than the deductible and coinsurance less payments and recoveries, the Medicaid remittance date for dual eligible beneficiaries, and the order of the write-off dates. Indigent and dual eligible beneficiaries follow their own rules and are not held to the 120 days.
Which version of the specifications is it checked against?
CMS Pub. 15-2, chapter 40, Transmittal 26 (June 30, 2026), with ECR specification 2026181. Every report prints it. A file built to an older specification than the one in effect for its period end gets a warning. This version checks cost reporting periods beginning on or after October 1, 2022, the periods that use Exhibits 2A, 3B and 3C.
When is the cost report due?
On or before the last day of the fifth month after the period ends: a June 30 year end is due November 30, a December 31 year end May 31. A period that ends mid-month is due 150 days later. Extensions are granted only for extraordinary circumstances beyond your control, such as a flood or fire (42 CFR 413.24(f)(2)). Past the date, the report warns and still checks the rest.
When is a run charged?
When the pre-audit finishes and returns a report, whether it says PASS, WARN or FAIL: $200.00 per completed pre-audit. Requests rejected before a report exists are free, such as a file that is not an ECR file, a package over 4 MB, a missing period, or a listing with patient identifiers.
Can I try it for free?
Yes, on the two sample packages on this page: a clean cost report with its listings, and the same report with planted errors. The ECR file in both carries the amounts of a real cost report from the CMS HCRIS dataset with the hospital's name, address and CCN replaced; the listings are invented. They run free, up to 10 times a day. Your own cost report is the paid pre-audit: sign in with enough credit and run it from the same form, or call the API.
Sources
- 42 CFR 413.24(f)(2): due dates for cost reports
- 42 CFR 413.24(f)(5): an acceptable cost report submission, the listings it needs and the ECR Specifications Manual
- 42 CFR 413.89: bad debts, charity and courtesy allowances, including the 120-day collection effort
- CMS Pub. 15-2, chapter 40 (Form CMS-2552-10), Transmittal 26, June 30, 2026: worksheet instructions, Exhibits 2A, 3B and 3C, and the ECR specifications in section 4095
- CMS electronic cost report exhibit templates and specifications for Exhibits 2A, 3B and 3C
- CMS Healthcare Cost Report Information System (HCRIS) cost report data, used for the test corpus
SpreadRun is not affiliated with or endorsed by CMS or any Medicare Administrative Contractor. Where this check and the regulations or CMS instructions differ, they control.
More validators: PBJ Staffing Data Pre-Submission QA | Hospital Price Transparency MRF Validator | the full catalog