Vaccine administration billing: CPT 90460-90474 explained.
A mixed-age family medicine panel runs three vaccine billing systems at once, not one: the CPT component-versus-route split, Medicare's own G-code pathway that bypasses 90460-90474 for its three core preventive vaccines, and VFC's product-versus-administration-fee split for eligible children. Mixing any two of these up is how a vaccine claim under- or over-bills.
Key takeaways
- 90460/90461 count components; 90471-90474 count injections. Which family applies depends on the patient's age and whether counseling actually happened — not on which code pays more or which one a template defaults to.
- Medicare doesn't use 90460-90474 for flu, pneumococcal, or hepatitis B. Those three bill through G0008, G0009, and G0010 instead — and most remaining adult vaccines route through Part D, not a Part B medical claim at all.
- Z23 is the primary diagnosis for a routine immunization encounter — not a symptom code, and not left blank because "it's just a shot."
- VFC's product-versus-administration split, and modifier SL, are state-specific. One state's rule doesn't transfer to another, so a practice billing across state Medicaid lines needs a rule per state, not one default.
Component-based vs. route-based: picking the right family
CPT gives family medicine two structurally different ways to bill vaccine administration. The choice isn't a preference — it's set by the patient's age and whether counseling actually occurred.
| Code | Counts | Age / counseling rule |
|---|---|---|
90460 | First or only component of one vaccine, with face-to-face counseling by the physician or QHP | Through age 18 only; counseling is required, not optional |
90461 | Add-on: each additional component of that same vaccine, one unit per component | Same age and counseling requirement as 90460 |
90471 | One vaccine, percutaneous/intradermal/subcutaneous/intramuscular route | Any age; counseling not required to bill it |
90472 | Add-on: each additional injectable vaccine, same encounter | Requires a primary code (90471 or 90460) billed the same encounter |
90473 | One vaccine, intranasal or oral route | Any age; counseling not required to bill it |
90474 | Add-on: each additional intranasal/oral vaccine, same encounter | Requires a primary code billed the same encounter |
Two worked examples make the split concrete. A 4-year-old receives a three-antigen combination vaccine, and the physician personally counsels the parent on it: that's 90460 for the first component plus two units of 90461 — three lines total for one needle stick, because the code counts antigens, not injections. A 68-year-old receives a flu vaccine and a separate Tdap in the same visit, with no formal counseling documented: that's 90471 for the first vaccine and 90472 for the second — two lines for two needle sticks, because the code counts injection events, not components.
Reversing either pattern misbills the encounter. Billing 90471 for a counseled pediatric visit undercodes it, since the component-based family typically reimburses more per line. Billing 90460 for an adult simply won't pay — it's not payable outside the pediatric/adolescent range. And counseling is a genuine requirement, not a formality: if a nurse gives the vaccine with no physician or QHP counseling documented, 90460/90461 don't apply even to a pediatric patient, and the route-based family applies instead.
Medicare's separate pathway: G0008, G0009, G0010
This is the split most vaccine-billing guides skip, and it drives some of the most avoidable denials on a Medicare panel. Medicare Part B doesn't pay 90460-90474 for its three statutorily-covered preventive vaccines. Influenza, pneumococcal, and hepatitis B vaccine administration bill through their own HCPCS Level II codes instead, each reported alongside the specific vaccine product code:
| Code | Vaccine administered | Beneficiary eligibility |
|---|---|---|
G0008 | Influenza virus vaccine | All Medicare Part B beneficiaries, no risk restriction |
G0009 | Pneumococcal vaccine | All Medicare Part B beneficiaries, no risk restriction |
G0010 | Hepatitis B vaccine | Restricted to beneficiaries at high or intermediate risk of hepatitis B infection |
All three carry no deductible or coinsurance when billed correctly, and Medicare adds an in-home administration payment (HCPCS M0201) on top when given in a patient's home. ⚠️ This build located a 2026 national administration rate of $34.62 for G0008/G0009/G0010 (and $40.98 for M0201) via a Medicare Administrative Contractor's fee page, but could not open CMS's own fee schedule page directly to confirm it (cms.gov returned an access error) — confirm the current rate in the CMS Physician Fee Schedule Look-Up Tool before quoting it. COVID-19 vaccine administration follows its own dedicated code, separate from this table and 90460-90474.
The rest of the adult schedule mostly doesn't run through Part B. Tdap, shingles (Shingrix), and HPV are the common examples: for a typical beneficiary these route through the Part D pharmacy benefit, so billing 90471 for a shingles vaccine against Part B generates a benefit-category denial, not a fixable coding error. Part B coverage of Tdap is the exception, and typically requires documented medical necessity rather than routine booster use. Confirm which benefit a vaccine falls under before the encounter — no amount of chart detail moves a Part D vaccine onto a Part B claim.
Diagnosis coding: Z23 and what sits around it
The primary diagnosis for a routine immunization encounter is Z23, Encounter for immunization — verified live against the FY2026 ICD-10-CM code set, billable, and not a placeholder to be replaced with a symptom code just because the visit felt routine. It applies whether the vaccine is being given as part of a preventive exam, an AWV, a stand-alone immunization visit, or alongside a problem E/M; the vaccine's own diagnosis pointer is Z23, independent of whatever diagnosis supports the E/M line if one is billed the same day.
| Code | Use |
|---|---|
Z23 | Primary diagnosis for a routine immunization encounter — the default for the vaccine line itself |
Z28.21 | Immunization not carried out because of patient refusal — documents the encounter when a scheduled vaccine wasn't given |
Z28.82 | Immunization not carried out because of caregiver refusal — the pediatric-specific version of the above |
Z28.03 | Immunization not carried out because of the patient's immunocompromised state |
T88.0XXA | Infection following immunization, initial encounter — a subsequent visit for a vaccine complication, not the immunization visit itself |
The Z28 family doesn't generate a billable administration line, since no vaccine was given, but it documents why an expected immunization didn't happen, which matters for quality reporting and the next visit's record. This build queried CMS's National and Local Coverage Database directly for coverage policy specific to vaccine administration and found none, consistent with these being statutory Part B preventive benefits defined by program manuals rather than an NCD or LCD.
Before appending modifier 25 to a same-day E/M on a vaccine visit, check whether the "extra" work billed is actually the vaccine counseling itself — already included in 90460/90461 and not a second billable service, however thoroughly it's documented. Modifier 25 only holds up when the E/M addresses a distinct problem with its own history, exam, and MDM.
NCCI bundling: E/M against the administration codes
NCCI bundles E/M codes against the vaccine administration family by default. An office visit billed alongside a vaccine, with no distinct problem beyond the immunization itself, should not carry modifier 25 — the counseling and administration are already the visit's content, and the E/M line duplicates rather than adds to it.
- Confirm age and whether counseling actually happened before choosing 90460/90461 versus the 90471 family.
- Check whether the vaccine is one of Medicare's three G-code vaccines before defaulting to 90460-90474 on a Medicare claim.
- Attach Z23 to the vaccine line even when a separate E/M with its own diagnosis is billed the same day.
- Verify your state's VFC and SL-modifier rule directly rather than assuming it matches a neighboring state's.
- Don't bill 90471 for flu, pneumococcal, or hepatitis B administration on a Medicare claim — use G0008/G0009/G0010.
- Don't append modifier 25 to an E/M whose only content is the vaccine counseling already included in 90460/90461.
- Don't bill a Part D vaccine (Tdap, shingles, HPV, for a typical Medicare beneficiary) against Part B coverage.
- Don't bill the vaccine product itself on a VFC-eligible patient — only the administration fee is separately reimbursable.
VFC and state-supplied vaccine billing
Under the Vaccines for Children program and many state Medicaid plans, the vaccine product is supplied to VFC-enrolled providers at no cost, and only the administration fee — billed through the 90460/90471 family — is separately reimbursable. Billing for the vaccine product itself on a VFC-eligible patient is a compliance issue distinct from a coding one; the product line is still reported, but at no charge.
Modifier SL (state-supplied vaccine) flags that product line for many state Medicaid programs, but its application isn't uniform. Some states require SL on the vaccine product code only; others require it on both the vaccine and administration codes; at least one state's Medicaid policy prohibits its use altogether. A practice billing across more than one state needs a rule per state, checked against that state's current VFC manual, not one default carried from wherever the practice is headquartered.
Vaccine claims underpaying or denying on your family medicine panel?
We'll audit a sample of your recent vaccine administration claims for code-family mismatches, Medicare G-code errors, and VFC modifier issues, and show what's recoverable.
Frequently asked questions
Why does Medicare deny CPT 90471 for a flu or pneumococcal vaccine administration?
Medicare Part B doesn't pay 90460-90474 for its three statutorily-covered preventive vaccines. Influenza, pneumococcal, and hepatitis B administration bill through their own HCPCS codes instead — G0008, G0009, and G0010 — alongside the vaccine product code. Billing 90471 to Medicare for one of these three vaccines isn't a modifier problem; it's the wrong code family, and it denies as a benefit-category mismatch every time.
Can we bill an E/M visit for vaccine counseling on the same day as the immunization administration?
Not for the counseling itself — CPT 90460 already includes face-to-face counseling for the first vaccine component, and 90461 covers each additional one, so that counseling isn't separately billable as an E/M no matter how it's documented. NCCI bundles E/M codes against 90460-90474 by default. A same-day E/M is billable with modifier 25 only when the visit addresses a genuinely separate, significant problem — its own history, exam, and medical decision making — not the vaccine discussion itself.
Does the SL modifier need to go on every VFC vaccine claim?
No — whether and where modifier SL applies varies by state Medicaid program. Some states require it on the vaccine product code only, some on both the vaccine and administration codes, and at least one state's Medicaid policy prohibits it entirely. Confirm your specific state's VFC billing manual before applying SL as a standing rule across your panel.
Verify before billing. CPT is a registered trademark of the American Medical Association; codes here are paraphrased, not reproduced from the CPT Professional edition. CPT, HCPCS and ICD-10 codes, coverage policy, and bundling edits change, including annual code-set updates. This page reflects standard industry practice and is provided for general education — it is not a substitute for your own compliance review, your current payer contracts, or the current-year code sets. Confirm requirements against your specific payer mix before submitting claims.