HCPCS code P2031 – Hair analysis (excluding arsenic)
P2031 is the HCPCS Level II code for hair analysis (excluding arsenic). It reports a laboratory analysis of a hair specimen for minerals and trace elements, other than arsenic.
The code sits in the P-series that CMS maintains for pathology and laboratory services. Its sub-range, P2028 through P2038, covers laboratory tests of blood and hair. Medicare does not cover P2031, because National Coverage Determination 190.6 rules hair analysis not reasonable and necessary. Arsenic testing is billed with CPT 82175 instead.
- Level
- Level II
- Category
- P — Pathology and laboratory services
- Code range
- P2028-P2038 Laboratory tests of blood and hair
- Billable
- No
- Code also known as
- hair mineral analysis, hair tissue mineral analysis (HTMA), trace element hair analysis
Let Pabau's smart automation suggest the right codes, reduce claim denials, and keep your practice compliant—effortlessly.
- AI-powered code suggestions
- Real-time compliance checks
- Faster claims, fewer denials
Automate repetitive tasks and focus on what matters most—your patients.
Reduce coding errors and ensure compliance with the latest regulations.
Clean claims, fewer denials, and faster reimbursements.
Powerful insights and reporting to help your practice thrive.
HIPAA compliant SOC 2 certified GDPR-compliant Trusted by 4,000+ clinics worldwide
Key takeaways
HCPCS code P2031 covers hair analysis (excluding arsenic), a P-series laboratory code that CMS maintains.
Medicare does not cover P2031, because National Coverage Determination 190.6 finds hair analysis not reasonable and necessary.
Arsenic testing on hair is billed with CPT 82175 or 83015, never with P2031.
A signed ABN and the GA modifier let the laboratory bill the patient once Medicare denies the P2031 line.
Pabau’s practice software keeps the signed ABN, the order, and the self-pay invoice on one patient record.
HCPCS code P2031 covers hair analysis, minus arsenic
HCPCS code P2031 is the Level II code for hair analysis (excluding arsenic). It reports a laboratory analysis of a hair specimen for minerals and trace elements, billed per test by a CLIA-certified laboratory.
Level II codes open with a letter, while CPT codes run five digits. The P-series reports pathology and laboratory services, and CMS alone maintains it, as the CMS HCPCS overview sets out. The American Dental Association maintains only the D-series dental codes inside HCPCS.
P2031 was added to the code set in 1986, took effect in 1989, and has not changed since. It is still active in the 2026 code set. The table below carries the details a coder needs before billing it.
What a P2031 hair analysis measures
Hair analysis measures the minerals and trace elements laid down in the hair shaft as it grows. The laboratory washes and digests a sample cut close to the scalp. It then reports elements such as lead, mercury, cadmium, zinc, and copper.
Hair grows about a centimeter a month, so a sample reflects exposure over the past weeks or months. A blood draw shows only the levels on the day it was taken.
The test is often sold as hair tissue mineral analysis (HTMA) for nutritional or wellness screening. Medicare rejects that use, because hair results cannot be matched to the chemical state of the whole body. Shampoos, dyes, and contamination from the environment also skew the readings.
Why does P2031 exclude arsenic?
Arsenic is excluded because it is the one element where hair testing has an accepted clinical role. Arsenic binds to the keratin in hair, so a sample can confirm chronic exposure after the blood level has fallen.
Testing hair for arsenic is reported with CPT 82175 for arsenic, or CPT 83015 for a qualitative heavy metal screen. Aetna’s hair analysis policy shows the split. It calls chemical hair analysis experimental except for suspected chronic arsenic poisoning, and it lists P2031 among the codes it does not cover.
P2031 vs the CPT codes billed for hair and metal testing
The code follows the elements listed on the lab report. Match that report against the table below before you assign P2031.
Moving a hair mineral panel onto CPT analyte codes does not change its coverage. NCD 190.6 applies to hair analysis as a test, whichever code carries it. The NCD also makes no exception for arsenic, so confirm your MAC’s position before billing hair arsenic to Medicare.
P2031 is not the code for red blood cell antigen typing
Some code lookups list P2031 against red blood cell antigen typing, which is wrong. No HCPCS code describes that test. Serologic typing of RBC antigens is billed with CPT 86905 for each antigen, or CPT 86902 for donor units. DNA-based typing uses proprietary laboratory analysis codes such as 0001U.
Where P2031 sits in the P2028-P2038 range
P2031 is the only hair code in its sub-range. The other four, from P2028 to P2038, are blood tests. The descriptors below follow the 2026 CMS Clinical Laboratory Fee Schedule file.
Medicare and payer coverage for P2031
P2031 is non-covered by Medicare in every jurisdiction, and commercial plans set their own hair analysis policies. Settle who pays before the hair sample is cut, and quote the price under your patient self-pay policy.
Is P2031 covered by Medicare?
No. The HCPCS file gives P2031 coverage code M, non-covered by Medicare. National Coverage Determination 190.6, in force since 1978, gives the reason.
The NCD states that hair analysis to detect mineral traces as an aid in diagnosing disease is not a covered service. It rules the test not reasonable and necessary under §1862(a)(1) of the Social Security Act. Because it is a national determination, no MAC can cover the test locally.
The 2026 Clinical Laboratory Fee Schedule still lists P2031 at a national rate of $4.95. That listing does not make the code payable. The coverage determination decides the claim, so the Medicare line is denied whatever the rate says.
Documentation a P2031 claim needs
A P2031 claim is usually filed to get a denial on record, so the patient can then be billed. That makes the paperwork about liability as much as medical necessity.
- Ordering physician order: A written or electronic order naming hair analysis, with the clinical reason for it.
- ICD-10-CM diagnosis linkage: A diagnosis in item 21 of the CMS-1500, pointed to the P2031 line in item 24E.
- CLIA certification: The performing laboratory’s CLIA number in item 23, matching the certificate on file.
- Specimen and panel record: The collection date, the sample site, and the elements reported. The record should show that arsenic was not part of the billed panel.
- Advance Beneficiary Notice: A signed ABN, obtained before the sample is collected, naming hair analysis and its expected cost.
- Self-pay agreement: A written agreement for commercial plans that treat the test as experimental.
The ABN does more work than any other item on this list. Without it, the laboratory usually absorbs the cost of a Medicare denial. Building each element in before submission is what makes a clean claim, even on a line you expect to be denied.
Pro Tip
Get the ABN signed before the hair sample is cut, not when the results come back. Medicare does not accept a notice signed after the service, so a late ABN leaves the cost with the laboratory.
Modifiers for a P2031 claim
No modifier is specific to P2031. On a Medicare claim, the liability modifiers tell the payer whether the patient was warned. The diagram traces a hair test from the lab report to the party that pays, and the table below it covers each modifier.

Commercial payers set their own modifier rules for non-covered services. Read the plan policy before you submit, rather than reusing the Medicare pattern.
Common reasons P2031 claims are denied
Most P2031 denials are expected, and the work is making each one land on the right party. The table pairs each denial reason with its fix. Effective denial management keeps the expected ones from turning into write-offs.
Reading the remittance against a list of medical billing denial codes tells you which category the claim fell into. That decides whether you correct it, bill the patient, or write it off.
Should you appeal a denied P2031 claim?
Rarely. Administrative law judges and the Medicare Appeals Council are bound by national coverage determinations, so a clinical argument cannot overturn NCD 190.6.
- Read the denial code: Check the Claim Adjustment Reason Code on the remittance advice.
- Separate coverage from error: A non-coverage denial is final, while a missing modifier, CLIA number, or code mistake can be corrected.
- Bill or write off: Bill the patient where a valid ABN or self-pay agreement exists, and write the line off where neither does.
- Correct administrative errors: Fix the modifier, CLIA number, or code, then reopen or resubmit inside the payer’s time limit.
ICD-10 codes paired with P2031
No ICD-10-CM code makes P2031 payable on Medicare. The claim still needs a diagnosis that shows why the test was ordered, and that diagnosis often points to a better code.
Confirm that each diagnosis code is active for the current fiscal year, and that it matches the record. A diagnosis picked to fit the test, rather than the patient, is an audit risk.
How Pabau handles a non-covered code like P2031
A non-covered lab code tends to come apart in the paperwork. The ABN sits in a paper file, the self-pay price lives in an email, and the denial arrives weeks later in a remittance file.
Pabau’s practice software keeps that whole sequence on one patient record. The patient signs the ABN as a digital form at check-in, and the signed copy files to their record. Our claims management software then submits the claim and records the denial code that comes back.
The invoice is built at checkout, so the self-pay balance is collected before the patient leaves. Every Pabau subscription includes the full feature set, so forms, claims, and invoicing never sit behind a higher tier.

Collect ABNs and track lab denials in one place
Pabau keeps the signed ABN, the claim, the denial code, and the self-pay invoice on the patient’s record, so non-covered tests stop turning into write-offs.
Conclusion
P2031 is a valid code for a test Medicare will not pay for, and that is settled nationally. Coding it correctly is the easy part. The decision that protects revenue is made before the sample is cut.
So treat every P2031 order as a self-pay conversation first. Get the ABN signed, append GA, and quote the price up front. Route any arsenic request to its CPT code before it reaches the claim.
A planned denial is collected from the patient, and an unplanned one lands on the laboratory. Book a demo to see how Pabau keeps the ABN, the claim, and the invoice on one patient record.
Continue your research
Looking for a broader billing compliance framework? Medical billing compliance outlines the documentation standards and audit readiness practices labs and practices should maintain.
Frequently asked questions
What does HCPCS code P2031 cover?
HCPCS code P2031 covers hair analysis (excluding arsenic). It reports a laboratory analysis of a hair specimen for minerals and trace elements. Arsenic testing is billed separately with CPT 82175 or 83015.
Is P2031 covered by Medicare?
No. Medicare does not cover P2031. National Coverage Determination 190.6 rules hair analysis not reasonable and necessary, and no MAC can override it locally. Get a signed ABN before collection if the patient may be billed.
Which modifier goes on a P2031 Medicare claim?
Use GA when the patient signed an ABN before the sample was collected. Use GZ when no ABN was signed and you expect a denial. GY is not the usual fit, because the NCD rests on medical necessity rather than a statutory exclusion.
How is hair arsenic testing billed?
Hair arsenic testing is billed with CPT 82175 for arsenic, or CPT 83015 for a qualitative heavy metal screen. It never goes under P2031, which excludes arsenic by its descriptor. Check the payer policy first, since coverage of hair specimens varies.
Is P2031 the code for red blood cell antigen typing?
No. P2031 is hair analysis, and no HCPCS code describes red blood cell antigen typing. Serologic RBC antigen typing is billed with CPT 86905 or 86902. DNA-based typing uses PLA codes such as 0001U.
Can we bill the patient when a payer denies P2031?
Yes, if the patient agreed to pay before the test. On Medicare that agreement is a signed ABN, and without one the laboratory usually absorbs the cost. For commercial plans, use a written self-pay agreement and quote the price at booking.