The CPT codes used in pharmacogenetic (PGx) testing billing are mostly single-gene molecular pathology codes, one per gene, with a growing set of lab-specific PLA codes for branded panels. Which ones a lab can bill, and which ones a payer will actually pay, depends on the genes that were clinically needed for the drug decision in front of the prescriber.
Key Takeaways
- The most-billed PGx codes are 81225 (CYP2C19), 81226 (CYP2D6), and 81227 (CYP2C9).
- When a panel has its own PLA code, the lab must bill that code instead of stacking single-gene codes.
- There’s no general CPT code for a multigene PGx panel, so a panel without a PLA code bills as the individual Tier 1 codes or as unlisted code 81479.
- Medicare claims processed through MolDX also need the test’s Z-code identifier, or they deny.
- Factor V Leiden (81241) and prothrombin (81240) are thrombophilia tests, not PGx tests, even when a lab sells them on the same panel.
Single-Gene PGx Codes
Most PGx testing bills under Tier 1 molecular pathology codes. Each code describes one gene and the common variants for it, and the lab reports one unit per gene tested. The drug in parentheses is the kind of prescribing decision that usually supports coverage.
81225 (CYP2C19, for clopidogrel, citalopram, escitalopram, and some proton pump inhibitors)- 81226 (CYP2D6, including copy number variants, for codeine, tramadol, tamoxifen, and many antidepressants and antipsychotics)
- 81227 (CYP2C9, for warfarin, phenytoin, and some NSAIDs)
- 81355 (VKORC1, for warfarin)
- 81230 (CYP3A4, for tacrolimus)
- 81231 (CYP3A5, for tacrolimus)
- 81232 (DPYD, for fluorouracil and capecitabine)
- 81335 (TPMT, for azathioprine and mercaptopurine)
- 81306 (NUDT15, for azathioprine and mercaptopurine)
- 81328 (SLCO1B1, for simvastatin)
- 81350 (UGT1A1, for irinotecan)
- 81247 (G6PD, for rasburicase and primaquine)
- 81381 (HLA class I typing of one allele, such as HLA-B*57:01 for abacavir or HLA-B*15:02 for carbamazepine)
Warfarin genotyping is the usual example of stacking. CYP2C9 (81227) and VKORC1 (81355) are billed together when both are tested for the same dosing decision. Medicare treats warfarin genotyping under a national coverage determination that limits payment to clinical study settings, so most warfarin PGx claims to Medicare deny no matter how they’re coded.
Medicare also sets medically unlikely edits on these codes, usually one unit per gene per day. Billing a gene twice, or billing the same gene again after it was already tested, gets cut automatically. If you’re unsure which code describes a test, our guide on how to choose the correct CPT code walks through the general process.
Panel Codes and PLA Codes
CPT has no general code for a PGx panel by gene count. A lab running a multigene panel has three options, and the right one depends on the test itself.
The first is a Proprietary Laboratory Analyses code. PLA codes describe one lab’s specific test, and when a test has one, the lab has to use it instead of stacking single-gene codes. Examples include 0029U (Mayo Clinic’s focused pharmacogenomics panel), 0030U (Mayo Clinic’s warfarin response panel), and 0345U (the GeneSight psychotropic panel). The AMA adds new PLA codes every quarter, so the code set changes often.
The second is stacking the individual Tier 1 codes, one for each gene. Payers then review each gene on its own, and the ones without a current drug decision behind them deny.
The third is 81479, the unlisted molecular pathology code, for genes or methods that no specific code describes. Unlisted claims need a description of the test and usually go to manual review, so payment is slower and less predictable.
Exome and Genome Sequencing
PGx results sometimes come from broader sequencing done for another reason. Those tests bill under their own codes, and the PGx findings don’t add a separate charge.
- 81415 (exome sequence analysis)
- 81416 (exome sequence analysis of each comparator exome, such as a parent)
- 81417 (re-evaluation of a previously obtained exome)
- 81425 (genome sequence analysis)
- 81426 (genome sequence analysis of each comparator genome)
- 81427 (re-evaluation of a previously obtained genome)
Payers cover exome and genome sequencing under their own genetic testing criteria, usually for suspected genetic disorders, not for PGx alone. A lab can’t bill whole exome sequencing to get PGx results that a targeted test would have produced.
MolDX, Z-Codes, and Diagnosis Codes
Most Medicare contractors process molecular testing through the MolDX program. Each test has to be registered in the DEX Diagnostics Exchange, and the Z-code it receives goes on every Medicare claim alongside the CPT code. MolDX covers PGx testing when the patient is being considered for a drug with a known gene-drug interaction and the result will change the drug or dose.
The diagnosis on the claim should be the condition being treated, such as major depressive disorder, atrial fibrillation, or colorectal cancer. Long-term drug therapy codes from the Z79 category can support the claim when the patient is already on the medication. Claims sent with only a screening or family history code rarely meet medical necessity for PGx.
Gene-drug pairs with FDA labeling or CPIC guidelines carry the most weight on review and appeal. When a payer denies a gene with strong guideline support, the ordering note and the guideline are usually what overturn it.
Common PGx Billing Problems
The biggest one is preemptive panel testing. A panel ordered for a patient with no current prescribing decision is denied by Medicare and most commercial plans, even when every code on it is correct.
The second is authorization that doesn’t match the claim. Many commercial plans require prior authorization for genetic testing, often through a lab benefit manager, and the approval lists specific codes. A lab that bills more genes than were approved gets the extra codes denied.
The third is billing the wrong entity. The performing lab bills the test. The ordering practice doesn’t bill for the test or for collecting a cheek swab, and independent labs bill the Medicare contractor for the state where the lab is located, not where the patient lives.
Patients also get surprised by the bill. When a test may not meet Medicare coverage criteria, the lab needs a signed Advance Beneficiary Notice before testing and bills with the GA modifier. Without it, the lab can’t bill the patient if the claim denies.
Labs looking for the full picture on PGx coverage, credentialing, and lab enrollment can see our PGx testing billing and credentialing page.
PGx CPT Code FAQs
What CPT code is used for CYP2D6 testing?
81226. It covers the common CYP2D6 variants plus copy number variants such as gene deletions and duplications.
What is CPT 81225?
81225 is CYP2C19 gene analysis for common variants. It’s most often billed when a patient is being started on clopidogrel or certain antidepressants.
Is there a CPT code for a pharmacogenomic panel?
Not a general one. A panel with its own PLA code bills under that code. Otherwise the lab bills each Tier 1 gene code separately, or 81479 for genes no specific code describes.
Which codes are billed for warfarin genotyping?
81227 for CYP2C9 and 81355 for VKORC1, billed together. Medicare limits coverage of warfarin genotyping to clinical study settings.
Are Factor V Leiden and prothrombin tests PGx tests?
No. Factor V Leiden (81241) and prothrombin (81240) test for inherited clotting risk, and payers review them under thrombophilia policies, not PGx policies.
Does Medicare need anything besides the CPT code for a PGx claim?
Yes. Labs billing through MolDX contractors need the test’s Z-code identifier from the DEX Diagnostics Exchange on every claim.
Getting PGx Claims Paid With Medwave
Medwave codes PGx claims gene by gene against the order, checks for a PLA code before anything is stacked, and confirms the Z-code and authorization match before the claim leaves. Denied genes go back out with the ordering note and the guideline for that gene-drug pair.
If your lab is seeing panel reductions or MolDX denials, send us a few recent remits through the form below and we’ll tell you which codes are causing them.
Co-Founder and COO of Medwave, bringing more than 25 years of hands-on experience in healthcare revenue cycle management, payer contracting, and medical credentialing.


81225 (CYP2C19, for clopidogrel, citalopram, escitalopram, and some proton pump inhibitors)