Medicare fee schedule API

Medicare rates in your product. Maintained for you.

Send a code, ZIP and date of service. Get the allowed amount, the payment locality and the CMS release behind it, with every quarterly update handled on our side.

Edit the code or ZIP

Live data

GET/v1/rates/?zip=&setting=non_facility

Sending…
codes with a Medicare rate
8,570
payment localities
109
ZIP codes mapped
42,957
CMS releases since 2013
135

Serving nowRVU26D · ZIP2026Q4Coverage details

Source attached

Every amount traces to a line in a CMS file.

Add include=sources and each rate comes back with the CMS archive, file and line it was read from. Audits and disputes start from evidence, not a screenshot.

99214 · Manhattan (ZIP 10001) · office

1.92 × 1.064Work+2.00 × 1.162Practice expense+0.14 × 1.586Malpractice=4.5889Adjusted RVUs
4.5889Adjusted RVUs×33.4009Conversion factor=$153.27
Relative value unitsPPRRVU2026_Oct_nonQPP.csv, line 13,016 (RVU26D)
Locality factors (GPCI)GPCI2026.csv, line 78 (RVU26D)
ZIP to payment localityZIP5_OCT2026.txt, line 26,150 (ZIP2026Q4)

ZIP to locality, solved

One code. 109 different answers.

Medicare pays 99214 differently in each payment locality. Send a ZIP and we resolve the locality that applied on the date of service.

109 payment localities

$123.92 to $170.02

$123.92$146.97$170.02
One dot per payment locality, office / nonfacility. Hover a dot to see the locality; select it to open that rate.

Every release, versioned

Any date of service. The rate that applied then.

The date of service picks the release, and each response returns its release ID. Here is 99214 in Manhattan across every release we serve.

  1. Q1 2013

    $119.41

    RVU13AR

  2. Q2 2013

    $119.41

    RVU13B

  3. Q3 2013

    $119.41

    RVU13C

  4. Q4 2013

    $119.41

    RVU13D

  5. Q1 2014

    $121.08

    RVU14A+$1.67

  6. Q2 2014

    $121.08

    RVU14B

  7. Q3 2014

    $121.08

    RVU14C

  8. Q4 2014

    $121.08

    RVU14D

  9. Q1 2015

    $122.45

    RVU15A+$1.37

  10. Q2 2015

    $122.45

    RVU15B

  11. Q3 2015

    $123.06

    RVU15C+$0.61

  12. Q4 2015

    $123.06

    RVU15D

  13. Q1 2016

    $122.20

    RVU16A−$0.86

  14. Q2 2016

    $122.20

    RVU16B

  15. Q3 2016

    $122.20

    RVU16C

  16. Q4 2016

    $122.20

    RVU16D

  17. Q1 2017

    $122.95

    RVU17A+$0.75

  18. Q2 2017

    $122.95

    RVU17B

  19. Q3 2017

    $122.95

    RVU17C

  20. Q4 2017

    $122.95

    RVU17D

  21. Q1 2018

    $123.79

    RVU18AR1+$0.84

  22. Q2 2018

    $123.79

    RVU18B

  23. Q3 2018

    $123.79

    RVU18C

  24. Q4 2018

    $123.79

    RVU18D

  25. Q1 2019

    $124.78

    RVU19A+$0.99

  26. Q2 2019

    $124.78

    RVU19B

  27. Q3 2019

    $124.78

    RVU19C

  28. Q4 2019

    $124.78

    RVU19D

  29. Q1 2020

    $126.67

    RVU20A+$1.89

  30. Q2 2020

    $126.67

    RVU20B

  31. Q3 2020

    $126.67

    RVU20C

  32. Q4 2020

    $126.67

    RVU20D

  33. Q1 2021

    $152.03

    RVU21A+$25.36

  34. Q2 2021

    $152.03

    RVU21B

  35. Q3 2021

    $152.03

    RVU21C

  36. Q4 2021

    $152.03

    RVU21D

  37. Q1 2022

    $149.79

    RVU22A−$2.24

  38. Q2 2022

    $149.79

    RVU22B

  39. Q3 2022

    $149.79

    RVU22C

  40. Q4 2022

    $149.79

    RVU22D

  41. Q1 2023

    $147.19

    RVU23A−$2.60

  42. Q2 2023

    $147.19

    RVU23B

  43. Q3 2023

    $147.19

    RVU23C

  44. Q4 2023

    $147.19

    RVU23D

  45. Q1 2024

    $142.89

    RVU24A−$4.30

  46. Q1 2024

    $145.26

    RVU24AR+$2.37

  47. Q2 2024

    $145.26

    RVU24B

  48. Q3 2024

    $145.26

    RVU24C

  49. Q4 2024

    $145.26

    RVU24D

  50. Q1 2025

    $142.07

    RVU25A−$3.19

  51. Q2 2025

    $142.07

    RVU25B

  52. Q3 2025

    $142.07

    RVU25C

  53. Q4 2025

    $142.07

    RVU25D

  54. Q1 2026

    $153.27

    RVU26A+$11.20

  55. Q2 2026

    $153.27

    RVU26B

  56. Q3 2026

    $153.27

    RVU26C

  57. Q4 2026

    $153.27

    RVU26D

Batch pricing

Price a whole code list at once.

Send a list of codes with a shared ZIP, date and setting. Results come back in the order you asked, and unknown codes stay in place with a reason.

GET/v1/rates?codes[]=99213&codes[]=99214&codes[]=99215&codes[]=93000&codes[]=97110&zip=10001&setting=non_facility&date=2026-11-07

Batch response for ZIP 10001
CodeServiceamount
99213Office visit, established, low10763$107.63
99214Office visit, established, moderate15327$153.27
99215Office visit, established, high21737$217.37
93000Electrocardiogram, complete1758$17.58
97110Therapeutic exercise, 15 min3243$32.43
▸ Raw response
{
  "data": [
    {
      "code": "99213",
      "amount": 10763,
      "currency": "usd",
      "setting": "non_facility",
      "date": "2026-11-07",
      "qp_status": "non_qp",
      "location": {
        "type": "locality",
        "id": "13202-01",
        "geography_match": "exact"
      },
      "release": 1,
      "payment_status": "A",
      "fee_schedule": "pfs"
    },
    {
      "code": "99214",
      "amount": 15327,
      "currency": "usd",
      "setting": "non_facility",
      "date": "2026-11-07",
      "qp_status": "non_qp",
      "location": {
        "type": "locality",
        "id": "13202-01",
        "geography_match": "exact"
      },
      "release": 1,
      "payment_status": "A",
      "fee_schedule": "pfs"
    },
    {
      "code": "99215",
      "amount": 21737,
      "currency": "usd",
      "setting": "non_facility",
      "date": "2026-11-07",
      "qp_status": "non_qp",
      "location": {
        "type": "locality",
        "id": "13202-01",
        "geography_match": "exact"
      },
      "release": 1,
      "payment_status": "A",
      "fee_schedule": "pfs"
    },
    {
      "code": "93000",
      "amount": 1758,
      "currency": "usd",
      "setting": "non_facility",
      "date": "2026-11-07",
      "qp_status": "non_qp",
      "location": {
        "type": "locality",
        "id": "13202-01",
        "geography_match": "exact"
      },
      "release": 1,
      "payment_status": "A",
      "fee_schedule": "pfs"
    },
    {
      "code": "97110",
      "amount": 3243,
      "currency": "usd",
      "setting": "non_facility",
      "date": "2026-11-07",
      "qp_status": "non_qp",
      "location": {
        "type": "locality",
        "id": "13202-01",
        "geography_match": "exact"
      },
      "release": 1,
      "payment_status": "A",
      "fee_schedule": "pfs"
    }
  ]
}

One less system to maintain

New CMS releases are our backlog. Not yours.

CMS changes the data every quarter and the format every year. We parse, check and accept each release, and the API keeps returning correct, backwards-compatible results.

Changing file formats
Every year
Columns, file names and indicator rules shift between years and quarters. Your integration never sees it.
Codes that come and go
Every quarter
New codes appear, old ones are deleted, and prices are revised mid-year. Each date of service gets the right answer.
Locality factors and conversion factors
Each revision
GPCIs for every payment locality, and separate QP and non-QP conversion factors from 2026.
ZIP to payment locality
Quarterly
The carrier locality crosswalk, including ZIPs that CMS splits by ZIP+4.
Every prior release
Kept
Older quarters stay queryable, so a March date of service prices with March’s data.
Citations
Every answer
The CMS archive, file, line and checksum behind each amount.

Release log

GET /v1/releases
Accepted CMS releases, newest first
ReleaseDatasetEffectiveSource
CLFS 2026 Q4ZIP to localityQ4 2026CMS
RVU26DcurrentFee scheduleQ4 2026CMS
ZIP2026Q4currentZIP to localityQ4 2026CMS
CLFS 2026 Q3ZIP to localityQ3 2026CMS
RVU26CFee scheduleQ3 2026CMS
CLFS 2026 Q2ZIP to localityQ2 2026CMS

Build or buy

The formula fits on one line. The files don’t.

Every FeeBase amount is computed from CMS’s own RVU, GPCI, conversion factor and ZIP-to-locality files, and comes back with the file and line it was read from. It is the CMS number, not an approximation of it. Building the same thing yourself is possible. This is the work it takes.

  1. 01

    Archive every quarterly release

    RVU, GPCI, anesthesia and lab files, plus the ZIP crosswalk, four times a year. Keep the old ones: a March claim still prices with March’s data.

  2. 02

    Parse files that keep changing shape

    File names and columns shift between quarters and years, and from 2026 there are two RVU payment files, one for QPs and one for everyone else.

  3. 03

    Map ZIP codes to payment localities

    Nearly 43,000 ZIP codes and over a million ZIP+4 rows, re-issued quarterly. Some ZIPs fall in two localities and only the ZIP+4 settles it.

  4. 04

    Pick the right release for the date

    Choose the quarter in effect on the date of service, and the latest correction when CMS re-issues a file for the same period.

  5. 05

    Handle the codes the formula doesn’t fit

    Contractor-priced codes, lab codes paid from the Clinical Lab Fee Schedule, anesthesia base and time units, OPPS-capped rows, codes with no facility rate.

  6. 06

    Apply the rules around the formula

    Modifiers 26 and TC, NP, PA and LCSW percentages, non-participating amounts and limiting charges, therapy multiple-procedure reductions.

Then do it again next quarter, without breaking the answers you gave last quarter. A mistake rarely looks like an error: it looks like a plausible rate from the wrong locality, quarter or conversion factor. What a DIY build involves

Why not use CMS’s own tools?

They’re the right place for an occasional manual check. None of them returns an allowed amount for a code, ZIP and date of service.

PFS Look-Up Tool
A search page for people. You accept an AMA license, choose a MAC and locality by name rather than entering a ZIP, and search a single code, a short list or a range.
Not built to sit behind software.CMS source
PFS data catalog API
Open query access to the RVU and GPCI tables on pfs.data.cms.gov. It returns rows, not prices, has no ZIP crosswalk, and updates each year’s data in place.
You still build the pricing on top.CMS source
Procedure Price Lookup API
Requires an AMA license and a CMS-issued key that expires every 60 days. Covers about 3,900 procedures at national averages for hospital outpatient departments and surgery centers.
Not a physician fee schedule API.CMS source

Checked against CMS’s pages on October 10, 2026. CMS’s lookup tools compared

What teams build

One rate, many jobs.

Patient cost estimates
The allowed amount a cost estimator starts from: price each line where the service is given, apply the contract’s percentage, then the patient’s benefits. Therapy visits get timed units and payment reductions applied.
GET /v1/rates · POST /v1/therapy/estimate
Payer contract benchmarking
Most contracts are written as a percentage of Medicare. Compare every payer against the same, citable baseline.
rate.amount × 1.28
Setting your own fee schedule
Price every code you bill as a multiple of Medicare, and update it when CMS does.
GET /v1/code-sets/{id} · GET /v1/rates
Market and site comparisons
See what the same services pay in each locality before opening a location or entering a market.
GET /v1/localities · GET /v1/rates
Revenue modelling
Combine historical service volumes with the rates that apply in each period to size a service line.
GET /v1/utilization · GET /v1/rates
Pre-billing checks
Flag lines that are priced far from the Medicare amount before a bill goes out.
GET /v1/rates?codes[]=…

Errors and gaps

When there’s no answer, you get a reason.

Request errors and unavailable rates are different things, and the API keeps them apart. Neither one is ever a silent zero.

404Unknown code

A request error: fix the input. Nothing is charged.

{
  "error": {
    "code": "code_not_found",
    "message": "This procedure code was not found.",
    "param": "code"
  }
}

200No Medicare amount

Understood, but CMS doesn’t set a national rate. The reason is machine-readable.

{
  "code": "0054T",
  "amount": null,
  "currency": "usd",
  "unavailable_reason": "contractor_priced"
}

422ZIP split across localities

Some ZIPs span two payment areas. We say so instead of guessing.

{
  "error": {
    "code": "zip_plus4_required",
    "message": "Provide ZIP+4 or a locality to resolve the payment locality.",
    "param": "zip"
  }
}

Pricing

Start small. Move up when you ship.

Included requests each month, then pay only for what you use beyond them. Set a usage limit in your account whenever you need one.

Try it

$49/month

Enough to wire up an integration and see if it fits.

  • 500 included requests a month
  • $0.20 per additional request
  • 5 requests a minute
  • Every endpoint, code, locality and release
Start with Try it

Scale

$999/month

A maintained Medicare pricing dependency inside your product.

  • 100,000 included requests a month
  • $0.02 per additional request
  • 300 requests a minute
  • Commercial use in your product
  • Direct engineering support
Start with Scale

Enterprise

Custom

For higher volume, data licensing or a negotiated SLA.

  • Everything in Scale
  • Higher volume and bulk exports
  • Contracted SLA and security review
  • Invoicing and annual terms
Talk to us

Running a practice rather than building software? Fee sheets and contract analysis are coming soon at $199/month.

Good questions. Clear answers.

How is usage billed?

Month to month. Additional requests are billed after use, and you can turn on Stop at included requests to prevent any extra charges. Failed requests never count.

What about SLAs and response times?

Scale includes direct engineering support. If your integration needs contracted availability or response-time targets, talk to us about Enterprise.

Isn’t CMS the authoritative source?

Yes, and these are CMS’s numbers. Each amount is computed from the CMS RVU, GPCI, conversion factor and ZIP-to-locality files in effect on the date of service, and include=sources returns the archive, file and line behind it, so you can check any amount against CMS directly.

Does CMS have an API for this?

Not one that returns an allowed amount for a code and ZIP. CMS’s PFS data catalog has an open query API over the RVU and GPCI tables, and the Procedure Price Lookup API requires an AMA license and covers national averages for hospital outpatient departments and surgery centers.

Which years are covered?

Physician Fee Schedule and ZIP-to-locality releases from January 2013 onward. The coverage page lists the exact periods and sources.

Are these the amounts Medicare will actually pay?

They are base participating-physician fee schedule amounts before claim-level adjustments such as deductibles, sequestration or multiple-procedure rules. Provider-type and non-participating adjustments are available as options.

Data and source details

Make your first request this afternoon.

Questions before you buy go straight to the engineers who wrote the parser, not a support queue.