# Medicare Part D Prescriber Scraper (CMS) (`foo121/cms-prescriber-scraper`) Actor

Export Medicare Part D prescribers by state, specialty and drug from CMS open data: NPI, prescriber, specialty, brand/generic drug, total claims and drug cost. Pharma & med-device market intel, pay per result.

- **URL**: https://apify.com/foo121/cms-prescriber-scraper.md
- **Developed by:** [ziv shay](https://apify.com/foo121) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Medicare Part D Prescriber Scraper (CMS)

**Medicare Part D prescriber data** scraper — pull official **CMS prescriber drug data** by state, specialty, and drug, with claim counts and total drug cost per prescriber.

Built for **pharma sales & market access teams, med-device companies, and healthcare market intelligence analysts** who need to know who is prescribing what, where, and how much. This **CMS prescriber scraper** reads the **official CMS open data** release — Medicare Part D Prescribers by Provider and Drug — so every row is sourced from a public, authoritative federal dataset.

No API key required. Filter by state and (optionally) provider type, prescriber name, organization, or a specific drug, and get back prescriber-level **prescriber drug data**: NPI, name, specialty, location, brand and generic drug names, total claims, and total drug cost. Pairs naturally with our **US Healthcare Provider (NPI) Scraper** — match on `npi` to enrich prescribers with full registry contact details.

### What you get

| Field | Description |
|---|---|
| `npi` | Prescriber's 10-digit National Provider Identifier |
| `prescriberName` | Prescriber's name (last, first) |
| `specialty` | Prescriber specialty / provider type as classified by CMS |
| `city` | Prescriber city |
| `state` | Prescriber state |
| `brandName` | Brand name of the prescribed drug |
| `genericName` | Generic (non-proprietary) name of the drug |
| `totalClaims` | Total Part D claims for that prescriber/drug |
| `totalDrugCost` | Total drug cost in USD for that prescriber/drug |
| `year` | Data year of the CMS Part D release |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `state` | string | — | Two-letter state code (e.g. `"CA"`). Strongly recommended to keep runs fast and relevant |
| `providerType` | string | — | Optional specialty filter (e.g. `"Endocrinology"`) |
| `lastName` | string | — | Optional prescriber last name filter |
| `organizationName` | string | — | Optional org name filter (used only if `lastName` is empty) |
| `drugName` | string | — | Optional drug filter (brand tried first, e.g. `"Ozempic"`, then generic) |
| `maxItems` | integer | `500` | Max prescriber/drug rows to return |

#### Example input

```json
{
  "state": "CA",
  "providerType": "Endocrinology",
  "drugName": "Ozempic",
  "maxItems": 500
}
```

### Example run output

```json
{
  "npi": "1356789012",
  "prescriberName": "Patel, Anita",
  "specialty": "Endocrinology",
  "city": "San Diego",
  "state": "CA",
  "brandName": "Ozempic",
  "genericName": "Semaglutide",
  "totalClaims": 412,
  "totalDrugCost": 387450.18,
  "year": 2023
}
```

### Use cases

- **Pharma sales & market access teams** identifying and ranking high-volume prescribers for a target drug in a territory.
- **Med-device companies** mapping specialty prescribing patterns to find clinical decision-makers.
- **Healthcare market intelligence analysts** sizing drug uptake and competitive share by state and specialty.
- **Commercial ops teams** enriching prescriber lists (join on `npi` with the NPI scraper) for territory planning.

### vs IQVIA and enterprise prescriber-data vendors

IQVIA and similar prescriber-intelligence vendors sell this kind of intel through enterprise contracts at enterprise prices. This **Medicare Part D prescriber scraper** pulls the **official CMS Part D public dataset** instead — pay per result, no contract, no minimum.

Honest caveat: the CMS data is the **public Medicare Part D claims summary**, not IQVIA's proprietary projected, audited, all-payer panel. It covers Medicare Part D only and is released on CMS's annual schedule. If you need all-payer projected volumes, that's a different (paid) product. If you need authoritative Medicare prescribing fact, this is it.

### Pricing

Pay per result — billed only for the prescriber/drug rows returned, no subscription.

### Keywords

Medicare Part D prescriber data, CMS prescriber scraper, prescriber drug data, CMS open data prescribers, prescriber by drug, Ozempic prescribers, prescriber volume data, pharma market access data, prescriber NPI claims, Medicare prescribing data

# Actor input Schema

## `state` (type: `string`):

Two-letter US state code to filter prescribers by (e.g. CA, NY, TX). Strongly recommended — CMS Part D is national.

## `providerType` (type: `string`):

Prescriber specialty exactly as CMS labels it (e.g. Endocrinology, Family Practice, Internal Medicine, Cardiology). Optional.

## `lastName` (type: `string`):

Filter by an individual prescriber's last name (exact match). Optional.

## `organizationName` (type: `string`):

Filter by organization prescriber name (exact match). Optional. Used only if Last name is empty.

## `drugName` (type: `string`):

Filter by a drug, brand (e.g. Ozempic) or generic (e.g. Semaglutide). Brand is tried first, then generic. Optional.

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

Maximum number of prescriber-drug rows to output.

## Actor input object example

```json
{
  "state": "CA",
  "providerType": "Endocrinology",
  "drugName": "Ozempic",
  "maxItems": 500
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("foo121/cms-prescriber-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("foo121/cms-prescriber-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 '{}' |
apify call foo121/cms-prescriber-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vxAeN9tKiKidGC8Fr/builds/PzRY8LdTkJD6KUY4X/openapi.json
