NADAC Drug Prices Scraper
parseforge/nadac-drug-prices-scraper
BusinessOtherE-commerce
Scrapes NADAC drug pricing records from the CMS public dataset. Returns per-unit acquisition cost, effective date, and drug attributes as flat rows.
- Total users
- 1
- Monthly active
- 0
- Total runs
- 106
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 9 days ago
Overview
NADAC Drug Prices Scraper
Scrape NADAC drug prices from the official CMS dataset, filtered by drug name, NDC, dosage form, or OTC status. Every record includes the per-unit acquisition cost, effective date, and classification. Export to CSV, JSON, Excel, or XML.
The NADAC (National Average Drug Acquisition Cost) dataset is the official benchmark for what pharmacies pay for prescription and over-the-counter drugs in the US. This Actor reads the public CMS NADAC files directly, so you can pull current and historical pricing without an API key or registration. Filter by drug name, NDC, classification, dosage form, OTC status, or effective date, and get a clean, flat dataset ready for analysis.
| Who uses it | What they scrape NADAC for |
|---|---|
| Pharmacy benefit analysts | Monitor acquisition cost trends for specific drugs or therapeutic classes |
| Health economists | Build longitudinal price series for research on drug pricing |
| Pharmaceutical market researchers | Track generic and brand price movements across dosage forms |
| Insurance pricing teams | Validate reimbursement benchmarks against NADAC data |
| Healthcare data engineers | Automate weekly NADAC data ingestion into internal pipelines |
What it does
This Actor collects NADAC drug pricing records from the CMS public dataset and returns each one as a flat row with the per-unit cost, effective date, and drug attributes.
- ๐ Drug name filter: match any part of the NDC description, like METFORMIN or IBUPROFEN.
- ๐ฏ Exact NDC lookup: enter an 11-digit National Drug Code to get that specific product's pricing.
- ๐ Dosage form filter: restrict to tablets, capsules, injections, and 16 other FDA dosage forms.
- ๐ท๏ธ Classification filter: choose brand, generic, or any.
- ๐ OTC status filter: separate over-the-counter from prescription drugs.
- ๐ Effective date range: pull only records effective within a specific window.
- โ๏ธ Sort order: newest or oldest effective date first.
- ๐ฆ Bulk export: collect up to 1,000,000 records per run and export to CSV, JSON, Excel, or XML.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with NADAC data
๐ Track generic drug price trends.
A market researcher runs the Actor weekly with classification=Generic and a date range to see how generic acquisition costs are moving across the market.
๐ Look up a specific NDC's price history.
A pharmacist enters an 11-digit NDC and gets all effective prices for that product, useful for reimbursement checks.
๐ Compare brand vs. generic costs.
A health economist pulls both classifications for a drug name like METFORMIN to analyze the brand-to-generic price gap.
๐ Build a weekly pricing dashboard.
A data engineer schedules the Actor to run every week and feeds the flat output into a BI tool for ongoing monitoring.
๐งพ Audit pharmacy reimbursement rates.
An insurance analyst filters by OTC status and dosage form to verify that reimbursement benchmarks align with current NADAC values.
Why choose this scraper
| What you get | |
|---|---|
| Official CMS data | Prices come straight from the public NADAC files published by CMS, no third-party interpretation. |
| No API key needed | The Actor reads the public dataset directly, so you can start scraping immediately. |
| Flexible filtering | Narrow by drug name, NDC, classification, dosage form, OTC status, or effective date. |
| Flat, clean output | Every record is returned as a single row with consistent fields, ready for spreadsheets or databases. |
| Scalable collection | Collect up to a million records per run, enough for full market analyses. |
How it compares
This Actor focuses on flexible filtering and bulk export of current NADAC records, while the competitors below add weekly price change tracking and mover detection.
| Feature | ParseForge | NADAC Drug Pricing API - Weekly NDC Price Movers | Prescription Drug Price Tracker (CMS NADAC) |
|---|---|---|---|
| Filter by drug name | Yes | Yes | Yes |
| Filter by exact NDC | Yes | Yes | Yes |
| Filter by dosage form | Yes | Not listed | Not listed |
| Filter by OTC status | Yes | Not listed | Not listed |
| Filter by effective date range | Yes | Yes | Not listed |
| Week-over-week price changes | Not listed | Yes | Yes |
| Biggest mover detection | Not listed | Yes | Not listed |
Configure the run
Drive the Actor with a drug name, NDC, or any combination of filters, and each filter is applied as records are read so only matching NADAC prices reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"maxItems": 10,
"drugName": "METFORMIN",
"sortOrder": "newest"
}
A larger pull:
{
"maxItems": 200,
"drugName": "METFORMIN",
"sortOrder": "newest"
}
Pricing
Pay-per-result: $0.005 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $0.50 |
| 1,000 results | $5.00 |
| 10,000 results | $50.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the NADAC Drug Prices Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to NADAC through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/nadac-drug-prices-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check your filters. If you entered a drug name, make sure it matches part of the NDC description. If you used an NDC, verify it is exactly 11 digits. Also check the effective date range; if the dates are too narrow, no records may fall within them.
Why are my results limited to 10 records?
The default maxItems is 10. Increase the maxItems input to collect more records, up to 1,000,000.
How do I get the latest prices?
Set sortOrder to newest to get the most recent effective dates first. The Actor always reads the current public dataset, so no extra step is needed.
Can I filter by both drug name and NDC?
Yes, you can combine any filters. The Actor applies all specified filters, so results must match every condition.
Why is my NDC filter not working?
The NDC must be exactly 11 digits with no dashes or spaces. Double-check the code and try again.
FAQ
| Question | Answer |
|---|---|
| What is NADAC? | NADAC stands for National Average Drug Acquisition Cost. It is the average price pharmacies pay to acquire a drug, published weekly by CMS. It is a key benchmark for drug pricing and reimbursement in the US. |
| Where does the data come from? | The Actor reads the official NADAC public dataset files published by CMS. No third-party API or key is required. |
| Can I filter by drug name? | Yes, use the drugName input to match any part of the NDC description. For example, entering METFORMIN returns all products with METFORMIN in the name. |
| Can I get prices for a specific NDC? | Yes, enter the exact 11-digit NDC in the ndc input field. The Actor will return only records for that code. |
| What is the difference between brand and generic classification? | The classification field indicates whether the drug is a brand product (B) or a generic (G). You can filter by either or leave it as Any. |
| How do I filter by dosage form? | Use the dosageForm select input. Options include tablet, capsule, solution, injection, and many others. |
| Can I separate over-the-counter from prescription drugs? | Yes, the otc input lets you choose Over-the-counter (Y), Prescription (N), or Any. |
| How do I filter by effective date? | Use effectiveFrom and effectiveTo with dates in YYYY-MM-DD format. The Actor returns records whose effective date falls within that range. |
| What is the maximum number of records I can collect? | You can set maxItems up to 1,000,000 per run. The default is 10. |
| What output formats are supported? | The Actor can export results as CSV, JSON, Excel, or XML, depending on your Apify dataset settings. |
| Is this data updated regularly? | The Actor pulls from the current public NADAC files each time it runs, so you get the latest published data. |
| Do I need an API key? | No, the Actor accesses the public dataset directly. You only need an Apify account to run it. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Centers for Medicare & Medicaid Services (CMS). It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| maxItems | integer | Maximum number of drug prices to collect per run. | 10 |
| drugName | string | Match part of the NDC description / drug name (e.g. METFORMIN, IBUPROFEN). | METFORMIN |
| ndc | string | Exact 11-digit National Drug Code. | not set |
| classification | string (3 options) | Brand or generic classification. | not set |
| dosageForm | string (19 options) | Filter by FDA dosage form. | not set |
| otc | string (3 options) | Restrict to over-the-counter (Y) or prescription (N) drugs. | not set |
| effectiveFrom | string | Only records with an effective date on or after this date. | not set |
| effectiveTo | string | Only records with an effective date on or before this date. | not set |
| sortOrder | string (2 options) | Order by effective date. | newest |
Pricing
from $3.75 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Result Item | Charged once per result collected. | $0.00375 to $0.005 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~nadac-drug-prices-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
