Healthcare Provider Payments Scraper - NPI & CMS Payments
Pricing
from $10.00 / 1,000 provider records
Healthcare Provider Payments Scraper - NPI & CMS Payments
Scrape U.S. healthcare provider profiles from the NPPES NPI Registry and match each to CMS Open Payments: general, research and ownership/investment records across 7 program years (2019-2025). Filter by name, organization or state. Export CSV, Excel, JSON. No login or API key.
Pricing
from $10.00 / 1,000 provider records
Rating
0.0
(0)
Developer
RecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Healthcare Provider Payments Scraper looks up U.S. providers by NPI list, name, organization, specialty, city, ZIP or teaching hospital in the NPPES NPI Registry and matches each one to CMS Open Payments: general payments, research payments and ownership interests across program years 2019-2025. Filter payments by year, company, nature and amount, and monitor for new payments only. Export CSV, Excel, JSON or API. No login, no API key. Verified 2026-10-10. $10 per 1,000 providers.
Healthcare Provider Payments Scraper turns an NPI number, a name or a search into a provider profile plus the money drug and device companies reported paying that provider. It reads the NPI Registry and the CMS Open Payments "Sunshine Act" database across all seven published program years.
๐ฉบ What does the Healthcare Provider Payments Scraper do?
- Finds providers by NPI numbers, name, organization, specialty, city, ZIP code and state, or teaching hospitals by name or 6-digit CMS Certification Number (CCN). Inputs are merged and de-duplicated; duplicate NPIs are never billed.
- Optionally attaches general payments, research payments and ownership or investment interests (up to 40 keys per payment), filtered by program year, paying company, nature of payment (19 CMS types) and amount range. You are billed only for payments that pass.
- Only-new mode skips what you already received.
๐ What data can you extract from the NPI Registry and CMS Open Payments?
| Field | Description |
|---|---|
recordType, npi, ccn, enumerationType | provider or teaching-hospital; NPI number, or CCN for hospitals; NPI-1 individual or NPI-2 organization |
firstName, middleName, lastName, nameSuffix, organizationName | Provider or organization name |
credential, status, soleProprietor, primarySpecialty, primaryTaxonomyCode | Credential, registry status, sole proprietor flag, specialty and taxonomy code |
locationCity, locationState, locationZip | Registered practice location |
enumerationDate, certificationDate, lastUpdated | When the NPI was issued, certified and last changed |
taxonomies, addresses, practiceLocations, otherNames, identifiers, alternateNames, organizationalSubpart, authorizedOfficialName, authorizedOfficialTitle | Specialties and licenses, addresses, locations, other names and identifiers, organization details |
generalPayments, researchPayments, ownershipInterests | Arrays of payment objects with up to 40, 37 and 20 keys |
generalPaymentsCount, generalPaymentsTotalUsd | Count and total in the row; research and ownership have the same pair |
changeType, scrapedAt | Only-new mode (new or new-payments); UTC timestamp of the run |
Each payment object carries fields such as programYear, dateIso, recordId, amount, natureOfPayment, payingCompany and products; research payments add clinicalTrialsId, studyName and principalInvestigators. Recipient street addresses are left out on purpose, because they are contact data of private individuals.
๐งพ Sample output from a real run
Row shape from a cloud run (example input below, general payments on), trimmed; provider fields come from an earlier run:
{"recordType": "provider","npi": "1871538041","lastName": "SMITH","credential": "MD","status": "A","generalPayments": [{ "programYear": "2025", "recordId": "1238515311", "date": "05/21/2025", "amount": 25.02, "natureOfPayment": "Food and Beverage", "payingCompany": "Viatris Specialty LLC" }],"generalPaymentsCount": 1,"generalPaymentsTotalUsd": 25.02,"scrapedAt": "2026-10-10T00:00:00.000Z"}
That run charged 1 provider and 1 general payment record; scrapedAt is illustrative.
๐ฐ How much does it cost to scrape NPI and Open Payments data?
Pay per event, only for rows saved, never for a failed or empty run. Prices read from the live Actor on 2026-10-10.
| Event | Free tier (per 1,000) | Gold and up (per 1,000) |
|---|---|---|
| Provider record (provider or teaching hospital row) | $10.00 | $10.00 |
| General payment record | $15.00 | $12.75 |
| Research payment record | $18.00 | $15.30 |
| Ownership interest record | $20.00 | $17.00 |
Bronze and Silver sit between. Payments removed by your filters are not billed.
Worked examples (Free tier):
- One NPI with
programYears2025,payingCompanyViatris andminAmountUsd10: 1 provider plus 1 general payment = $0.01 + $0.015 = $0.025 (real cloud run). - 1,000 providers with no payments: 1,000 x $0.01 = $10.00. With 3 general payments each, $10.00 + 3,000 x $0.015 = $55.00 ($48.25 at Gold and up).
The Actor stops cleanly with "Stopped at your max charge limit" at your max total charge. Free plan: 10 providers per run.
๐ How to scrape the NPI Registry and Open Payments (3 steps)
- Fill at least one search field (NPI, name, organization, specialty, city, ZIP or teaching hospital); state alone is not enough.
- Switch on the payment categories you need and set caps and filters.
- Click Start and download CSV, Excel, JSON or XML.
โ๏ธ Input
| Field | Type | Default | Notes |
|---|---|---|---|
npi | list of strings | empty | Exact 10-digit NPIs; unknown ones are skipped and named |
providerName, organizationName, specialty, city, postalCode | string | none | Name (one word is a last name), facility, NPPES taxonomy description, city, 5-digit ZIP |
state, enumerationType | string, select | none, ANY | 2-letter state (narrows searches, not enough alone); ANY, NPI-1 or NPI-2 |
teachingHospital | string | none | Part of a hospital name or a 6-digit CCN |
maxItems | integer | 10 | Provider rows to return (free plan: 10) |
includeGeneralPayments, includeResearchPayments, includeOwnershipInterests | boolean | false | Attach each payment category |
maxGeneralPayments, maxResearchPayments, maxOwnershipInterests | integer | 50, 50, 20 | Per provider caps, up to 5000, 5000, 1000 |
programYears | list of strings | all | Checked against the CMS catalog |
payingCompany | string | none | Case-insensitive "contains" |
natureOfPayment | multi-select | all | 19 CMS values; general payments only |
minAmountUsd, maxAmountUsd | number | 0 | General and research payments; 0 means no limit |
onlyNew, stateKey, resetSeen | boolean, string, boolean | false, empty, false | Only-new monitoring and its memory |
Example input:
{"npi": ["1871538041"],"programYears": ["2025"],"payingCompany": "Viatris","minAmountUsd": 10,"includeGeneralPayments": true,"maxItems": 10}
No search field, only state, or a wrong value (NPI not 10 digits, bad ZIP or year, minimum above maximum) gives one free error row with errorType: "invalid-input".
๐ฆ Output
One dataset row per provider (recordType: "provider") or teaching hospital (recordType: "teaching-hospital"), with an Overview view and a full view. Provider rows have 40 top-level data columns, plus error, errorType and hint on error rows.
โ๏ธ Healthcare provider payments scraper vs alternatives
Listings read from the Apify Store on 2026-10-10 (Free tier unless noted).
| This Actor | scrapers_lat | automation-lab | |
|---|---|---|---|
| Price | Provider $0.01, general $0.015, research $0.018, ownership $0.02 | From $6.15 per 1,000; $0.008 to $0.009231 per row | $0.005 start plus $0.0096 per item (Bronze) |
| NPI Registry profile joined | Yes, in every row | Not stated in their listing | Not stated in their listing |
| Payment types | General, research, ownership | General, research, ownership | General payments |
| Filters | NPI list, years, company, nature, amount | NPI, year, company, nature; no amount filter listed | NPI, years, manufacturer, nature, amount |
| Only-new monitoring | Yes, with changeType | Not stated in their listing | None; compare datasets yourself |
The cheapest per payment row is not us: our general payment costs $15 per 1,000 on the Free tier, against $8 to $9.23 (scrapers_lat) and about $11 (automation-lab, plus its start fee). nexgendata lists $0.05 per record and parseforge $0.012 per result, neither with an NPI join. We charge more because each row carries the NPPES profile, filters run before billing, and only-new mode skips what you already have. If you only need raw payment rows, a cheaper actor fits.
๐ฏ Use cases
Compliance review, pharma and medtech intelligence, investment due diligence, journalism, and scheduled monitoring of NPIs.
๐ Run it by API, schedule it, connect it
Call the Actor with the Apify API (curl POST https://api.apify.com/v2/acts/recordsdata~healthcare-provider-payments-scraper/runs), schedule it, and push results to Google Sheets, Make, Zapier, n8n or Airbyte.
๐ Monitor new payments (only-new mode)
Set onlyNew to true and keep the same stateKey (or leave it empty to derive it from your inputs). The Actor stores what it delivered in the named store healthcare-payments-seen and skips providers and payment record ids already delivered, before the cap and before charging. An NPI list is the safest monitor.
๐ค Healthcare Provider Payments Scraper MCP server for AI agents
Agents can call this Actor through the Apify MCP server at https://mcp.apify.com?tools=RecordsData/healthcare-provider-payments-scraper. The URL loads only this Actor as a tool.
Example agent prompt: "Use the Healthcare Provider Payments Scraper for NPI 1871538041 with general payments on, year 2025 and only Viatris payments of at least $10, then list each payment with date, amount and nature."
Tool description for agents: "Look up U.S. healthcare providers or teaching hospitals in the NPPES NPI Registry and attach CMS Open Payments general, research and ownership records, filtered by year, company, nature and amount." Choose it when an agent needs a provider's identity together with the industry money reported to CMS. It takes the same fields as the Input table.
๐ Is it legal to scrape the NPI Registry and Open Payments?
Both sources are public U.S. government datasets without login. The Actor reads public APIs only. You are responsible for how you use the data. This is an independent tool, not affiliated with CMS or HHS.
โ Frequently asked questions
Do I need an API key for NPPES or CMS Open Payments?
No. Healthcare Provider Payments Scraper reads the public NPPES NPI Registry and the public CMS Open Payments database, and neither source needs registration or an API key. You only need an Apify account; Free-plan users get up to 10 providers per run.
Why did my Healthcare Provider Payments Scraper run return 0 results?
The search matched no NPI record, or a payment filter removed every payment. Try a more exact name, drop the state filter, or search by NPI. A search with no matches finishes successfully with "No providers matched this search (nothing charged)", so it costs nothing.
Why did my Healthcare Provider Payments Scraper run fail?
It fails with a clear message, and charges nothing, when the NPI Registry or the CMS Open Payments catalog cannot be reached, or when every provider was skipped because a CMS query failed. An empty search ends as SUCCEEDED instead. Start the run again later.
What happens if I send an empty or invalid input?
The run ends as SUCCEEDED and charges nothing. It saves a single free error row with errorType: "invalid-input", the exact message and a hint, for example when no search field is filled, an NPI is not 10 digits, or a year has no published data.
Why is researchPayments or ownershipInterests missing from a row?
The key is left out when the provider has no such records after your filters, or the category is off. In a real run of 10 providers named John Smith, 4 had general payments and none had research payments or ownership interests.
How far back do the CMS Open Payments records go?
The scraper sweeps every program year that CMS lists in its public Open Payments catalog, newest first. At the time of writing that is seven program years, 2019 to 2025, for all three payment categories, up to your per-provider cap. Use programYears to query only some years.
How fresh is the NPI and Open Payments data?
The data is as fresh as NPPES and CMS Open Payments themselves, since both are read live. The NPI Registry updates frequently, while Open Payments publishes once per program year. Both are queried live, and every row has a scrapedAt timestamp.
Can I search the NPI Registry by NPI number?
Yes. Put one or more 10-digit numbers in npi, one per line. Each provider is delivered once, and a number that does not exist is skipped and named in the run message. A value that is not 10 digits gives a free error row.
Does it match research payments where the doctor is only the principal investigator?
Not yet. The scraper matches only payments where the provider is the covered recipient in CMS Open Payments. Research payments list the principalInvestigators, but a physician who is only the investigator and not the formal recipient is not matched, because that CMS lookup is slow.
How long does a Healthcare Provider Payments Scraper run take?
Small runs finish in seconds: in 16 cloud runs of 1 to 5 providers the median was 3.6 seconds and the longest 25 seconds. A run of 10 providers with all three payment checks across seven program years took about 292 seconds before the payment filters were added. Set programYears to shorten runs.
Which payment filters are available and how does the amount filter work?
Filter by programYears, payingCompany, natureOfPayment (19 CMS values, general payments only) and minAmountUsd or maxAmountUsd (general and research). CMS stores amounts as text, so the Actor applies the range itself, scanning about 4,000 rows per provider and payment type or 60 seconds.
Can I search teaching hospitals, and what is a CCN?
Yes. Teaching hospitals have no NPI; CMS reports their payments under a CCN. Enter part of a name or a 6-digit CCN in teachingHospital, with an optional state, to search 1,522 hospitals. Each match is one teaching-hospital row, billed as a provider record, with no ownership interests.
How does only-new monitoring work and when is a known provider billed again?
With onlyNew, the Actor remembers delivered providers and payment record ids under your stateKey. A new provider returns with changeType: "new". A known provider with undelivered payments comes back as new-payments with only those payments, billed as one provider record plus the payments. Nothing new means no charge.
Why did the column order of my export change?
Provider rows grew from 19 to 40 top-level data columns, and the 21 new ones (such as ccn, middleName and the payment counts and totals) sit among the old ones. Old names are unchanged, but a CSV or Excel export has a different column order, so read columns by name.
What happens if a CMS query fails during a run?
The scraper fails closed, so you never get partial payment data without knowing. After retries on network errors, HTTP 429 and 5xx, a provider whose CMS payment query still fails is skipped, not delivered and not charged, instead of silently losing a program year of data.
Are recipient street addresses included in the payments?
No, on purpose. CMS publishes the recipient's street address lines in the payment data, but they are contact details of private individuals, so the scraper leaves them out. Each payment keeps the recipient specialty, city, state and ZIP. NPPES practice addresses remain in addresses.
๐ Support
Open an issue on the Actor's Issues tab or write to contact.punkrecordsdata@gmail.com.
Last updated: 2026-10-11