# CMS Medicare Physician Fee Schedule Scraper - RVU & Rates (`parseforge/cms-physician-fee-schedule-scraper`) Actor

Extract Medicare Physician Fee Schedule data - CPT/HCPCS codes, RVUs, GPCIs and facility/non-facility reimbursement rates by locality and year. Built for medical billers, coders and insurers.

- **URL**: https://apify.com/parseforge/cms-physician-fee-schedule-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🩺 CMS Medicare Physician Fee Schedule Scraper

> 🚀 **Export Medicare physician fee schedule rates in seconds.** Look up RVUs, GPCIs, and reimbursement amounts by CPT/HCPCS code and locality. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-31 · **📊 33 fields** per record · **31,000+ code rows per year** · **110 payment localities** · **27 years (2000-2026)**

The CMS Medicare Physician Fee Schedule Scraper pulls the official reimbursement data that drives every Medicare Part B claim. For any CPT or HCPCS code you give it, the actor returns the **Work, Practice Expense, and Malpractice RVUs**, the **geographic practice cost indices (GPCIs)** for the locality you pick, and the **calculated non-facility and facility payment amounts** plus their limiting charges. The pricing math mirrors the public CMS look-up tool exactly: RVUs are multiplied by the matching locality GPCIs and the annual conversion factor, so the numbers line up with what Medicare actually pays.

Medical billers and coders normally type codes one at a time into the cumbersome government search page. This actor turns that into a single bulk export. Pass a list of codes, a whole-year sweep, or a single locality, and receive clean **CSV, Excel, JSON, or XML** ready for spreadsheets, claim scrubbers, or reimbursement models. It covers all **110 Medicare localities**, every year from **2000 through 2026**, and surfaces the **payment policy indicators** (global period, multiple surgery, assistant surgery, supervision rules) that decide how a code is allowed to bill.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Medical billing specialists and coders | Verify reimbursement rates before submitting claims |
| Health insurance agents and analysts | Benchmark procedure rates for premium and network pricing |
| Healthcare administrators and RCM teams | Build fee schedules and appeal underpaid denials |
| Health-tech and data teams | Power reimbursement calculators and analytics tools |

---

### 📋 What the CMS Medicare Physician Fee Schedule Scraper does

- 🔢 **Look up any CPT/HCPCS code.** Pass a single code, a comma-separated list, or leave it blank to export every code for the year.
- 📍 **Pick a locality or sweep them all.** Choose NATIONAL for the unadjusted rate, one of 110 GPCI localities, or ALL to compare a code across the country.
- 💵 **Get calculated payment amounts.** Non-facility and facility prices, plus limiting charges, computed from RVUs, GPCIs, and the annual conversion factor.
- 📊 **Read the full RVU breakdown.** Work, practice expense, and malpractice RVUs alongside each locality GPCI component.
- 🗂️ **Filter by modifier.** Pull the global rate, professional component (26), technical component (TC), or discontinued (53) pricing.
- 📅 **Reach back 27 years.** Compare current rates against any year from 2000 to 2026, including the 2026 dual conversion factor for APM participants.

Each record describes one code at one locality: the code and short description, procedure status, the three RVU components, the three GPCI components, the conversion factor, both payment amounts and limiting charges, and the payment policy indicators that govern billing. The 2026 schedule additionally flags whether a row uses the standard or the APM qualifying conversion factor.

> 💡 **Why it matters:** Medicare sets the benchmark that most private insurers follow. Having the full schedule in a spreadsheet means faster claims, stronger appeals, and accurate patient cost estimates without re-typing codes into a slow web form.

---

### 🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing a single-code lookup, a full-year export, and a national rate comparison.

---

### ⚙️ Input

<table>
<tr><th>Field</th><th>Type</th><th>Description</th></tr>
<tr><td>hcpcsCodes</td><td>String</td><td>Comma or space separated CPT/HCPCS codes (e.g. 99213, 70450). Leave empty to export every code for the year.</td></tr>
<tr><td>maxItems</td><td>Integer</td><td>Cap on rows returned. Free users are limited to 10. Paid users up to 1,000,000.</td></tr>
<tr><td>year</td><td>Select</td><td>Fee schedule year, 2000 through 2026. Defaults to 2026.</td></tr>
<tr><td>modifier</td><td>Select</td><td>All modifiers, 26 (professional), TC (technical), or 53 (discontinued).</td></tr>
<tr><td>locality</td><td>Select</td><td>One of 110 Medicare localities, NATIONAL (0000000), or ALL to expand every locality per code.</td></tr>
<tr><td>acaKey</td><td>String</td><td>Public CMS data API key. Leave as-is.</td></tr>
</table>

Example: look up a few common office and imaging codes at the national rate.

```json
{
    "hcpcsCodes": "99213, 99214, 70450",
    "year": "2026",
    "modifier": "all",
    "locality": "0000000",
    "maxItems": 50
}
````

Example: compare one code across every locality in the country.

```json
{
    "hcpcsCodes": "99213",
    "year": "2026",
    "locality": "ALL",
    "maxItems": 500
}
```

> ⚠️ **Good to Know:** A code can return several rows per locality, one for each modifier and, in 2026, one for each conversion factor (standard vs APM qualifying). Use the `modifier` and `qppPriceIndicator` fields to tell them apart.

***

### 📊 Output

Every run produces a flat table of fee schedule rows. One record is one code at one locality and modifier.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🔢 `hcpcsCode` | string | `"99213"` |
| 🏷️ `modifier` | string | `"26"` |
| 📝 `shortDescription` | string | `"Office o/p est low 20 min"` |
| 🚦 `procStatus` | string | `"A"` |
| 📅 `year` | string | `"2026"` |
| 🔗 `url` | string | `"https://www.cms.gov/medicare/physician-fee-schedule/search"` |
| 📍 `locality` | string | `"0000000"` |
| 🌎 `localityName` | string | `"NATIONAL"` |
| 🏛️ `mac` | string | `"00000"` |
| 🏢 `macName` | string | `"NATIONAL"` |
| 💼 `workRvu` | number | `1.3` |
| 🏥 `nonFacilityPeRvu` | number | `1.35` |
| 🩹 `facilityPeRvu` | number | `0.57` |
| ⚖️ `malpracticeRvu` | number | `0.09` |
| 📐 `workGpci` | number | `1.0` |
| 📐 `peGpci` | number | `1.0` |
| 📐 `malpracticeGpci` | number | `1.0` |
| ✖️ `conversionFactor` | number | `33.4009` |
| 🧭 `qppPriceIndicator` | string | `"Standard"` |
| 💵 `nonFacilityPrice` | number | `95.19` |
| 🏨 `facilityPrice` | number | `81.7` |
| 🧾 `nonFacilityLimitingCharge` | number | `103.99` |
| 🧾 `facilityLimitingCharge` | number | `89.26` |
| 🌐 `global` | string | `"XXX"` |
| 🔪 `multipleSurgery` | string | `"0"` |
| ↔️ `bilateralSurgery` | string | `"0"` |
| 🤝 `assistantSurgery` | string | `"0"` |
| 👥 `coSurgery` | string | `"0"` |
| 👨‍⚕️ `teamSurgery` | string | `"0"` |
| 🩺 `physicianSupervision` | string | `"09"` |
| 🖼️ `diagnosticImagingFamily` | string | `"99"` |
| 🕒 `scrapedAt` | string | `"2026-05-31T10:27:06.118Z"` |
| ❌ `error` | string | `null` |

#### 📦 Sample records

<details>
<summary>Typical: an established-patient office visit (99213) at the national rate</summary>

```json
{
    "hcpcsCode": "99213",
    "modifier": null,
    "shortDescription": "Office o/p est low 20 min",
    "procStatus": "A",
    "year": "2026",
    "url": "https://www.cms.gov/medicare/physician-fee-schedule/search",
    "locality": "0000000",
    "localityName": "NATIONAL",
    "mac": "00000",
    "macName": "NATIONAL",
    "workRvu": 1.3,
    "nonFacilityPeRvu": 1.35,
    "facilityPeRvu": 0.57,
    "malpracticeRvu": 0.09,
    "workGpci": 1,
    "peGpci": 1,
    "malpracticeGpci": 1,
    "conversionFactor": 33.4009,
    "qppPriceIndicator": "Standard",
    "nonFacilityPrice": 95.19,
    "facilityPrice": 81.7,
    "nonFacilityLimitingCharge": 103.99,
    "facilityLimitingCharge": 89.26,
    "global": "XXX",
    "multipleSurgery": "0",
    "bilateralSurgery": "0",
    "assistantSurgery": "0",
    "coSurgery": "0",
    "teamSurgery": "0",
    "physicianSupervision": "09",
    "diagnosticImagingFamily": "99",
    "scrapedAt": "2026-05-31T10:27:06.118Z",
    "error": null
}
```

</details>

<details>
<summary>Edge case: imaging code 70450, technical component (TC), APM qualifying rate</summary>

```json
{
    "hcpcsCode": "70450",
    "modifier": "TC",
    "shortDescription": "Ct head/brain w/o dye",
    "procStatus": "A",
    "year": "2026",
    "url": "https://www.cms.gov/medicare/physician-fee-schedule/search",
    "locality": "0000000",
    "localityName": "NATIONAL",
    "mac": "00000",
    "macName": "NATIONAL",
    "workRvu": 0,
    "nonFacilityPeRvu": 2,
    "facilityPeRvu": 2,
    "malpracticeRvu": 0.01,
    "workGpci": 1,
    "peGpci": 1,
    "malpracticeGpci": 1,
    "conversionFactor": 33.5675,
    "qppPriceIndicator": "APM Qualifying Participant",
    "nonFacilityPrice": 67.47,
    "facilityPrice": 67.47,
    "nonFacilityLimitingCharge": 73.71,
    "facilityLimitingCharge": 73.71,
    "global": "XXX",
    "multipleSurgery": "0",
    "bilateralSurgery": "0",
    "assistantSurgery": "0",
    "coSurgery": "0",
    "teamSurgery": "0",
    "physicianSupervision": "01",
    "diagnosticImagingFamily": "88",
    "scrapedAt": "2026-05-31T10:27:06.118Z",
    "error": null
}
```

</details>

<details>
<summary>Sparse: a bundled/carrier-priced code (36415 venipuncture, status X, no RVU value)</summary>

```json
{
    "hcpcsCode": "36415",
    "modifier": null,
    "shortDescription": "Coll venous bld venipuncture",
    "procStatus": "X",
    "year": "2026",
    "url": "https://www.cms.gov/medicare/physician-fee-schedule/search",
    "locality": "0000000",
    "localityName": "NATIONAL",
    "mac": "00000",
    "macName": "NATIONAL",
    "workRvu": 0,
    "nonFacilityPeRvu": 0,
    "facilityPeRvu": 0,
    "malpracticeRvu": 0,
    "workGpci": 1,
    "peGpci": 1,
    "malpracticeGpci": 1,
    "conversionFactor": 33.4009,
    "qppPriceIndicator": "Standard",
    "nonFacilityPrice": 0,
    "facilityPrice": 0,
    "nonFacilityLimitingCharge": 0,
    "facilityLimitingCharge": 0,
    "global": "XXX",
    "multipleSurgery": "9",
    "bilateralSurgery": "9",
    "assistantSurgery": "9",
    "coSurgery": "9",
    "teamSurgery": "9",
    "physicianSupervision": "09",
    "diagnosticImagingFamily": "99",
    "scrapedAt": "2026-05-31T10:27:06.118Z",
    "error": null
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| ⚡ | **Bulk lookups.** Export a list of codes or an entire year in one run instead of typing codes one at a time. |
| 🧮 | **Real payment math.** Prices are computed from RVUs, GPCIs, and the conversion factor, matching the official tool. |
| 📍 | **Full geographic coverage.** All 110 Medicare localities, plus the NATIONAL unadjusted rate. |
| 📅 | **Deep history.** Every fee schedule year from 2000 to 2026 in the same shape. |
| 🧭 | **2026 ready.** Handles the dual conversion factor for APM qualifying participants. |
| 📤 | **Any format.** CSV, Excel, JSON, or XML, ready for spreadsheets and claim systems. |
| 🔓 | **No setup.** No login, no API token, no scraping infrastructure to maintain. |

> 📊 The 2026 schedule alone holds 31,000+ priced code rows across 110 localities, all reachable in one run.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ CMS Fee Schedule Scraper** *(this Actor)* | Low, usage based | All codes, 110 localities, 27 years | On demand | Code, year, modifier, locality | Minutes |
| Official web look-up tool | Free | Full | Live | Manual, one code at a time | None, but slow |
| Paid billing platforms | High subscription | Full | Live | Rich | Account setup |
| Manual CSV downloads | Free | Full | Annual files | None, raw columns | Heavy cleanup |

One run replaces hours of manual code-by-code lookups or raw file wrangling.

***

### 🚀 How to use

1. 🔐 **Sign up.** Create a free Apify account at [console.apify.com](https://console.apify.com/sign-up?fpr=vmoqkp).
2. 🔎 **Open the Actor.** Find the CMS Medicare Physician Fee Schedule Scraper in your console.
3. ⚙️ **Set your input.** Enter codes, pick a year, modifier, and locality, then set a max items cap.
4. ▶️ **Run it.** Start the Actor and watch rows stream into the dataset.
5. 📥 **Export.** Download as CSV, Excel, JSON, or XML, or pull from the API.

> ⏱️ Total time: about two minutes from sign-up to your first export.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%">

#### 🧾 Medical billing and coding

- Verify the allowed amount before submitting a claim
- Build code-specific fee schedules per locality
- Support denial appeals with the exact published rate
- Estimate patient responsibility ahead of service

</td>
<td width="50%">

#### 🏥 Revenue cycle management

- Load current RVUs into claim scrubbers
- Track conversion factor changes year over year
- Reconcile remittances against expected payment
- Model the revenue impact of new code sets

</td>
</tr>
<tr>
<td width="50%">

#### 📊 Insurance and actuarial

- Benchmark procedure rates for premium setting
- Compare network reimbursement against Medicare
- Feed pricing models with locality-adjusted rates
- Analyze geographic cost variation across markets

</td>
<td width="50%">

#### 💻 Health-tech and analytics

- Power reimbursement calculators and dashboards
- Enrich claims datasets with RVU and payment fields
- Train pricing and cost-estimation models
- Build patient cost-transparency features

</td>
</tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating CMS Medicare Physician Fee Schedule Scraper

Run the Actor from your own code or on a schedule.

- **Node.js:** call the Actor with the [apify-client](https://docs.apify.com/api/client/js) package.
- **Python:** use the [apify-client](https://docs.apify.com/api/client/python) library to trigger runs and read datasets.
- **Docs:** see the [Apify API reference](https://docs.apify.com/api/v2) for run, dataset, and webhook endpoints.

Schedules let you refresh the fee schedule automatically. Point a weekly or monthly schedule at the Actor so new conversion factors and code updates land in your dataset without manual runs.

***

### ❓ Frequently Asked Questions

<details>
<summary>💲 How are the payment amounts calculated?</summary>
Each price is the sum of (Work RVU x Work GPCI), (Practice Expense RVU x PE GPCI), and (Malpractice RVU x MP GPCI), multiplied by the year's conversion factor. This mirrors the official CMS methodology.
</details>

<details>
<summary>📍 What does the locality field control?</summary>
Localities are Medicare's geographic payment areas. Each has its own GPCIs, so the same code pays differently in San Francisco than in rural areas. NATIONAL returns the unadjusted rate with all GPCIs set to 1.
</details>

<details>
<summary>🔢 Can I export every code at once?</summary>
Yes. Leave the codes field blank and the Actor exports the full schedule for the selected year, subject to your max items cap.
</details>

<details>
<summary>🧭 What is the QPP price indicator in 2026?</summary>
Starting in 2026, CMS applies a higher conversion factor to clinicians who qualify as APM participants. Rows are labeled Standard or APM Qualifying Participant so you can pick the right one.
</details>

<details>
<summary>🏥 What is the difference between facility and non-facility price?</summary>
Non-facility price applies when the service is performed in an office. Facility price applies in a hospital or other facility setting, where practice expense is lower.
</details>

<details>
<summary>🏷️ What do the modifiers mean?</summary>
26 is the professional component, TC is the technical component, and 53 is a discontinued procedure. Leaving modifier on All also includes the global base rate.
</details>

<details>
<summary>📅 How far back does the data go?</summary>
Every fee schedule year from 2000 through 2026 is available, in the same record shape.
</details>

<details>
<summary>🚦 Why do some codes show a price of zero?</summary>
Codes with a status like X, C, or B are carrier-priced, bundled, or not separately payable, so no national amount is published. The status field tells you why.
</details>

<details>
<summary>📤 What export formats are supported?</summary>
CSV, Excel, JSON, XML, and direct API access through the Apify dataset endpoints.
</details>

<details>
<summary>✅ Can I use this data commercially?</summary>
The fee schedule is published by CMS as public data. You are responsible for complying with CMS terms and applicable laws for your use.
</details>

<details>
<summary>💳 Do I need a paid plan?</summary>
Free runs are limited to 10 rows for preview. A paid Apify plan lifts the cap up to 1,000,000 rows per run.
</details>

<details>
<summary>🛠️ What happens if a run fails?</summary>
The Actor retries transient errors automatically. If a query still fails, it writes an error record to the dataset instead of charging for empty output.
</details>

***

### 🔌 Integrate with any app

- [**Make**](https://www.make.com/en/integrations/apify) - build no-code automations triggered by new runs.
- [**Zapier**](https://zapier.com/apps/apify/integrations) - connect fee schedule exports to thousands of apps.
- [**Google Sheets**](https://docs.apify.com/platform/integrations) - push rows straight into a spreadsheet.
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - notify a channel when a run finishes.
- [**Airbyte**](https://docs.apify.com/platform/integrations) - sync datasets into your warehouse.
- [**Apify API**](https://docs.apify.com/api/v2) - call runs and read datasets from any backend.

***

### 🔗 Recommended Actors

- [**🏥 CMS Nursing Home Ratings Scraper**](https://apify.com/parseforge/cms-nursing-home-ratings-scraper) - star ratings and inspection data for Medicare-certified nursing homes.
- [**🆔 NPI/NPPES Healthcare Provider Scraper**](https://apify.com/parseforge/npi-nppes-scraper) - look up providers, specialties, and practice addresses by NPI.
- [**👩‍⚕️ Healthgrades Doctor & Provider Scraper**](https://apify.com/parseforge/healthgrades-scraper) - physician profiles, ratings, and reviews.
- [**💊 Cost Plus Drugs Price Scraper**](https://apify.com/parseforge/costplusdrugs-scraper) - transparent retail drug prices for cost comparison.
- [**📂 CMS Open Data Scraper**](https://apify.com/parseforge/data-cms-gov-scraper) - pull additional public datasets from the CMS open data catalog.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more healthcare and public-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA)

***

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with or endorsed by CMS or the U.S. government. It collects only publicly available data from the CMS Physician Fee Schedule data service for lawful use.

# Actor input Schema

## `hcpcsCodes` (type: `string`):

Comma or space separated list of HCPCS/CPT codes to look up (e.g. "99213, 99214, 70450"). Leave empty to export every code for the selected year.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `year` (type: `string`):

Medicare Physician Fee Schedule year. Rates, RVUs and the conversion factor change every year.

## `modifier` (type: `string`):

Pricing modifier. Leave on 'All modifiers' to include the global (base) rate plus component splits. 26 = Professional component, TC = Technical component, 53 = Discontinued procedure.

## `locality` (type: `string`):

Medicare payment locality (GPCI area). NATIONAL (0000000) returns the unadjusted national rate. Choose ALL to export every locality for each code.

## `acaKey` (type: `string`):

Public CMS PFS data API key. Leave as-is.

## Actor input object example

```json
{
  "hcpcsCodes": "99213, 99214, 70450, 93000, 36415",
  "maxItems": 10,
  "year": "2026",
  "modifier": "all",
  "locality": "0000000",
  "acaKey": "9jCM5PaHLj"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "hcpcsCodes": "99213, 99214, 70450, 93000, 36415",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/cms-physician-fee-schedule-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "hcpcsCodes": "99213, 99214, 70450, 93000, 36415",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/cms-physician-fee-schedule-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "hcpcsCodes": "99213, 99214, 70450, 93000, 36415",
  "maxItems": 10
}' |
apify call parseforge/cms-physician-fee-schedule-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/cms-physician-fee-schedule-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CMS Medicare Physician Fee Schedule Scraper - RVU & Rates",
        "description": "Extract Medicare Physician Fee Schedule data - CPT/HCPCS codes, RVUs, GPCIs and facility/non-facility reimbursement rates by locality and year. Built for medical billers, coders and insurers.",
        "version": "0.1",
        "x-build-id": "Bcq5X0gxUxauBIfkq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~cms-physician-fee-schedule-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-cms-physician-fee-schedule-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~cms-physician-fee-schedule-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-cms-physician-fee-schedule-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~cms-physician-fee-schedule-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-cms-physician-fee-schedule-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "hcpcsCodes": {
                        "title": "HCPCS / CPT Codes",
                        "type": "string",
                        "description": "Comma or space separated list of HCPCS/CPT codes to look up (e.g. \"99213, 99214, 70450\"). Leave empty to export every code for the selected year."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "year": {
                        "title": "Fee Schedule Year",
                        "enum": [
                            "2000",
                            "2001",
                            "2002",
                            "2003",
                            "2004",
                            "2005",
                            "2006",
                            "2007",
                            "2008",
                            "2009",
                            "2010",
                            "2011",
                            "2012",
                            "2013",
                            "2014",
                            "2015",
                            "2016",
                            "2017",
                            "2018",
                            "2019",
                            "2020",
                            "2021",
                            "2022",
                            "2023",
                            "2024",
                            "2025",
                            "2026"
                        ],
                        "type": "string",
                        "description": "Medicare Physician Fee Schedule year. Rates, RVUs and the conversion factor change every year.",
                        "default": "2026"
                    },
                    "modifier": {
                        "title": "Modifier",
                        "enum": [
                            "all",
                            "26",
                            "53",
                            "TC"
                        ],
                        "type": "string",
                        "description": "Pricing modifier. Leave on 'All modifiers' to include the global (base) rate plus component splits. 26 = Professional component, TC = Technical component, 53 = Discontinued procedure.",
                        "default": "all"
                    },
                    "locality": {
                        "title": "Geographic Locality",
                        "enum": [
                            "ALL",
                            "0000000",
                            "0111205",
                            "0111209",
                            "0111251",
                            "0111252",
                            "0111253",
                            "0111254",
                            "0111255",
                            "0111256",
                            "0111257",
                            "0111258",
                            "0111259",
                            "0111260",
                            "0111261",
                            "0111262",
                            "0111263",
                            "0111264",
                            "0111265",
                            "0111266",
                            "0111267",
                            "0111268",
                            "0111269",
                            "0111270",
                            "0111275",
                            "0118217",
                            "0118218",
                            "0118271",
                            "0118272",
                            "0118273",
                            "0118274",
                            "0121201",
                            "0131200",
                            "0210201",
                            "0220200",
                            "0230201",
                            "0230299",
                            "0240202",
                            "0240299",
                            "0310200",
                            "0320201",
                            "0330201",
                            "0340202",
                            "0350209",
                            "0360221",
                            "0411201",
                            "0421205",
                            "0431200",
                            "0441209",
                            "0441211",
                            "0441215",
                            "0441218",
                            "0441220",
                            "0441228",
                            "0441231",
                            "0441299",
                            "0510200",
                            "0520200",
                            "0530201",
                            "0530202",
                            "0530299",
                            "0540200",
                            "0610212",
                            "0610215",
                            "0610216",
                            "0610299",
                            "0620200",
                            "0630200",
                            "0710213",
                            "0720201",
                            "0720299",
                            "0730200",
                            "0810200",
                            "0820201",
                            "0820299",
                            "0910203",
                            "0910204",
                            "0910299",
                            "0920220",
                            "0920250",
                            "1011200",
                            "1021201",
                            "1021299",
                            "1031235",
                            "1120201",
                            "1130200",
                            "1140216",
                            "1150200",
                            "1210201",
                            "1220201",
                            "1230201",
                            "1230299",
                            "1240201",
                            "1240299",
                            "1250201",
                            "1250299",
                            "1310200",
                            "1320201",
                            "1320202",
                            "1320203",
                            "1328299",
                            "1329204",
                            "1411203",
                            "1411299",
                            "1421201",
                            "1421299",
                            "1431240",
                            "1441201",
                            "1451250",
                            "1510200",
                            "1520200"
                        ],
                        "type": "string",
                        "description": "Medicare payment locality (GPCI area). NATIONAL (0000000) returns the unadjusted national rate. Choose ALL to export every locality for each code.",
                        "default": "0000000"
                    },
                    "acaKey": {
                        "title": "API Access Key",
                        "type": "string",
                        "description": "Public CMS PFS data API key. Leave as-is.",
                        "default": "9jCM5PaHLj"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
