# US HealthCare.gov Plan & Network Directory Finder (`afkdigital/newapi13-marketplace-network-directory`) Actor

Find 2026 individual Marketplace plans, issuers and official provider-directory links in 30 supported states. Includes source versions and URL reachability; no clinician or specialty matching.

- **URL**: https://apify.com/afkdigital/newapi13-marketplace-network-directory.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.50 / 1,000 unique issuer / plan / network records

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## US HealthCare.gov Plan & Network Directory Finder

Find **2026 individual Marketplace issuers, base plans, network names and official provider-directory links** from a versioned snapshot of CMS public-use files. Filter by state, county, plan type, medical or standalone dental coverage, issuer, or network. Export the resulting Apify Dataset as JSON or CSV.

**Price: $0.0045 per unique issuer / base-plan / network record — $4.50 per 1,000 records.** There is no Actor-start event fee. A record remains a billable result when its source directory URL is unreachable: the plan/network identification and the URL diagnostic are still delivered.

This release does **not** list individual clinicians, identify therapists, classify behavioral-health networks, confirm a provider's participation, or test appointment availability. Finding an issuer's directory URL is not evidence of any of those things.

### Supported data and geography

- **Plan year:** 2026 only. Requests for other years fail; the Actor never substitutes a different year.
- **Market:** Individual plans identified in the CMS Plan Attributes file as `Both` or `On the Exchange`. Includes medical and standalone dental plans; excludes SHOP and off-exchange-only records.
- **States:** AK, AL, AR, AZ, DE, FL, HI, IA, IN, KS, LA, MI, MO, MS, MT, NC, ND, NE, NH, OH, OK, OR, SC, SD, TN, TX, UT, WI, WV, WY.
- **County search:** a five-digit county FIPS or exact county name within the selected state. County-level matches can include a plan serving only part of that county; such records have `partial_county: true`.
- **Limited ZIP search:** only ZIPs explicitly listed in CMS **partial-county service areas** are supported. ZIP results include those explicit service-area matches only. They are **not a complete list of plans serving a ZIP**; full-county and statewide service areas are omitted from ZIP searches. An unsupported ZIP produces a clear error. Use county search for broader coverage. If both ZIP and county are supplied, their source mapping must agree.
- The separate state-based-exchange PUFs are outside this release. Coverage is not nationwide.

Snapshot **`2026-2544b68fd0e4ff4d`** contains **4,690 unique records: 4,038 medical and 652 dental**. The restricted ZIP index contains **159 explicit ZIPs in Michigan, Oregon and Texas only**. Customer-service phone is null in 44 source-derived records. These are snapshot counts, not a claim of complete national plan coverage.

The CMS source page labels the core 2026 PUF release August 4, 2026. The public catalog marks the Plan Attributes, Network, Service Area and dental Landscape files modified August 10, 2026, and medical Landscape modified August 26, 2026. These dates have different meanings and are recorded separately. The source manifest identifies the exact downloaded files and their SHA-256 hashes.

The snapshot excludes issuer **58944, Mending Health of Oklahoma**, following the CMS notice that it stopped accepting 2026 enrollments on August 25, 2026. This exclusion does not determine coverage for existing members. Other results are source-reported plan records, not a guarantee that a plan is currently open for enrollment.

**AFK MESH processed output derived from CMS source files. This is not an official CMS dataset and is not endorsed by CMS.** Confirm current enrollment and provider participation with the Marketplace, issuer and relevant provider.

### Quick start

1. Set `state` and optionally `county`.
2. Select `coverage` and `planType`.
3. Set `maxResults` and a dollar cap with `maxCostUsd`.
4. Run the Actor and open its Dataset. Use the JSON or CSV output links.
5. Open the `SUMMARY` and `SOURCE_MANIFEST` records for cost limits, geographic scope, source freshness and provenance.

#### Florida: medical plans in Miami-Dade

```json
{
  "planYear": 2026,
  "state": "FL",
  "county": "12086",
  "coverage": "medical",
  "planType": "all",
  "maxResults": 20,
  "maxCostUsd": 0.09,
  "validateNetworkUrls": true,
  "networkTimeoutSecs": 8,
  "checkSourceFreshness": true
}
```

#### Texas: Community Health Choice in Harris County

```json
{
  "planYear": 2026,
  "state": "TX",
  "county": "Harris",
  "issuerId": "11718",
  "coverage": "medical",
  "planType": "HMO",
  "maxResults": 10,
  "maxCostUsd": 0.045
}
```

### Inputs

| Input | Default | Meaning |
|---|---|---|
| `planYear` | `2026` | Only the validated year is supported. |
| `state` | `FL` in Console | Required two-letter state code from the supported list. |
| `county` | omitted | Exact county name or five-digit FIPS in the selected state. |
| `zip` | omitted | Five-character ZIP, restricted to explicit partial-county CMS service-area entries. |
| `planType` | `all` | `HMO`, `PPO`, `EPO`, `POS`, `Indemnity`, or `all`; the CMS PlanType field. |
| `coverage` | `medical` | `medical`, `dental`, or `all`. |
| `issuerId` | omitted | Exact five-digit issuer ID. |
| `networkId` | omitted | Exact network ID. IDs are issuer-scoped; combine with issuerId when needed. |
| `networkName` | omitted | Case-insensitive substring of the source network name. |
| `maxResults` | `100` | Maximum unique records, 1–10,000. |
| `maxCostUsd` | `1` | Maximum result-event charges, 0–100 USD. Zero returns no paid records. |
| `validateNetworkUrls` | `true` | Bounded HTTP reachability checks on each distinct source URL. |
| `networkTimeoutSecs` | `8` | Total per-URL time budget, 2–15 seconds, including DNS, redirects and retries. |
| `checkSourceFreshness` | `true` | Compare source release timestamps with the current official catalog. |

Identifiers and ZIPs are strings to preserve leading zeros. Unknown input fields are rejected. A provider-specialty or behavioral-health filter is not supported.

### Output fields

One Dataset row represents a unique `plan_year + state + issuer_id + plan_id + network_id`. `plan_id` is the CMS 14-character **StandardComponentId**. CSR variants are aggregated into `plan_variant_ids`, so variants do not create duplicate paid rows. Different networks for the same issuer remain separate.

| Field | Meaning |
|---|---|
| `plan_year` | Source plan year. |
| `issuer_id`, `issuer_name` | CMS issuer identifier and source marketing name. |
| `state` | Two-letter source state. |
| `network_name`, `network_id` | Network PUF name and issuer-scoped ID. |
| `network_url` | Original issuer-reported directory URL from the Network PUF. |
| `plan_id` | Base-plan StandardComponentId, not a variant ID. |
| `medical_or_dental_flag` | Normalized `medical` or `dental`. |
| `customer_service_phone` | Unique source toll-free number, otherwise unique local number; null if unavailable or unresolved. |
| `source_file` | Source filenames used for the record. |
| `source_url` | Official Network PUF download URL; the manifest contains all contributing source URLs. |
| `updated_at` | Latest catalog modification timestamp among sources used for the record; not the HTTP check time. |
| `source_version` | Immutable snapshot identifier. |
| `record_key` | Deterministic unique output/billing identity. |
| `plan_type`, `plan_name`, `plan_variant_ids` | Additional source plan attributes. |
| `matched_counties`, `matched_zip` | Geography matched by the query. A state-only query leaves matched_counties empty. |
| `geography_match_type`, `partial_county` | Geographic match precision and partial-county indicator. |
| `network_url_status`, `network_url_http_status` | HTTP reachability result and response code, when available. |
| `network_url_final`, `network_url_checked_at` | Final inspected URL and UTC check time. |
| `directory_scope` | Always `issuer_network_directory_link`. |
| `provider_participation_verified` | Always `false` in this release. |

Missing source fields are JSON `null`, never invented or filled from unrelated issuers. CSV represents missing values as empty cells. Phones come from medical/dental Landscape files joined by state, issuer and base-plan ID. TTY values are not substituted for customer-service phone numbers.

#### Source-verified example

The following values are from the 2026 CMS files for Miami-Dade, Florida:

```json
{
  "plan_year": 2026,
  "issuer_id": "16842",
  "issuer_name": "Florida Blue (BlueCross BlueShield FL)",
  "state": "FL",
  "network_name": "BlueSelect",
  "network_id": "FLN002",
  "network_url": "https://providersearch.floridablue.com/visitor/ffm/#/?ffmPlanCode=FFMBSC",
  "plan_id": "16842FL0120001",
  "medical_or_dental_flag": "medical",
  "customer_service_phone": "1-800-352-2583",
  "source_url": "https://data.healthcare.gov/datafile/py2026/network_PUF.csv",
  "directory_scope": "issuer_network_directory_link",
  "provider_participation_verified": false
}
```

This abbreviated example does not assert that the URL is reachable now. Every full runtime record also includes source filenames, source version, update timestamp and the requested URL diagnostic.

### Directory URL checks

The Actor checks distinct public HTTP(S) URLs with bounded concurrency, redirects, timeouts and at most one retry for transient errors. It blocks private/local destinations, unsafe schemes and credential-bearing URLs. It does not use paid proxies, authentication, CAPTCHA solving or access-control bypasses.

Typical diagnostic values:

| Status | Interpretation |
|---|---|
| `reachable` | An HTTP success response was obtained. This does not inspect directory content or verify any clinician. |
| `http_error` | An HTTP error such as 404/410 or a persistent server error. |
| `access_restricted` | Access was denied or rate limited; this does not establish a broken directory. |
| `timeout` | The bounded check did not finish in time. |
| `dns_error`, `network_error` | Name resolution or transport check failed. |
| `unsafe_url`, `invalid_url` | The URL cannot be safely checked or is malformed. |
| `missing` | No source URL is available. |
| `not_checked` | Reachability checks were disabled. |

Original source URLs are preserved even when checks fail. A redirect or HTTP 200 can lead to a generic landing page or a JavaScript application; it is not content validation. Failure from the cloud environment may differ from what a person sees in their browser.

### Pricing and cost control

The only paid event is Apify's automatically charged default-Dataset-item event, priced at **$0.0045**. There is no additional Actor-start fee and no separate provider-lookup charge.

| Delivered unique records | Result-event charge |
|---:|---:|
| 1 | $0.0045 |
| 10 | $0.045 |
| 100 | $0.45 |
| 1,000 | $4.50 |

The output limit is the smallest of `maxResults`, `floor(maxCostUsd / 0.0045)`, and the number allowed by the Apify run charge cap. For example, $0.0135 permits three records; $0.01349 permits two. A smaller budget may return fewer records than requested. No-match and invalid-input runs produce no paid result rows.

Deduplication applies **within a run and its resumed default Dataset**. Starting a new run delivers and charges for its own results. Existing acknowledged rows are skipped on resume. The Actor stops on uncertain Dataset acknowledgement instead of blindly resending a batch.

The `SUMMARY` includes selected and delivered counts, estimated result-event cost and the stop reason. Apify's billing record is authoritative. Owners testing their own Actor may see platform resource usage rather than the same invoice a customer receives.

### Data versioning and freshness

The Docker image bundles a compact, immutable source snapshot. It does not download and parse the large XLSX source files on every run. Each run saves `SOURCE_MANIFEST` with source URLs, file hashes, retrieval times, release metadata and snapshot checksums. Snapshot integrity and year consistency are checked before output.

With `checkSourceFreshness: true`, the Actor makes a bounded request to the official catalog and reports whether its published source timestamps differ. A new release is reported; it is not silently adopted. This comparison cannot detect publisher corrections that keep the same catalog timestamp. A source refresh requires rebuilding and validating a new snapshot.

The Actor uses public PUF downloads and does not require a CMS Marketplace API key. The current Marketplace API has separate access conditions. Its public example/test key is not embedded or used for production geography.

### JSON and CSV exports

After a run succeeds, use the output links in Apify Console or the Dataset API:

```text
https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true
https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&clean=true&fields=plan_year,issuer_id,issuer_name,state,network_name,network_url,plan_id,medical_or_dental_flag,customer_service_phone,source_file,source_url,updated_at,market_coverage,network_id,phone_source_file,plan_name,plan_type,plan_variant_ids,qhp_type,record_key,service_area_id,source_version,matched_counties,matched_zip,geography_match_type,partial_county,directory_scope,provider_participation_verified,network_url_status,network_url_http_status,network_url_final,network_url_checked_at,network_url_error,actor_version,source_freshness_status
```

The CSV output link specifies all release fields so a zero-result Dataset returns an empty CSV without a missing-columns export error.

Apply the access permissions of your Dataset; do not put API tokens in public links. Run metadata is in the default key-value store's `SUMMARY` and `SOURCE_MANIFEST` records.

### Sources

- [CMS Marketplace Public Use Files](https://www.cms.gov/marketplace/resources/data/public-use-files)
- [Official HealthCare.gov public-data catalog](https://data.healthcare.gov/data.json)
- [2026 Plan Attributes CSV](https://data.healthcare.gov/datafile/py2026/plan_attributes_PUF.csv)
- [2026 Network CSV](https://data.healthcare.gov/datafile/py2026/network_PUF.csv)
- [2026 Service Area CSV](https://data.healthcare.gov/datafile/py2026/service_area_PUF.csv)
- [2026 Individual Medical Landscape](https://data.healthcare.gov/datafile/py2026/individual_market_medical.zip)
- [2026 Individual Dental Landscape](https://data.healthcare.gov/datafile/py2026/individual_market_dental.zip)
- [CMS Marketplace API access guidance](https://developer.cms.gov/marketplace-api/)
- [Apify pay-per-event documentation](https://docs.apify.com/actors/publishing/monetize/pay-per-event)

### Development and maintenance

Runtime: Python 3.13, Apify SDK 4.1.0 and HTTPX 0.28.1. Source snapshot generation additionally uses lxml 6.0.2.

Run `python -m unittest discover -s tests -v` in the project environment. The snapshot builder reads the preserved official files and metadata in `research/`; its output is `data/snapshot.json.gz` and `data/source_manifest.json`. Credentials and original research files are excluded from the Docker/source upload.

Release checks cover year rejection, exact joins, state/county validation, restricted ZIP behavior, multiple networks per issuer, variant deduplication, null phones, HTTP failures, redirect safety, retries, spending limits and Dataset acknowledgement. Release evidence includes real Florida and Texas county runs, rather than relying solely on fixtures.

Actor code version: **1.0.0**. Permanent project identifier: **NEWAPI13**.

# Actor input Schema

## `planYear` (type: `integer`):

This release supports the validated 2026 snapshot only.

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

Main Exchange PUF geography: the 30 states listed here. Other state-based exchanges are not included.

## `county` (type: `string`):

Optional five-digit FIPS (for example 12086) or exact county name within the selected state. Partial-county service is labeled in output.

## `zip` (type: `string`):

Limited ZIP support: matches only ZIPs explicitly listed in CMS partial-county service areas. It does not list all plans for a ZIP. Unsupported ZIPs fail clearly; use county for broader search. Keep leading zeros.

## `planType` (type: `string`):

CMS PlanType: HMO, PPO, EPO, POS or Indemnity. This is not a provider-specialty filter.

## `coverage` (type: `string`):

Select medical, standalone dental, or both.

## `issuerId` (type: `string`):

Optional exact five-digit CMS issuer identifier.

## `networkId` (type: `string`):

Optional exact CMS network identifier, used together with the selected state and other filters.

## `networkName` (type: `string`):

Optional case-insensitive match against the issuer-reported network name.

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

Maximum issuer/base-plan/network records for this run. Repeated CSR variants are counted once.

## `maxCostUsd` (type: `number`):

Caps result events at $0.0045 each. The stricter Apify run spending limit also applies. Zero produces no paid records.

## `validateNetworkUrls` (type: `boolean`):

Check each unique public URL once with bounded redirects, timeout and retry. HTTP success does not verify providers, specialties or participation.

## `networkTimeoutSecs` (type: `integer`):

Time budget per unique directory URL, including redirects and retry.

## `checkSourceFreshness` (type: `boolean`):

Compare the pinned source release with the official CMS catalog and report any newer release. The Actor does not silently substitute another snapshot.

## Actor input object example

```json
{
  "planYear": 2026,
  "state": "FL",
  "planType": "all",
  "coverage": "medical",
  "maxResults": 100,
  "maxCostUsd": 1,
  "validateNetworkUrls": true,
  "networkTimeoutSecs": 8,
  "checkSourceFreshness": true
}
```

# Actor output Schema

## `records` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `sources` (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("afkdigital/newapi13-marketplace-network-directory").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("afkdigital/newapi13-marketplace-network-directory").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 '{}' |
apify call afkdigital/newapi13-marketplace-network-directory --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afkdigital/newapi13-marketplace-network-directory"
        }
    }
}
```

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/IyTcdthUuwDgwhL4B/builds/CJ9Iau2zD4Pzp3KWm/openapi.json
