Hospital Price Transparency MRF Normalizer avatar

Hospital Price Transparency MRF Normalizer

Pricing

Pay per event + usage

Go to Apify Store
Hospital Price Transparency MRF Normalizer

Hospital Price Transparency MRF Normalizer

Normalize hospital price transparency MRF files into clean payer, code, and negotiated rate rows for builders and buyers.

Pricing

Pay per event + usage

Rating

0.0

(0)

Developer

George Kioko

George Kioko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

18 days ago

Last modified

Share

Hospitals now publish price transparency MRF files with payer names, plans, billing codes, and negotiated rates, but the files are usually too large and inconsistent to use directly. CMS added new 2026 template fields and began enforcement for those fields on April 1, 2026, which means hospitals, consultants, TPAs, employers, revenue cycle teams, and data buyers need cleaner feeds now. This Actor turns public hospital MRF files into normalized rows that can go straight into a dataset, warehouse, quoting tool, or benefits product.

Quick start

Normalize one public hospital MRF:

curl "https://george-the-developer--hospital-mrf-normalizer.apify.actor/normalize?url=https%3A%2F%2Frequest.cooperhealth.org%2Ffinancial%2F210634462_CooperUniversityHealthCare_standardcharges_update.csv&hospital=Cooper%20University%20Hospital&limit=50" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"

Discover MRF links from a hospital pricing page or domain:

curl "https://george-the-developer--hospital-mrf-normalizer.apify.actor/discover?hospital=cooperhealth.org" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"

What it returns

Every normalized row uses the same field names, whether the source file is JSON, CSV, or gzip compressed JSON or CSV.

For best results, pass a direct file URL plus the hospital name. Discovery is free and useful for finding likely files, but hospital websites move links often and some publish several facility files from one page. If the file is very large, start with limit=50, inspect the dataset, then raise the limit for the full pull. The Actor skips rows that do not have a numeric payer rate because blank contract rows are noise for downstream buyers.

FieldMeaning
hospital_idStable slug derived from the hospital name
hospital_nameHospital display name from input or source file
provider_npiType 2 NPI when present
billing_codeCPT, HCPCS, DRG, revenue code, or local code
billing_code_typeCPT, HCPCS, DRG, MS DRG, APR DRG, EAPG, RC, or LOCAL
billing_code_descriptionPlain description of the service
payer_nameInsurance payer name
plan_namePlan name when present
negotiated_rateParsed numeric negotiated dollar rate
negotiated_typenegotiated, fee schedule, percentage, per diem, or case rate
expiration_dateContract expiration date when present
modifiersBilling modifiers as an array when present
service_settinginpatient, outpatient, both, or null
source_urlOriginal MRF URL
last_updatedISO timestamp for the row

Architecture

graph LR
A[Input URL or hospital domain] ==> B[Discover]
B ==> C[Fetch]
C ==> D[Format detect]
D ==> E[Stream parse]
E ==> F[Normalize]
F ==> G[Apify dataset]

The parser probes the first 2 KB of the stream, handles redirects, detects gzip bytes, rejects XML in v1, and caps reads at 1 GB per URL. JSON files are streamed with stream-json. CSV files are streamed with csv-parse. The Actor does not load full MRF files into memory.

Pricing

EventPriceWhen it fires
actor start$0.50Once per paid normalize request or batch run
rate row$0.002Each normalized row pushed to the dataset
normalized bundle$0.02Each unique provider, billing code, and payer triplet

Health check literals such as example.com, test@gmail.com, stripe.com, test, and ping return mocked data and are not billed.

Positioning

Turquoise Health, Castlight, and similar products are full SaaS dashboards with their own workflows, contracts, and user interfaces. This Actor is different. It gives builders the raw normalized feed so they can plug hospital rates into their own search, quoting, plan design, procurement, or analytics stack without waiting on a sales cycle.

Use this when you want data rows, not another dashboard.

Use cases

  1. TPA shopping engine: compare negotiated rates across hospitals by payer, plan, CPT, and facility.
  2. Employer benefit lookup: show members expected negotiated rates for common procedures.
  3. Healthcare bluebook clone: build fair price bands from multiple hospital MRF feeds.
  4. Revenue cycle denial appeals: pull payer specific rates as support for underpayment review.
  5. M and A diligence: inspect payer mix and contract rate exposure across target facilities.

FAQ

Which formats are supported?

JSON, CSV, gzip JSON, and gzip CSV are supported in v1. The parser handles CMS v3 JSON files and common older flat CSV layouts.

Does it handle gzip?

Yes. The Actor detects gzip magic bytes and pipes the stream through Node gzip decompression before format detection.

What is not supported in v1?

XML MRF files, zip archives, XLSX files, multi file index expansion, and payer allowed amount files are not parsed in v1.

Why did my row count come back lower than the limit?

The limit is the number of source rows to scan. Rows with blank codes, blank payers, or non numeric rates are skipped because they do not produce useful normalized output.

Can I get a refund for a bad source file?

If the source URL returns unusable data or the Actor fails before pushing rows, open an issue on the Actor page with the run ID and URL. Failed runs and parser bugs are reviewed case by case.

Are there rate limits?

Bulk mode accepts up to 10 URLs per request. Keep limits low for first tests, then increase once you confirm the source format.

How do I contact the maintainer?

Open an issue on the Apify Actor page with the MRF URL, run ID, and what output you expected.