# Healthcare Provider Payments Scraper - NPI & CMS Payments (`punkrecordsdata/healthcare-provider-payments-scraper`) Actor

NPPES provider profiles matched to real CMS Open Payments industry payments: general, research and ownership/investment interests, across every available program year. Export to CSV, Excel, JSON.

- **URL**: https://apify.com/punkrecordsdata/healthcare-provider-payments-scraper.md
- **Developed by:** [PunkRecordsData](https://apify.com/punkrecordsdata) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.13 / 1,000 provider records

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/actors/running/actors-in-store.md#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

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner" alt="PunkRecordsData" width="100%" />
</p>

## 🩺 Healthcare Provider Payments Scraper: NPI Registry & CMS Open Payments, PunkRecordsData

> 🚀 **Any U.S. healthcare provider's real NPI profile, matched to every industry payment on file with the government, in one run.** General payments, research payments, and ownership/investment interests, straight from NPPES and CMS Open Payments, across every available program year.

Scrape U.S. healthcare provider data straight from `npiregistry.cms.hhs.gov`, the government's own NPI registry, matched to real conflict-of-interest data from the [CMS Open Payments](https://openpaymentsdata.cms.gov) "Sunshine Act" database: provider identity, credentials, specialties and addresses, plus every general payment (food, travel, consulting, speaking, gifts), research payment, and ownership or investment interest a drug or device company reported for that provider. No login, no API key, checked across every program year on record, not just the latest.

Built for the [Apify platform](https://apify.com): screen a provider before a partnership, monitor a competitor's key-opinion-leader relationships, or feed conflict-of-interest data straight into a compliance workflow.

### 📋 What the Healthcare Provider Payments Scraper does

Give it a provider name (like "John Smith") or an organization name and it returns one row per matching NPI record: name, credential, taxonomy/specialty, license, and every address on file. Turn on **General payments** for food, travel, consulting, speaking and gift payments from drug and device companies. Turn on **Research payments** for payments tied to a formal research agreement or protocol. Turn on **Ownership & investment interests** for any ownership or investment stake a physician (or immediate family member) holds in a reporting company. Every payment category is checked across every CMS Open Payments program year available (2019-2025), not just the current one, so you get the provider's full history, not a one-year snapshot.

> 💡 **Why it matters:** most NPI and Open Payments scrapers on the market do one or the other, and check a single year at best. This one matches the two sources together and sweeps every available year automatically, so a provider's full industry-payment history surfaces in one run instead of several manual lookups.

### 📊 Output

Real sample fields from a verified run, one row per provider identified by `recordType`.

**`provider-record`** (primary, one row per matched provider):

```json
{
  "npi": "1134206956",
  "firstName": "GREGG",
  "lastName": "STONE",
  "credential": "M.D.",
  "taxonomies": [{ "code": "207RC0000X", "description": "Internal Medicine, Cardiovascular Disease", "license": "156307", "state": "NY", "primary": true }]
}
```

When each extra is turned on, it's attached as a nested array on the same row:

```json
"generalPayments": [{ "programYear": "2025", "date": "06/25/2025", "amount": 220.59, "natureOfPayment": "Food and Beverage", "payingCompany": "SpectraWAVE, Inc", "productName": "HyperVue Imaging System" }],
"researchPayments": [{ "programYear": "2025", "date": "04/18/2025", "amount": 22500, "formOfPayment": "Cash or cash equivalent", "payingCompany": "ZOLL Circulation Inc", "productName": "TherOx DS2 Console" }],
"ownershipInterests": [{ "programYear": "2025", "valueOfInterest": 1467539.19, "heldBy": "Physician Covered Recipient", "company": "SpectraWAVE, Inc" }]
```

Every extra you don't enable returns `"Not Requested"` instead of an empty field, and data a provider genuinely doesn't have (most providers have no ownership interests, for instance) returns `"N/A"`. You always know why a field is empty, never guess.

### ✨ Why choose this Actor

- **Two government sources matched together, one run.** NPI identity and CMS Open Payments conflict-of-interest data, no need to look each one up separately.
- **Every available program year, not just the latest.** Payments are swept across 2019-2025 automatically, so a provider's full history surfaces without running the Actor seven times.
- **Three distinct payment categories, not one flat dump.** General, research and ownership interests are genuinely different disclosures with different legal significance, kept separate rather than merged into one undifferentiated list.
- **No login, no API key.** Both NPPES and CMS Open Payments are public with no registration required anywhere in this Actor.

### 📈 How it compares to alternatives

Measured against the closest published NPI/Open Payments actors on the Apify Store:

| Actor | Primary price | Billable events |
|---|---|---|
| NPI-only scraper | $2.00 / 1,000 | 1 |
| Open Payments-only scraper (single year) | $10.00 / 1,000 | 1 |
| Open Payments-only scraper (single year) | $50.00 / 1,000 | 1 |
| **This Actor** | $2.50 / 1,000 (provider) | **4** (provider, general payment, research payment, ownership interest), each swept across every available year |

### 🚀 How to use

1. Create a free [Apify account](https://console.apify.com). New accounts get $5 in free credit.
2. Open the Healthcare Provider Payments Scraper and enter a provider name (e.g. "John Smith") or an organization name.
3. Toggle on the payment categories you need: general, research, ownership interests.
4. Click **Start** and wait for the run to finish.
5. Download your data as CSV, Excel, JSON or XML, or pull it via the API.

### 💼 Business use cases

**Healthcare compliance & conflict-of-interest review**
Check a provider's full industry-payment history before a partnership, hire, or committee appointment.

**Pharma & medtech competitive intelligence**
Track which providers a competitor is paying, and how much, across general, research and ownership categories.

**Investment & due diligence research**
Screen a physician's ownership stakes in device or drug companies before a related investment decision.

**Journalism & consumer advocacy**
Cross-reference a provider's real payment history with their public-facing recommendations or affiliations.

### 🔌 Automating Healthcare Provider Payments Scraper

Connect this Actor to **Make**, **Zapier**, **Slack** or **Airbyte** to push new provider or payment data into a spreadsheet, database or channel automatically. Schedule an annual run after CMS publishes each new program year to catch newly disclosed payments.

### 🌟 Beyond business use cases

**Research:** academic health-policy research using real NPPES and Open Payments data.
**Personal projects:** check your own doctor's industry-payment history out of curiosity.
**Non-profit:** healthcare-transparency and conflict-of-interest advocacy projects.
**Experimentation:** test conflict-of-interest scoring or NLP models against real structured payment data.

### 🤖 Ask an AI assistant about this scraper

Paste this Actor's Store page into ChatGPT, Claude or Perplexity and ask: "Does this healthcare payments scraper check every CMS Open Payments program year, or just the most recent one?" The README and input schema are structured so AI assistants can answer accurately from the page alone.

### ❓ Frequently Asked Questions

**Do I need an API key for NPPES or CMS Open Payments?**
No. Both sources are fully public with no registration required anywhere in this Actor.

**Why are general, research and ownership payments separate events?**
Because they are legally distinct disclosure categories under the Sunshine Act, with different significance for a compliance review. Billing them separately means you only pay for the categories you actually turn on.

**Why does `ownershipInterests` return "N/A" for most providers?**
Because most providers don't hold an ownership or investment stake in a reporting company. "N/A" means the Actor checked every available year and confirmed none are on record, not that it skipped the check.

**What happens if a provider name doesn't match anything?**
The Actor finishes with a clear status message telling you nothing matched, rather than silently returning nothing. Try a more exact or different name, or narrow with a state.

**How far back does the payment history go?**
Every program year CMS currently publishes through its public dataset catalog (2019 onward at the time of writing). Earlier years sit on a separately archived catalog and aren't covered by this version.

**How fresh is the data?**
As fresh as NPPES (updated weekly) and CMS Open Payments (updated as new program years are certified and published) themselves.

### 🔌 Integrate with any app

Every run's output is available as CSV, Excel, JSON or XML, or through Apify's API and client libraries for Python and JavaScript.

### 🔗 Recommended Actors

Browse the rest of the [PunkRecordsData](https://apify.com/punkrecordsdata) catalog for more scrapers covering federal contracts, bank regulatory data, SEC filings and court records.

> 💡 **Pro Tip:** browse the complete [PunkRecordsData collection](https://apify.com/punkrecordsdata).

**🆘 Need Help?** contact.punkrecordsdata@gmail.com

> **⚠️ Disclaimer:** This is an independent tool, not affiliated with, endorsed by, or sponsored by CMS, HHS, or the NPPES registry. It collects only publicly available provider and payment data from their own public APIs.

# Actor input Schema

## `providerName` (type: `string`):

Individual provider's first and last name (e.g. "John Smith"). Leave blank if searching by organization name instead.

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

Organization/facility name to search instead of an individual provider (e.g. "Mayo Clinic").

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

Optional. Narrows the NPPES search to a US state (e.g. "CA").

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

Maximum number of provider-record rows to deliver. Free users: limited to 10 (preview). Paid users: optional, max 1,000,000.

## `includeGeneralPayments` (type: `boolean`):

Food, travel, consulting, speaking and gift payments from drug/device companies. Billed per payment as general-payment-record.

## `maxGeneralPayments` (type: `integer`):

How many general-payment records to pull per provider when General payments is on.

## `includeResearchPayments` (type: `boolean`):

Payments made in connection with a formal research agreement or protocol. Billed per payment as research-payment-record.

## `maxResearchPayments` (type: `integer`):

How many research-payment records to pull per provider when Research payments is on.

## `includeOwnershipInterests` (type: `boolean`):

Ownership or investment interests a physician (or immediate family member) holds in a reporting drug/device company. Billed per interest as ownership-interest-record.

## `maxOwnershipInterests` (type: `integer`):

How many ownership-interest records to pull per provider when Ownership & investment interests is on.

## Actor input object example

```json
{
  "providerName": "John Smith",
  "maxItems": 10,
  "includeGeneralPayments": false,
  "maxGeneralPayments": 50,
  "includeResearchPayments": false,
  "maxResearchPayments": 50,
  "includeOwnershipInterests": false,
  "maxOwnershipInterests": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields: provider name, NPI, credential, status

## `fullData` (type: `string`):

Complete dataset with every field, including nested taxonomies, addresses and Open Payments records

# 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 = {
    "providerName": "John Smith",
    "maxItems": 10,
    "maxGeneralPayments": 50,
    "maxResearchPayments": 50,
    "maxOwnershipInterests": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("punkrecordsdata/healthcare-provider-payments-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 = {
    "providerName": "John Smith",
    "maxItems": 10,
    "maxGeneralPayments": 50,
    "maxResearchPayments": 50,
    "maxOwnershipInterests": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("punkrecordsdata/healthcare-provider-payments-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "providerName": "John Smith",
  "maxItems": 10,
  "maxGeneralPayments": 50,
  "maxResearchPayments": 50,
  "maxOwnershipInterests": 20
}' |
apify call punkrecordsdata/healthcare-provider-payments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,punkrecordsdata/healthcare-provider-payments-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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