A complete ICD-10-CM reference for accurate osteoporosis coding, documentation, and reimbursement — updated for FY2026
Quick answer: Which osteoporosis code do I use?
| Clinical situation | Code category | Primary code |
| Patient has osteoporosis AND a current pathological fracture | M80 — with fracture | M80.0–M80.8 + site + laterality + 7th character |
| Patient has osteoporosis and NO current fracture | M81 — without fracture | M81.0, M81.6, or M81.8 + Z87.310 if prior fracture history |
The answer to that single question does the patient has a current pathological fracture. determines every osteoporosis claim you submit. The sections below explain how to build each code correctly, which Z codes are required, how to document medical necessity, and what each payer pays.
What Is Osteoporosis?
Osteoporosis is a metabolic bone disease characterized by decreased bone density and deterioration of bone tissue. The bones become weak and brittle. A fall that would not hurt a healthy person can cause a fracture. Even bending over or coughing can break a bone in severe cases.
The National Osteoporosis Foundation defines osteoporosis as a bone density T-score of -2.5 or lower on a DEXA scan. Osteopenia, the precursor condition, falls between -1.0 and -2.4.
Common clinical signs of osteoporosis:
- Back pain from vertebral compression fractures
- Loss of height over time
- Stooped or hunched posture (kyphosis)
- Fractures from minor falls or low-impact trauma
Fracture sites most associated with osteoporosis:
- Hip (femur neck)
- Spine (vertebral compression fractures)
- Wrist (distal radius)
- Shoulder (humerus)
- Pelvis
The Most Important Rule in Osteoporosis Coding
The ICD-10-CM classification divides osteoporosis into two mutually exclusive categories based on one question. Does the patient have a current pathological fracture at this encounter?
- If YES – current pathological fracture present: Code from M80 category (Osteoporosis with current pathological fracture)
- If NO – no current pathological fracture: Code from M81 category (Osteoporosis without current pathological fracture)
This distinction is not optional. It is the foundation of osteoporosis coding. Getting it wrong is the most common error that drives claim denials.
CMS Presumption Rule for Minor Trauma
Here is a rule that trips up many providers. CMS states that any patient with known osteoporosis who suffers a fracture from minor trauma should be coded to M80. The classification presumes such fractures are pathological in nature, even if the trauma would not break a healthy bone.
What counts as minor trauma? Falling from standing height. Bending over to pick up something. Coughing or sneezing. Getting out of a chair. These events do not break healthy bones. When they break an osteoporotic patient’s bone, the fracture is pathological. Code M80.
Do not use traumatic fracture codes (S-codes) for these patients. That is a direct path to denial.
M81 Codes – Osteoporosis Without Current Pathological Fracture
M81 codes apply when the patient has osteoporosis but no active fracture at the time of the encounter. These codes are used for routine follow-up visits, medication management, and annual wellness visits for osteoporotic patients.
M81.0 – Age-Related Osteoporosis Without Current Pathological Fracture
This is the most commonly used M81 code. It includes:
- Postmenopausal osteoporosis
- Senile osteoporosis (age-related bone loss in elderly patients)
- Involutional osteoporosis
- Osteoporosis NOS (not otherwise specified)
When to use M81.0:
- A 68-year-old woman with known osteoporosis comes for a routine follow-up. She has no new fractures. Her DEXA scan shows a T-score of -2.8. Code M81.0.
- A 75-year-old man with senile osteoporosis comes for a medication refill. No fracture. Code M81.0.
Documentation requirements for M81.0:
- Bone density T-score confirming osteoporosis (≤ 2.5)
- Patient age (typically >50 years for age-related type)
- No current fracture was explicitly stated
M81.6 – Localized Osteoporosis [Lequesne]
This code applies to regional bone loss affecting a single anatomical area. It is distinct from systemic osteoporosis. This code is rarely used in primary care. It is more common in orthopedics and rheumatology.
M81.8 – Other Osteoporosis Without Current Pathological Fracture
This code covers secondary osteoporosis, where the bone loss is caused by another condition or medication. Common causes include:
- Drug-induced osteoporosis (most commonly from chronic glucocorticoid use)
- Idiopathic osteoporosis (no identifiable cause, often in younger patients)
- Disuse osteoporosis (from prolonged immobilization)
- Post-oophorectomy osteoporosis (surgical removal of ovaries)
- Postsurgical malabsorption osteoporosis (after gastric bypass or bowel resection)
- Post-traumatic osteoporosis (regional bone loss after injury)
When to use M81.8:
- A 55-year-old woman had a hysterectomy with bilateral oophorectomy five years ago. She now has osteoporosis on DEXA. No fracture. Code M81.8.
- A patient on chronic prednisone for rheumatoid arthritis develops osteoporosis. No fracture. Code M81.8 plus the adverse effect code.
The Required Z Code with M81 – Z87.310
When a patient has a history of a healed osteoporotic fracture, providers must add Z87.310 (Personal history of healed osteoporosis fracture). This is not optional. The ICD-10 guidelines include a “use additional code” instruction.
Example:
A patient with known osteoporosis had a vertebral fracture two years ago. The fracture healed. Today she comes for a wellness visit with no current fracture.
Correct coding: M81.0 + Z87.310
The Z code tells the payer this patient has a fracture history, which affects risk adjustment and Hierarchical Condition Category (HCC) scoring.
M80 Codes – Osteoporosis With Current Pathological Fracture
M80 codes apply when the patient has a current pathological fracture at the time of the encounter. These codes require meticulous attention to four dimensions: type of osteoporosis, fracture site, laterality, and episode of care.
Two Subcategories by Osteoporosis Type
M80.0 – Age-related osteoporosis with current pathological fracture
Includes postmenopausal, involutional, senile, and NOS types presenting with an active fracture.
M80.8 – Other osteoporosis with current pathological fracture
Covers secondary forms including drug-induced, idiopathic, disuse, post-oophorectomy, postsurgical malabsorption, and post-traumatic osteoporosis.
Site Specification Using the 5th Character
| 5th Character | Anatomical Site |
| 0 | Unspecified site |
| 1 | Shoulder |
| 2 | Humerus |
| 3 | Forearm |
| 4 | Hand |
| 5 | Femur (includes hip fractures) |
| 6 | Lower leg |
| 7 | Ankle and foot |
| 8 | Vertebra(e) |
| A | Other site (including ribs) |
| B | Pelvis (added FY 2024) |
Laterality Using the 6th Character
For paired bones:
- 1 = right
- 2 = left
- 9 = unspecified laterality
For midline structures like vertebrae, use X as a placeholder.
The Mandatory 7th Character for Episode of Care
Every M80 code must end with a 7th character. This is not optional. Missing the 7th character is the leading cause of osteoporosis coding denials.
| 7th Character | Episode Type | When to Use |
| A | Initial encounter | Active treatment: surgery, ED visit, evaluation by a new physician, casting |
| D | Subsequently, routine healing | After active treatment ends, routine follow-up, cast removal, and medication adjustment |
| G | Subsequently, delayed healing | Fracture healing slower than expected |
| K | Subsequent, nonunion | The fracture failed to heal |
| P | Subsequently, malunion | Fracture healed in an improper position |
| S | Sequela | Late effects after the fracture have healed |
Example M80 Code Construction
Scenario: A 72-year-old woman presents to the emergency department with an acute vertebral compression fracture. She has known postmenopausal osteoporosis.
- Base code: M80.0 (age-related osteoporosis with fracture)
- 5th character (site): 8 (vertebra)
- 6th character (laterality): X (placeholder – vertebrae have no laterality)
- 7th character (episode): A (initial encounter)
Final code: M80.08XA
Z Codes That Support Osteoporosis Documentation
Z codes are not primary diagnoses. They provide additional clinical context that supports medical necessity and risk adjustment.
H3: Z13.820 – Encounter for Screening for Osteoporosis
This code is used when a patient without signs or symptoms undergoes screening for osteoporosis, typically a DEXA scan. The patient does not have a diagnosis of osteoporosis. The screening determines if they are at risk.
Important: This is not a diagnosis. It is a screening encounter code. It is billable but cannot be the principal diagnosis.
When to use Z13.820:
- A 65-year-old woman with no osteoporosis diagnosis presents for a routine DEXA screening
- An at-risk patient (family history, early menopause, long-term steroid use) requests osteoporosis screening
Z87.310 – Personal History of Healed Osteoporosis Fracture
This code is required when coding M81 for a patient with a prior osteoporotic fracture that has healed. It informs the payer that the patient has a fracture history even though no current fracture exists.
Z79.83 – Long-Term Use of Bisphosphonates
Use this code for patients on chronic bisphosphonate therapy (Fosamax, Actonel, Boniva, Reclast) for osteoporosis.
Z79.52 – Long-Term Use of Systemic Steroids
This code documents ongoing steroid use, which is a risk factor for drug-induced osteoporosis. Use it with M81.8 or M80.8 when steroids are the cause.
CPT Codes for Osteoporosis Services
Bone Density Testing (DEXA Scan)
| CPT Code | Description |
| 77080 | DXA scan, axial skeleton (hip and spine) |
| 77081 | DXA scan, appendicular skeleton (peripheral, such as forearm or heel) |
| 77085 | DXA with vertebral fracture assessment |
| 77086 | Vertebral fracture assessment only |
Medicare coverage for DEXA: Medicare covers a DEXA scan once every 24 months for at-risk beneficiaries. At-risk individuals include women 65 and older, men 70 and older, and younger patients with a fracture history or risk factors.
Screening vs. diagnostic DEXA:
- Use Z13.820 with 77080 for screening when no symptoms or prior diagnosis exist
- Use M81.0 or M85.80 with 77080 for diagnostic testing when osteoporosis is suspected or already diagnosed
Osteoporosis Treatment Injections
Two injectable medications are commonly used for osteoporosis. Both are covered under Medicare Part B because a healthcare professional administers them.
| HCPCS Code | Medication | Administration |
| J0897 | Denosumab (Prolia) | Subcutaneous injection every 6 months |
| J3489 | Zoledronic acid (Reclast) | Intravenous infusion annually |
Medicare documentation requirements for Prolia:
- Documentation of osteoporosis diagnosis
- Patient age and sex
- Menopausal status for women
- History of previous fractures
- Risk factors for future fractures
- Documentation that the patient is supplementing with vitamin D and calcium
Injection administration codes:
- 96372 for subcutaneous or intramuscular injection (Prolia)
- 96365-96379 for infusion administration (Reclast, based on time)
Office Visit Codes
Standard Evaluation and Management codes (99202-99215 for office/outpatient visits) apply to osteoporosis follow-up visits. The level of service depends on medical decision-making or time.
Documentation Requirements for Accurate Coding
Payers deny osteoporosis claims when documentation lacks key details. Here is what every osteoporosis note needs.
Osteoporosis type
- Age-related, postmenopausal, senile, drug-induced, disuse, post-oophorectomy, or other secondary cause
DEXA scan results
- T-score value (<- 2.5 confirms osteoporosis)
- Site scanned (hip, spine, or forearm)
- Date of most recent DEXA
Fracture status
- Explicit statement of whether a current pathological fracture is present or absent
- If fracture present: site, laterality, and date of fracture
Episode of care (for fractures)
- Initial treatment, routine healing, delayed healing, nonunion, malunion, or sequela
Causative medications (for drug-induced cases)
- Specific medication (most commonly glucocorticoids like prednisone)
- Dosage and duration of therapy
Link between conditions
- An explicit statement connecting the fracture to the underlying osteoporosis
| Sample Documentation M81.0 (No Fracture) “Patient is a 68-year-old postmenopausal female with known age-related osteoporosis confirmed by DEXA scan on 3/15/2026, showing a T-score of -2.8 at the left hip. She has no current fractures. She is compliant with calcium and vitamin D supplementation and receives Prolia injections every six months. She reports no back pain, height loss, or new falls. Follow-up DEXA scheduled for next year.” M80.08XA (Vertebral Fracture) “Patient is a 72-year-old female with known postmenopausal osteoporosis. She presents today with an acute onset of mid-back pain after bending to pick up a grocery bag. X-ray shows an acute T12 vertebral compression fracture consistent with a pathological fracture due to osteoporosis. This is an initial encounter for this fracture. Plan includes pain management, bracing, and fall prevention education.” |
Common Osteoporosis Coding Errors and How to Avoid Them

Missing 7th Character on M80 Codes
This is the number one cause of osteoporosis coding denials. An M80 code with fewer than seven characters is incomplete. The payer rejects it automatically.
How to avoid: Review every M80 code before submission. Confirm it has exactly seven characters. Use X as a placeholder when laterality does not apply.
Using M81 When a Fracture Is Present
Some providers code M81 (without fracture) even when the patient has an active fracture. This is incorrect. Any patient with known osteoporosis who has a current fracture needs an M80 code.
How to avoid: Before assigning M81, ask: “Does this patient have a current pathological fracture?” If yes, use M80.
Using Traumatic Fracture S-Codes Instead of M80
A patient with known osteoporosis falls from standing height and fractures her wrist. The provider documents “wrist fracture, fall” and assigns an S-code. The claim is denied because the mechanism does not match the injury. Healthy wrists do not break from standing height falls.
How to avoid: For any patient with known osteoporosis who fractures from minor trauma, use M80. The fracture is pathological, not traumatic. This is CMS guidance, not optional.
Omitting Z87.310 with M81
Providers code M81.0 for a patient with known osteoporosis and a history of healed fracture. They do not add Z87.310. The ICD-10 guidelines explicitly require this additional code.
How to avoid: When coding M81 for any patient with a prior osteoporotic fracture, add Z87.310. Make this a standard part of your M81 coding workflow.
Wrong Encounter Type Selection
Providers use “A” (initial) for a follow-up visit. Or they use “D” (subsequent) for a patient still in active treatment. The 7th character must match the actual phase of care.
How to avoid:
- Use “A” for the first visit after fracture, surgery, ED evaluation, or casting
- Use “D” for routine follow-up after active treatment ends
- Use “G” for follow-up when healing is slower than expected
- Use “K” for fractures that have not healed at all
- Use “P” for fractures that healed in the wrong position
- Use “S” for late effects like chronic pain from a healed fracture
Not Linking Drug-Induced Osteoporosis to the Medication
A patient on chronic prednisone develops osteoporosis and fractures. The provider codes only M80.8. The payer sees no link to the causative medication and questions medical necessity.
How to avoid: For drug-induced osteoporosis with fracture, code:
- First: M80.8- (other osteoporosis with current pathological fracture)
- Second: T38.0X5A (adverse effect of glucocorticoids or synthetic analogues)
- Third: Z79.52 (long-term use of systemic steroids)
Risk Adjustment and HCC Coding
Osteoporosis affects Hierarchical Condition Category (HCC) risk scores in Medicare Advantage and value-based care models.
- M80 codes (with fracture): These carry HCC weight. A current pathological fracture from osteoporosis is a significant condition that affects risk scores and capitation payments.
- M81 codes (without fracture): These generally do not carry HCC weight unless other co-existing conditions apply.
- Z87.310 (history of healed fracture): This code also carries HCC weight because a prior fracture indicates high fracture risk even when no current fracture exists.
Providers in value-based contracts should document and code osteoporosis accurately to ensure appropriate risk adjustment. Undercoding leaves money on the table. Overcoding invites audit risk. Accurate coding based on documentation is the goal.
Audit Risks and Compliance
Osteoporosis coding is a common target for Medicare audits. Here are the red flags that trigger audits.
Frequent M80 coding without DEXA confirmation
If a provider bills M80 codes repeatedly without DEXA documentation, auditors question whether osteoporosis was ever confirmed.
Red Flag #2 – M80 codes with no fracture site or laterality
Missing site and laterality information suggests the coder guessed. Auditors look for specificity.
Traumatic S-codes for osteoporotic patients
Using S-codes instead of M80 for patients with known osteoporosis who fracture from minor trauma violates CMS guidance. Auditors flag this as incorrect coding.
M81.0 without DEXA documentation
Coding osteoporosis without a DEXA T-score to support it invites audit scrutiny. Document the T-score in every osteoporosis note.
Missing Z87.310 with M81 for fracture history patients
The ICD-10 guidelines require this additional code. Missing it is a compliance issue.
Payer Reimbursement Rates and Fee Schedules for Osteoporosis Services
A provider bills a DEXA scan for an at-risk Medicare patient. The claim pays $42. The same provider bills the same DEXA scan for a commercial patient. The claim pays $87. The provider bills a Prolia injection for a Medicaid patient. The claim pays $14 for the administration. The provider has no idea if these numbers are correct.
This happens because providers do not understand how different payers reimburse for osteoporosis services. Medicare has a published fee schedule that changes every year. Medicaid rates vary by state and are often lower. Commercial payers negotiate rates individually with each practice. Workers’ compensation pays at different rates entirely.
Let’s see the reimbursement rates for the key osteoporosis services: DEXA scans (77080, 77081, 77085) and injection administration (96372).
DEXA Scan Reimbursement Rates
| CPT Code | Service | Medicare | Medicaid (Colorado) | Commercial | Workers’ Comp | Self-Pay |
| 77080 | Axial DEXA (hip and spine) | $42 – $65 | $35 – $50 | $70 – $120 | $80 – $110 | $50 – $150 |
| 77081 | Peripheral DEXA (wrist, heel) | $25 – $40 | $20 – $30 | $50 – $90 | $55 – $75 | $40 – $100 |
| 77085 | DEXA with vertebral fracture assessment | $55 – $80 | $45 – $65 | $90 – $150 | $100 – $140 | $75 – $200 |
Injection Administration Reimbursement Rates
| CPT Code | Service | Medicare | Medicaid (Colorado) | Commercial | Workers’ Comp | Self-Pay |
| 96372 | Subcutaneous or IM injection | $13 – $16 | $8 – $12 | $15 – $25 | $18 – $28 | $20 – $35 |
Osteoporosis Medication Reimbursement Rates
| HCPCS Code | Medication | Medicare (ASP + 6%) | Medicaid (Colorado) | Commercial | Workers’ Comp | Self-Pay |
| J0897 | Prolia (denosumab) per 1 mg | $45 – $55 | $35 – $45 | $50 – $75 | $55 – $70 | $60 – $100 |
| J3489 | Reclast (zoledronic acid) per 1 mg | $12 – $18 | $8 – $12 | $15 – $25 | $18 – $22 | $20 – $35 |
Prolia Complete Visit (Medication + Administration)
| Payer | Total Reimbursement |
| Medicare | $120 – $140 (60 mg dose + 96372) |
| Medicaid (Colorado) | $90 – $110 (60 mg dose + 96372) |
| Commercial | $130 – $180 (60 mg dose + 96372) |
| Workers’ Comp | $150 – $200 (60 mg dose + 96372) |
| Self-Pay | $800 – $1,200 (full retail) |
DEXA Scan Frequency Limits
| Payer | Routine Screening | Treatment Monitoring |
| Medicare | Once every 24 months | As medically necessary |
| Medicaid (Colorado) | Once every 24 months | As medically necessary |
| Commercial | Varies by plan | Varies by plan |
Conclusion
Osteoporosis coding comes down to one question. Does the patient have a current pathological fracture?
If yes, code M80. Include the site, laterity, and the mandatory 7th character for the episode of care. Do not use traumatic S-codes for osteoporotic patients who fracture from minor trauma. CMS explicitly states these fractures are pathological, not traumatic.
If no, code M81. Add Z87.310 when the patient has a history of a healed osteoporotic fracture. The ICD-10 guidelines require it.
Document the DEXA T-score in every osteoporosis note. Specify the type of osteoporosis. Link drug-induced cases to the causative medication. Train billers to check for the 7th character on every M80 code. Run monthly audits to catch patterns of incorrect code selection.
Osteoporosis affects over 10 million Americans. It causes over 2 million fractures each year. Providers who code it correctly get paid appropriately. Providers who code it incorrectly face denials, audits, and recoupments.
The rules are clear. The distinction between M80 and M81 is absolute. The 7th character on M80 codes is mandatory. The Z codes are required when applicable. Follow these rules. Document completely. Get paid correctly.
Frequently Asked Questions
What is the difference between M80 and M81 codes for osteoporosis?
M80 codes are used when the patient has a current pathological fracture due to osteoporosis. M81 codes are used when the patient has osteoporosis but no current fracture. This is the most important distinction in osteoporosis coding. Using the wrong category is the number one cause of claim denials.
What 7th character should I use for a follow-up visit after a healed osteoporotic fracture?
If the fracture has healed completely and the patient is no longer in active treatment, use M81 (osteoporosis without current fracture) plus Z87.310 (personal history of healed osteoporotic fracture). Do not use an M80 code with the 7th character “D” for a healed fracture. The “D” character is for subsequent encounters while the fracture is still healing, not after it has fully healed.
Can I use a traumatic fracture S-code for an osteoporotic patient who falls from standing height?
No. CMS explicitly states that any patient with known osteoporosis who suffers a fracture from minor trauma should be coded with M80. The fracture is considered pathological, not traumatic. Using S-codes for these patients is incorrect coding and will result in denials.
How often does Medicare cover a DEXA scan?
Medicare covers a DEXA scan once every 24 months for routine screening of at-risk beneficiaries. More frequent scans may be covered when medically necessary for patients on active osteoporosis treatment monitoring. The documentation must support the medical necessity for more frequent testing.
What documentation do I need for a Prolia injection to be reimbursed by Medicare?
Medicare requires documentation of osteoporosis diagnosis confirmed by DEXA, patient age and sex, menopausal status for women, history of previous fractures, risk factors for future fractures, and documentation that the patient is supplementing with vitamin D and calcium. Missing any of these elements can trigger a denial.
Do I need to add Z87.310 to every M81 code?
No. Z87.310 (personal history of healed osteoporotic fracture) is required only when the patient has a documented history of a prior osteoporotic fracture that has healed. If the patient has osteoporosis with no history of any prior fracture, Z87.310 is not used.
What is the reimbursement rate for CPT 96372 under Medicare?
The national average reimbursement for CPT 96372 (therapeutic injection administration) under Medicare ranges from $13 to $16. The exact amount varies by geographic location and Medicare Administrative Contractor (MAC). Providers should check their local MAC fee schedule for the specific rate in their area.
Can I bill both M80 and M81 codes on the same claim?
No. A patient cannot simultaneously have a current pathological fracture (M80) and no current fracture (M81). Choose the correct category based on the patient’s status at the time of the encounter. If a current fracture exists, use M80. If no current fracture exists, use M81.
Stop Osteoporosis Claim Denials Before They Start?
Osteoporosis coding errors are among the most common denials we see. Missing 7th characters. Wrong M80 versus M81 selection. Missing Z codes. Incorrect DEXA frequency. Each error costs you time and money.
RCM Xpert Medical Billing handles your osteoporosis claims from start to finish.
We verify DEXA frequency limits before you schedule. We review every M80 code for the correct 7th character. We add the required Z codes automatically. We document medical necessity for Prolia and Reclast injections. We appeal denials within payer deadlines. You get paid correctly on the first submission.



