OrbTop

CMS Medicare PECOS Provider Enrollment Scraper

BUSINESSOTHERDEVELOPER TOOLS

CMS Medicare PECOS Provider Enrollment Crawler

Extracts Medicare provider enrollment data from three CMS open-data APIs: the PECOS/DAC national file (2.86M active enrollments), the Opt-Out Affidavits list (56K providers who left Medicare), and the Order and Referring Authority list (~2M NPIs). Returns clean JSON with 19 normalized fields per record, filterable by NPI, state, or specialty.


CMS Medicare PECOS Enrollment Crawler Features

  • Pulls from three CMS datasets in a single run — PECOS enrollment, opt-out status, and order/refer authority
  • Merges all three by NPI in all mode, so one output row carries fields from every source
  • Filters by NPI (exact 10-digit lookup), US state code, or specialty string
  • Returns 19 standardized fields including enrollment ID, PAC ID, telehealth status, and opt-out dates
  • Pure API — no browser, no proxy, no CAPTCHA. CMS publishes these as open government data
  • Streaming pagination across all three APIs; handles the full 2.86M-row DAC file without memory issues
  • 200ms courtesy delay between requests — stays polite to a public API

What Can You Do With CMS PECOS Data?

  • Pharma and medical device reps — Build territory lists of active Medicare-enrolled providers by specialty and state, filtered to the NPIs that can order your products
  • Billing and RCM teams — Verify enrollment status and Order/Refer authority before submitting claims; catch opted-out providers before they become denials
  • Payer credentialing departments — Cross-reference PECOS enrollment IDs and PAC IDs against your panel data to catch gaps and discrepancies
  • Healthcare data vendors — Enrich NPPES NPI directory exports with Medicare-specific enrollment status, opt-out flags, and order-and-refer eligibility
  • Compliance and audit teams — Flag providers in your network who have opted out of Medicare, and verify which categories of order-and-refer authority they hold

How CMS Medicare PECOS Enrollment Crawler Works

  1. Select a dataset mode: all (merged), pecos (enrollment only), opt_out, or order_refer. The default is all.
  2. Optionally supply an NPI, state code, or specialty to filter. Leave all three blank for a full-dataset pull.
  3. The crawler pages through the selected CMS API(s), normalizing field names across the three different response shapes.
  4. In all mode, records stream from the PECOS/DAC file enriched with opt-out and order-and-refer lookups per NPI. In single-dataset modes, the json_api crawler handles pagination directly.

Input

{
  "dataset": "all",
  "npi": "",
  "state": "CA",
  "specialty": "",
  "maxItems": 100,
  "sp_intended_usage": "Building a provider list for credentialing",
  "sp_improvement_suggestions": "n/a"
}
Field Type Default Description
dataset string "all" Which dataset to pull. all merges all three by NPI; pecos streams the DAC enrollment file; opt_out returns only opted-out providers; order_refer returns order-and-refer authority records
npi string "" Single 10-digit NPI for a targeted lookup. Leave blank for full dataset
state string "" Two-letter US state code (e.g., CA, TX). Filters PECOS and opt-out datasets
specialty string "" Specialty name or taxonomy prefix to filter PECOS records (e.g., INTERNAL MEDICINE)
maxItems integer 10 Maximum rows to return. Set to 0 for an unlimited full-dataset pull
proxyConfiguration object {useApifyProxy: false} Proxy settings. Not needed — CMS APIs are public
sp_intended_usage string required Brief description of how you'll use the data
sp_improvement_suggestions string required Feedback or "n/a"

Single-NPI lookup:

{
  "dataset": "all",
  "npi": "1245084383",
  "maxItems": 0,
  "sp_intended_usage": "Provider credentialing check",
  "sp_improvement_suggestions": "n/a"
}

Full opt-out list:

{
  "dataset": "opt_out",
  "maxItems": 0,
  "sp_intended_usage": "Building Medicare opt-out exclusion list",
  "sp_improvement_suggestions": "n/a"
}

CMS Medicare PECOS Enrollment Crawler Output Fields

All Mode (Merged)

Streams PECOS/DAC records enriched with opt-out and order-and-refer data for NPI-filtered queries. For state or specialty filters, returns PECOS enrollment fields with opt-out and order-and-refer fields set to their defaults.

{
  "npi": "1245084383",
  "first_name": "JOHN",
  "last_name": "SMITH",
  "organization_name": "",
  "specialty": "INTERNAL MEDICINE",
  "taxonomy_code": "",
  "enrollment_id": "I20031105000066",
  "pac_id": "2860530703",
  "gender": "M",
  "credential": "MD",
  "enrollment_state": "CA",
  "address": "123 MAIN ST",
  "city": "LOS ANGELES",
  "zip_code": "90001",
  "phone": "3105550100",
  "telehealth": "Y",
  "group_assignment": "I",
  "reassignments_count": 2,
  "opt_out_status": "not_opted_out",
  "opt_out_effective_date": "",
  "opt_out_end_date": "",
  "order_refer_authority": ["PARTB", "DME"],
  "order_refer_eligible": true,
  "source_dataset": "PECOS,OrderRefer"
}
Field Type Description
npi string 10-digit National Provider Identifier
first_name string Provider first name
last_name string Provider last name
organization_name string Organization or facility name (for group/org NPIs)
specialty string Primary specialty description
taxonomy_code string Primary taxonomy code (populated by NPPES join; blank in raw CMS data)
enrollment_id string CMS enrollment ID from PECOS/DAC dataset
pac_id string Provider and Affiliate Control (PAC) ID
gender string Provider gender: M or F
credential string Credential: MD, DO, NP, PA, etc.
enrollment_state string State of Medicare enrollment
address string Practice street address
city string Practice city
zip_code string Practice ZIP code
phone string Practice phone number
telehealth string Telehealth indicator: Y or N
group_assignment string Individual or group Medicare assignment: I or M
reassignments_count number Organization member count (from PECOS reassignment data)
opt_out_status string opted_out or not_opted_out
opt_out_effective_date string Date the provider opted out of Medicare
opt_out_end_date string Date the opt-out period expires
order_refer_authority array Categories of order-and-refer authority: PARTB, DME, HHA, PMD, HOSPICE
order_refer_eligible boolean True if the provider has any order-and-refer authority
source_dataset string Which datasets contributed data: PECOS, OptOut, OrderRefer, or combinations like PECOS,OrderRefer

Opt-Out Mode

{
  "npi": "1234567890",
  "first_name": "JANE",
  "last_name": "DOE",
  "specialty": "PSYCHIATRY",
  "enrollment_state": "NY",
  "address": "456 ELM ST",
  "city": "NEW YORK",
  "zip_code": "10001",
  "opt_out_status": "opted_out",
  "opt_out_effective_date": "07/01/2022",
  "opt_out_end_date": "07/01/2024",
  "source_dataset": "OptOut"
}

Order-Refer Mode

{
  "npi": "9876543210",
  "first_name": "ROBERT",
  "last_name": "JONES",
  "order_refer_authority": ["PARTB", "HHA", "HOSPICE"],
  "order_refer_eligible": true,
  "source_dataset": "OrderRefer"
}

🔍 FAQ

How do I scrape CMS Medicare PECOS enrollment data?

CMS Medicare PECOS Enrollment Crawler connects to the CMS open-data APIs directly — no authentication or API key required. Configure your dataset mode and filters, set maxItems to 0 for a full pull, and run. The actor handles pagination, normalization, and field merging automatically.

How much does this actor cost to run?

CMS Medicare PECOS Enrollment Crawler uses pay-per-event pricing at $0.001 per record. A full PECOS pull (~2.86M records) costs roughly $2.86. Filtered runs by state or NPI cost proportionally less. There is also a $0.10 platform fee per run start.

What data is available from the CMS PECOS API?

CMS Medicare PECOS Enrollment Crawler returns enrollment status, specialty, practice address, telehealth flag, group assignment, opt-out status and dates, and order-and-refer authority across five categories (PARTB, DME, HHA, PMD, HOSPICE). It does not return billing volume, claim counts, or financial data — those are in separate CMS datasets.

Does this actor need proxies?

CMS Medicare PECOS Enrollment Crawler does not need proxies. These are public government APIs with no IP-based rate limiting. Set proxyConfiguration: { useApifyProxy: false } and the actor runs without any proxy overhead.

Can I filter by specialty or taxonomy code?

Filter by specialty string using the specialty input field. The CMS PECOS API matches against the primary specialty description (e.g., INTERNAL MEDICINE). Taxonomy code filtering is not directly supported by the CMS API — filter by specialty description instead, then join to the NPPES NPI dataset by NPI if you need taxonomy codes.


Need More Features?

Need custom filters, additional CMS datasets, or a data join with NPPES? File an issue or get in touch.

Why Use CMS Medicare PECOS Enrollment Crawler?

  • Three datasets, one run — PECOS enrollment, opt-out status, and order-and-refer authority merged by NPI, so you don't have to cross-reference three CSV files yourself
  • Affordable — $0.001 per record, no proxy costs, and the entire 2.86M-row DAC file costs under $3
  • Government source — Data comes directly from CMS open-data APIs, updated monthly (PECOS/opt-out) or weekly (order-and-refer), with no intermediary or third-party aggregator markup