# NADAC Drug Prices Scraper — Pharmacy Acquisition Cost per NDC (`compute-edge/nadac-drug-acquisition-cost-scraper`) Actor

Extract Medicaid NADAC weekly pharmacy invoice prices per NDC from data.medicaid.gov. Filter by drug name, NDC, OTC/branded status. Output: 786k+ drug records with acquisition cost, pricing unit, and effective dates.

- **URL**: https://apify.com/compute-edge/nadac-drug-acquisition-cost-scraper.md
- **Developed by:** [Compute Edge](https://apify.com/compute-edge) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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 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

## NADAC Drug Prices Scraper — Pharmacy Acquisition Cost per NDC

Extract **NADAC (National Average Drug Acquisition Cost)** data from Medicaid.gov — the weekly benchmark for what pharmacies actually pay per drug unit. The dataset covers 786,000+ NDC codes for 2026, updated weekly by the Centers for Medicare & Medicaid Services (CMS).

**NADAC** is the most reliable public benchmark for pharmacy invoice prices. It represents what independent and chain pharmacies pay suppliers per unit of each drug, making it indispensable for:

- **PBM auditing** — compare plan reimbursements against NADAC benchmarks
- **Drug pricing analytics** — identify branded vs. generic cost spreads
- **Formulary management** — track effective-date price changes weekly
- **Healthcare research** — analyze pharmacy acquisition cost trends by NDC, drug class, or OTC status
- **Compliance reporting** — Medicaid reimbursement rate benchmarking

### Data Fields

| Field | Description |
|-------|-------------|
| `ndc` | 11-digit National Drug Code |
| `ndcDescription` | Drug name and strength (e.g., "METFORMIN HCL 500 MG TABLET") |
| `nadacPerUnit` | Weekly average pharmacy invoice price per unit (USD) |
| `pricingUnit` | Unit of measure (ML, GM, EA) |
        | `effectiveDate` | Date the NADAC rate became effective |
| `asOfDate` | Survey week the price was reported |
| `otc` | "Y" = over-the-counter, "N" = prescription |
| `classificationForRateSetting` | "B" = branded, "G" = generic |
| `pharmacyTypeIndicator` | "C" = chain pharmacy, "I" = independent pharmacy |
| `explanationCode` | CMS code explaining the pricing methodology |
| `correspondingGenericNadacPerUnit` | NADAC price of the generic equivalent (if applicable) |
| `year` | Dataset year (2014–2026) |

---

### How to scrape NADAC drug prices

Follow these steps to extract Medicaid NADAC pharmacy acquisition cost data:

1. **Open the Actor** — Go to the [NADAC Drug Prices Scraper](https://apify.com/seatsignal/nadac-drug-acquisition-cost-scraper) page on Apify Store and click **Try for free**.

2. **Set the year** — Choose the dataset year (2014–2026). The default is 2026, which contains the most recent weekly NADAC rates with 786,000+ NDC records.

3. **Apply optional filters** — Use any combination of:
   - **Drug Name Filter**: partial match on drug description (e.g., `insulin`, `metformin`, `lisinopril`)
   - **NDC Code Filter**: partial match on the 11-digit NDC (e.g., `00003` for all drugs from a specific labeler)
   - **OTC Only**: restrict to over-the-counter drugs
   - **Branded Only**: restrict to brand-name drugs (excludes generics)

4. **Set Max Results** — Default is 500. Set up to 50,000 for bulk exports. For the full 786k dataset, run multiple Actor instances with offset-based batching or contact us for a custom solution.

5. **Run the Actor** — Click **Start**. Typical run for 500 records takes under 30 seconds. For 50,000 records, expect 2–4 minutes.

6. **Download your data** — Export as JSON, CSV, or Excel from the Dataset tab. Use the Apify API to integrate directly into your pipeline.

---

### Pricing

This Actor uses **pay-per-result** pricing on top of standard Apify compute costs:

- **$0.003 per result** (drug price record)
- **Apify compute**: approximately $0.01–$0.05 per 1,000 results depending on filters
- **Example**: 500 records ≈ $0.015 in scraper fees + minimal compute

Run costs are deterministic — you pay for what you extract.

---

### Input Example

```json
{
  "year": 2026,
  "drugName": "metformin",
  "otcOnly": false,
  "brandedOnly": false,
  "maxResults": 100
}
````

Empty input `{}` returns 500 records from the 2026 NADAC dataset sorted by default API order.

***

### Output Example

```json
[
  {
    "ndc": "00093721301",
    "ndcDescription": "METFORMIN HCL 500 MG TABLET",
    "nadacPerUnit": 0.01845,
    "pricingUnit": "EA",
    "effectiveDate": "2026-01-01",
    "asOfDate": "2026-01-08",
    "otc": "N",
    "classificationForRateSetting": "G",
    "pharmacyTypeIndicator": "C",
    "explanationCode": "17",
    "correspondingGenericNadacPerUnit": null,
    "year": 2026
  }
]
```

***

### Other Scrapers

Pair this Actor with our complementary healthcare data scrapers:

- [DailyMed Drug Labels Scraper](https://apify.com/compute-edge/dailymed-drug-labels-scraper) — Full FDA drug label text, indications, warnings, and dosing information per NDC
- [FDA Drug Shortages Scraper](https://apify.com/compute-edge/fda-drug-shortages-scraper) — Current and resolved drug shortage alerts from the FDA
- [RxNorm Drug Concepts Scraper](https://apify.com/compute-edge/rxnorm-drug-concepts-scraper) — Normalize drug names to RxNorm CUIs and cross-reference brand/generic equivalents
- [Medicare Provider Scraper](https://apify.com/compute-edge/medicare-provider-scraper) — CMS Medicare provider enrollment and payment data

***

### FAQ

**Q: How often is NADAC updated?**

A: CMS publishes new NADAC rates weekly, typically each Wednesday. Each year has its own dataset on Medicaid.gov. The Actor resolves the correct dataset ID dynamically at runtime.

**Q: What does NADAC measure exactly?**

A: NADAC (National Average Drug Acquisition Cost) reflects the average invoice price pharmacies pay their wholesalers for drugs, based on weekly pharmacy surveys conducted by CMS. It does not include dispensing fees, markups, or PBM rebates.

**Q: Can I get all 786,000 records for 2026?**

A: Yes — set `maxResults` to 50,000 and run multiple times with different filters, or contact us for a bulk data delivery. The full dataset is also directly downloadable from Medicaid.gov in CSV format.

**Q: What does `classificationForRateSetting` mean?**

A: "B" = branded (innovator) drug; "G" = generic equivalent. This classification is used by state Medicaid programs to set reimbursement rates differently for brand vs. generic drugs.

**Q: What does `pharmacyTypeIndicator` mean?**

A: "C" = chain pharmacy survey respondent; "I" = independent pharmacy survey respondent. Chain and independent pharmacies often pay different acquisition costs for the same drug.

***

### Legal Disclaimer

This Actor accesses publicly available data from the U.S. Centers for Medicare & Medicaid Services (CMS) at [data.medicaid.gov](https://data.medicaid.gov). All NADAC data is published as open government data under the [CMS data use agreement](https://www.medicaid.gov/about-us/privacy-policy/index.html). No authentication bypass, personal data collection, or terms-of-service violation occurs. Use of this data for commercial purposes is permitted under applicable open government data policies. Users are responsible for compliance with applicable laws in their jurisdiction.

For questions or support: [Apify Actor page](https://apify.com/seatsignal/nadac-drug-acquisition-cost-scraper)

# Actor input Schema

## `year` (type: `integer`):

The NADAC dataset year to query. Each year is a separate Medicaid.gov dataset. Range: 2014–2026.

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

Filter by drug/NDC description (case-insensitive partial match on ndc\_description). Example: 'insulin', 'metformin', 'atorvastatin'.

## `ndc` (type: `string`):

Filter by National Drug Code (partial/prefix match). Example: '00003' to match all drugs from a specific labeler.

## `otcOnly` (type: `boolean`):

If enabled, only return over-the-counter (OTC) drugs (otc = 'Y').

## `brandedOnly` (type: `boolean`):

If enabled, only return branded drugs (classification\_for\_rate\_setting = 'B'). Excludes generic equivalents.

## `maxResults` (type: `integer`):

Maximum number of drug price records to return. The 2026 NADAC dataset contains ~786,000 rows. Set higher for bulk exports.

## Actor input object example

```json
{
  "year": 2026,
  "drugName": "",
  "ndc": "",
  "otcOnly": false,
  "brandedOnly": false,
  "maxResults": 500
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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("compute-edge/nadac-drug-acquisition-cost-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("compute-edge/nadac-drug-acquisition-cost-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 compute-edge/nadac-drug-acquisition-cost-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=compute-edge/nadac-drug-acquisition-cost-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NADAC Drug Prices Scraper — Pharmacy Acquisition Cost per NDC",
        "description": "Extract Medicaid NADAC weekly pharmacy invoice prices per NDC from data.medicaid.gov. Filter by drug name, NDC, OTC/branded status. Output: 786k+ drug records with acquisition cost, pricing unit, and effective dates.",
        "version": "0.1",
        "x-build-id": "aWGRRC9GAblfQpbqu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/compute-edge~nadac-drug-acquisition-cost-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-compute-edge-nadac-drug-acquisition-cost-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/compute-edge~nadac-drug-acquisition-cost-scraper/runs": {
            "post": {
                "operationId": "runs-sync-compute-edge-nadac-drug-acquisition-cost-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/compute-edge~nadac-drug-acquisition-cost-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-compute-edge-nadac-drug-acquisition-cost-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": {
                    "year": {
                        "title": "Data Year",
                        "minimum": 2014,
                        "maximum": 2026,
                        "type": "integer",
                        "description": "The NADAC dataset year to query. Each year is a separate Medicaid.gov dataset. Range: 2014–2026.",
                        "default": 2026
                    },
                    "drugName": {
                        "title": "Drug Name Filter",
                        "type": "string",
                        "description": "Filter by drug/NDC description (case-insensitive partial match on ndc_description). Example: 'insulin', 'metformin', 'atorvastatin'.",
                        "default": ""
                    },
                    "ndc": {
                        "title": "NDC Code Filter",
                        "type": "string",
                        "description": "Filter by National Drug Code (partial/prefix match). Example: '00003' to match all drugs from a specific labeler.",
                        "default": ""
                    },
                    "otcOnly": {
                        "title": "OTC Drugs Only",
                        "type": "boolean",
                        "description": "If enabled, only return over-the-counter (OTC) drugs (otc = 'Y').",
                        "default": false
                    },
                    "brandedOnly": {
                        "title": "Branded Drugs Only",
                        "type": "boolean",
                        "description": "If enabled, only return branded drugs (classification_for_rate_setting = 'B'). Excludes generic equivalents.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of drug price records to return. The 2026 NADAC dataset contains ~786,000 rows. Set higher for bulk exports.",
                        "default": 500
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
