How many mobile wound care providers are there?

Mobile Wound Care
Author

Zwelithini Tunyiswa

Published

July 22, 2025

I was speaking to my co-founder of Open Wound Research, Ryan Dirks, and an interesting question came up between us. Just how many mobile wound care providers are there? By providers, I mean individual providers versus mobile wound care groups. This got my curiosity going, and I thought I would work in public to estimate this number. I am going to use CMS Medicare Utilization by Provider and Service file. Unfortunately, the data is only available up to calender year 2023.

Let’s load the file, and get started.

Code
df_utilization_data = (pl
  .read_csv(data_file, infer_schema_length=0, null_values=[""])
  .select('Rndrng_NPI', 'Rndrng_Prvdr_Ent_Cd', 'Rndrng_Prvdr_State_Abrvtn', 'Rndrng_Prvdr_Type', 'Place_Of_Srvc', 'HCPCS_Cd', 'Tot_Benes', 'Tot_Srvcs')
  .with_columns(pl.col('Tot_Benes', 'Tot_Srvcs').cast(pl.Float64))
  )

df_utilization_data.glimpse()
Rows: 9660647
Columns: 8
$ Rndrng_NPI                <str> '1003000126', '1003000126', '1003000126', '1003000126', '1003000126', '1003000126', '1003000126', '1003000134', '1003000134', '1003000134'
$ Rndrng_Prvdr_Ent_Cd       <str> 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I'
$ Rndrng_Prvdr_State_Abrvtn <str> 'MD', 'MD', 'MD', 'MD', 'MD', 'MD', 'MD', 'IL', 'IL', 'IL'
$ Rndrng_Prvdr_Type         <str> 'Hospitalist', 'Hospitalist', 'Hospitalist', 'Hospitalist', 'Hospitalist', 'Hospitalist', 'Hospitalist', 'Pathology', 'Pathology', 'Pathology'
$ Place_Of_Srvc             <str> 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F'
$ HCPCS_Cd                  <str> '99221', '99222', '99231', '99232', '99233', '99238', '99239', '88304', '88305', '88312'
$ Tot_Benes                 <f64> 12.0, 22.0, 76.0, 180.0, 53.0, 25.0, 188.0, 118.0, 1974.0, 160.0
$ Tot_Srvcs                 <f64> 12.0, 22.0, 127.0, 341.0, 79.0, 26.0, 195.0, 128.0, 2988.0, 272.0

We grabbed a couple of columns that we will need, i.e. The rendering NPI, Entity Type, the State, the Provide Type and the HCPS Code, Beneficiars, and Encounters. First, let’s filter down to providers who have E&M services that are mobile (here we will use nursing home, and home and residence services).

Code
snf_em_codes = ['99304', '99305', '99306', '99307', '99308', '99309', '99310']
home_residence_em_codes = ['99341', '99342', '99344', '99345', '99347', '99348', '99349', '99350']

mobile_em_codes = snf_em_codes + home_residence_em_codes

df_mobile_em_cohort = (df_utilization_data
  .filter(pl.col.Rndrng_Prvdr_Ent_Cd.is_in(['I'])) 
  .filter(pl.col.HCPCS_Cd.is_in(mobile_em_codes))
  )

df_mobile_em_cohort.select(total_general_mobile_providers = pl.col.Rndrng_NPI.n_unique())
shape: (1, 1)
total_general_mobile_providers
u32
49670

Ok, so when we filter down to providers who billed for mobile E&M codes, we can see that there are 49,670 general mobile providers.

Now, to help identify the wound care providers, let’s filter out providers who used a debridement, NPWT or CAMPS HCPCS code.This is crude, but the best we can do. We will also filter out non-mobile by including only the providers in the E&M mobile cohort.

Code
debridement_codes = ['11042', '11043', '11044', '11045', '11046', '11047', '99309', # surgical debridement
  '97597', '97598', '97602', '97605', '97606', '97607', # active (non surgical debridement)
  '97610' # Non-contact ultrasound debridement
  ]

npwt = [str(code) for code in range(97605, 97609)]

cpt_application_codes = [str(code) for code in range(15271, 15279)]
CAMPS_C_codes = ["C" + str(code) for code in range(5271, 5279)]
CAMPS_Q_coes = ["Q" + str(code) for code in range(4100, 4383)]

wound_procedures = debridement_codes + npwt + cpt_application_codes + CAMPS_C_codes + CAMPS_Q_coes

df_wound_care_mobile_all = (df_utilization_data
  .filter(pl.col.HCPCS_Cd.is_in(wound_procedures)
          .and_(pl.col.Rndrng_NPI.is_in(df_mobile_em_cohort['Rndrng_NPI'].implode()))
          )
  )

df_wound_care_mobile_all.select(total_wound_care_mobile_providers = pl.col.Rndrng_NPI.n_unique())
shape: (1, 1)
total_wound_care_mobile_providers
u32
29958

There are 29,958 providers who had a mobile E&M AND provided advanced wound care services. That is a larger number than I expected! Let’s drill down further using a cumulative distribution function to examine the distribution of E&M encounters in CY2023.

Code
df_mobile_wound_care_encounters = (df_wound_care_mobile_all
                                   .filter(pl.col.HCPCS_Cd.is_in(mobile_em_codes))
                                   .group_by('Rndrng_NPI')
                                   .agg(pl.col.Tot_Srvcs.sum())
                                   )

ch_em_encounters = (alt
                    .Chart(df_mobile_wound_care_encounters)
                    .transform_density('Tot_Srvcs', as_=['Tot_Srvcs', 'density'], cumulative=True)
                    .mark_line()
                    .encode(x=alt.X('Tot_Srvcs').scale(type='log', domain=[.1, 20_000]).axis(title='Total Mobile E&M Services'), 
                            y=alt.Y('density:Q').axis(format='%')
                            )
                    .properties(width=600)
                    )

ch_em_encounters

Cumulative Distribution Function Plot of Total E&M Encounters

We can see that 30% of these providers had less than 100 mobile E&M encounters, and 50% had less than 200 mobile E&M encounters in CY2023.

Code
df_mobile_wound_care_encounters.select(greater_than_50_monthly_encounters_ratio = pl.col.Tot_Srvcs.filter(pl.col.Tot_Srvcs.ge(50*12)).count().truediv(pl.col.Tot_Srvcs.count()).round(3), 
greater_than_50_monthly_encounters_abs =  pl.col.Tot_Srvcs.filter(pl.col.Tot_Srvcs.ge(50*12)).count())
shape: (1, 2)
greater_than_50_monthly_encounters_ratio greater_than_50_monthly_encounters_abs
f64 u32
0.229 6435

22.9% (or 6,435) of these providers averaged at least 50 monthly E&M mobile encounters in CY2023. This seems like a fairer estimate of mobile wound care providers to me. That is still a larger number than I expected.

Suffice it to say, mobile wound-care consists of a large cohort of wound-care providers, who travel to provide care to where it is needed most; and continues to grow as a space to this day.