Image of computer code within an editor environment.

A Primer on MRF Structure: How to Find a Rate

by 
Matthew Robben
MRFs
October 14, 2022

Let’s say you live in Texas and have United Healthcare as your insurer. Your physician says you need a colonoscopy, but you want to make sure the procedure won’t break your family budget. Thanks to the new price transparency rules, you can call the physician’s office billing team and ask for an upfront good faith estimate, and they have to provide one for you.


Now, let’s say you’re the physician. Your United contract was signed ten years ago, you can’t make heads or tails from the PDF what the actual rate schedule is, your patients started asking you for binding estimates, and every colonoscopy you did for United patients last year seemed to pay out differently due to the way each procedure was coded plus the myriad copays and deductibles of each patient’s plan. You’d like to spot check your rates in the MRF files to be certain of your estimate, and you’d also like to benchmark your rates to other physicians to see where you sit in the market and whether or not it’s time for a contract renegotiation. 

You heard there’s these Machine Readable Files out there that have this information. So, how do we get to the specific data you need? Let’s walk down the chain together, and learn about the different components of MRF postings (and health insurance networks) along the way. 

At the macro level, each payer tends to have a directory site, which lists their plans and files. 

In the directory site, you’ll find lots of references to index files, in-network files, and allowed amount files. These are the three types of files required under the Transparency in Coverage Act. 

An index file is a listing of all the insurance plans the payer offers in a given state or across the country. It groups together sets of in-network files - the files that contain all the in-network contracted provider IDs and rates - with one allowed amount file that represent out-of-network charges allowed by that plan. Together, those files make up the transparency posting for the payer. 

Ok, so back to our example. You google United machine readable files and boom, https://transparency-in-coverage.uhc.com/ comes up. Easy peasy! You open that page up, and realize that United’s directory currently contains 48,719 entries. 

Now, you’re a pretty technical provider, you know about index files, you’re in United’s PPO provider network, and you’re not intimidated, so you go ahead and search the page for ‘Illinois PPO index’. Nothing. ‘Index’ has 21,894 hits so that’s no help.  ‘Illinois’ has 203 hits on stuff like  2022-10-01_COUNTY-OF-HENRY-ILLINOIS-GROUP-BENEFIT-PLAN_index.json. ‘PPO’ has 372 hits also listing various company names. You’re persistent, and Illinois seems small enough, so you keep scanning the names of what appear to be different companies, until, down at entry 44888, you see it: 2022-10-01_UnitedHealthcare-of-Illinois-Inc_index.json Aha!

You crack that open…and what’s inside? HMO, and ACOs, and individual plans in Illinois, but no reference to the PPO. Odd. You comb through more of the directory and find a different index file titled 2022-10-01_UnitedHealthcare-Insurance-Company-of-Illinois_index.json.  Sure enough, there’s your Options PPO plan reference on line 8. For that plan, there’s two in-network files - an Optum bundle payment file (not helpful) and the in network rates file for the PPO network. You go to download it - 3.73GB. Compressed. Ouch. 

If you haven’t already given up, this is where most folks will get off the MRF train. Downloading that file takes several minutes, and often the downloads will timeout or only partially complete depending on other demands on the server. Decompressed, that file expands out to 119.39 GB (side note: impressive compression ratio, UHC!), which most programs won’t be able to open or scan through even if you have the disk space. 

For the sake of continuing the journey, instead we’ll assume that you’re also in the United Illinois HMO provider network for individual / exchange plans. You go ahead and grab the in-network file for that, only 10.6 MB. Promising! Unpacked, it’s 343.7 MB, but hey, at least that’s openable. You crack open the file in your favorite text editor, and command-f for code 45378. Found it!

Author’s note: I tried to copy and paste the full line here, and it spanned 16 pages of text. The results have been truncated for visibility. 

{ "negotiation_arrangement":"ffs", "name":"COLONOSCOPY FLX DX W/COLLJ SPEC WHEN PFRMD", "billing_code_type":"CPT", "billing_code_type_version":"2022", "billing_code":"45378", "description":"Colonoscopy, flexible; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)", "negotiated_rates":[ { "provider_references":[ 431 ], "negotiated_prices":[ { "negotiated_rate":300.33, "service_code":[ "02", "05", "06", "07", "08", "19", "21", "22", "23", "24", "26", "31", "34", "41", "42", "51", "52", "53", "56", "61" ], "negotiated_type":"negotiated", "expiration_date":"9999-12-31", "billing_class":"professional", "billing_code_modifier":[ ], "additional_information":"" }, { "negotiated_rate":486.89, "service_code":[ ], "negotiated_type":"negotiated", "expiration_date":"9999-12-31", "billing_class":"professional", "billing_code_modifier":[ ], "additional_information":"" } ] }, { "provider_references":[ 125 ], "negotiated_prices":[ { "negotiated_rate":193.08, "service_code":[ "02", "05", "06", "07", "08", "19", "21", "22", "23", "24", "26", "31", "34", "41", "42", "51", "52", "53", "56", "61" ], "negotiated_type":"negotiated", "expiration_date":"9999-12-31", "billing_class":"professional", "billing_code_modifier":[ ], "additional_information":"" }, "..." ] } ] }

Ok, so we found some colonoscopy rates! Many of them, in fact, which is quite helpful. Unfortunately, a keen observer will immediately notice something - the provider reference field is just a number. It’s not an NPI, it’s not an EIN…it’s actually a backreference to a spot earlier in the file called the ‘provider_references’ list. Let’s take a peek at that:

Author’s note: Again, I tried to copy the whole list and it crashed my word processor. Results have been truncated for visibility.

‍[{"provider_groups": [{"npi": [1447255799], "tin": {"type": "ein", "value": "050540721"}}], "provider_group_id": 0}, {"provider_groups": [{"npi": [1922664622], "tin": {"type": "ein", "value": "824896471"}}], "provider_group_id": 1}...]}]

You’ve now gotten all the way through the puzzle. You just need to find your EIN or NPI in the provider references list, save that provider_group_id number, find the negotiated_rates segment of the code you care about, and find the blocks inside of it that match your provider_group_id. Let’s assume your NPI was in the provider_group_id 431. 

You’ll see from the file there are TWO rates for provider_group_id 431. 300.33, and 486.89. Both of those rates are listed as negotiated fee-for-service professional fees. So which do we use? 

This is where knowledge of medical billing and coding rules comes into play, and healthcare contracting in general. Many hospitals do not directly employ their physicians. The physicians instead have their own separate physician groups, and when they render services at a hospital, they are allowed to bill separately from the hospital. This is why you often go into a hospital, and wind up getting a bill from the hospital, plus one from your doctor, plus one from the anesthesiologist, etc. So in these rate files, one first has to be careful about the distinction between physician charges and institutional or ‘facility’ charges. 

The place of service also matters, because under the CMS payment structures, a physician billing for a service at their office (or ‘non-facility’ place of service) should get paid at a higher rate than a physician who performed the service at a ‘facility’ because the hospitals are submitting their own, separate institutional claim that covers the overhead of operating a hospital. Your typical doctor’s office isn’t allowed to do that, so an extra amount is added to the physician payment to compensate them for the overhead of running a doctor’s office. 

Ok, so let’s go back to the service_code field in our example above. The first rate shows place of service codes corresponding to hospitals and ASCs. The second, higher, rate has a site of service field that is blank. Odd. This isn’t the first piece of missing data you’ll come across in the files (NPIs, EINs, and prices are also often nulled out or missing), but in this case, it’s a fair assumption that non-facility or office site of service gets higher reimbursement than hospitals, this probably represents the office or non-facility rate. 

Now, assuming you track down everyone ELSE’s EIN and NPIs in this file, you can build yourself a nice distribution of everyone else’s rates, and decide if your 400 dollars is fair. (Or you can use Serif Health’s analytics tools and APIs to do this for you, instantly :P) 

You’ll find it's the most common rate range in UHC’s file…by raw count - but there’s a long tail of higher rates out there, and how you group together the players in the market matters. But that’s a post for another day. 

Happy rate hunting!