# Healthcare Price Transparency API - Negotiated & Cash Prices (`nabeelbaghoor/healthcare-price-transparency-api`) Actor

Healthcare price transparency data from the Turquoise Health API: negotiated insurance rates and cash prices for shoppable procedures at hospitals, surgery and imaging centers, price statistics, payers, networks and service packages. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/healthcare-price-transparency-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 healthcare price returneds

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

## Healthcare Price Transparency API - Negotiated & Cash Prices

Compare what a shoppable procedure costs across US hospitals, surgery centers and imaging centers: negotiated insurance rates by payer network and cash (self pay) prices from the Turquoise Health Consumer Pricing API, with your own API credentials, as one clean dataset row per price.

Turquoise Health builds its Clear Rates database from the machine readable files hospitals and insurers publish under the US price transparency rules, cross checks the rates against paid claims, and bundles billing codes into service packages that match how care is actually billed. This actor wraps the read only routes of its Consumer Pricing API v3 on api.turquoise.health: give a service package such as a knee MRI and a ZIP code, and get every priced provider nearby with its package total, cheapest or nearest first, plus price statistics and the provider, payer, network and package directories. Download the rows as JSON, CSV or Excel, schedule runs, or feed them into care navigation tools, benefits platforms, referral workflows, employer cost analysis, Google Sheets and AI agents. Bring your own API key.

BYOK, not live-tested: every path, parameter and enum comes from the published Turquoise Health OpenAPI document (version 3.2.105), but the actor has not been run against live Turquoise Health credentials.

### What it does

- **Price search (negotiated or cash)**: the package total for one service package at every matching provider, under one payer network's negotiated rate or as the cash price. Filter to one provider, or to providers near coordinates (with a radius), around a ZIP code, in a state, a metro area (CBSA) or a list of ZIP codes. Sort by total price or distance. Paged.
- **Price statistics**: the count, minimum, first quartile, median, average, third quartile and maximum of the same prices, in one row, for comparing a market or a network at a glance.
- **Price by ID**: single prices, optionally with the billing line items (CPT and HCPCS codes, fee types, association rates) that make up the package.
- **Provider search and provider by ID**: hospitals, ambulatory surgery centers, imaging centers and other facilities by name, NPI, provider type, semantic search, location, and whether they have prices for a package, payer or network.
- **Payer, network and service package search**: the insurers, payer networks and shoppable service packages with prices in the data, and the IDs the price modes take. Package search also finds the package built on a CPT or HCPCS code.
- **Provider types and package line items**: the valid provider type values, and the codes inside any package.
- **Pay only for results**: refused and empty lookups are recorded as a free row that says why, never charged.

Nothing in your Turquoise Health account is changed. The personalized estimate routes, which take a named member's identity, date of birth and member ID, are deliberately not wrapped.

### How to get API credentials

Turquoise Health issues API credentials to customers: a client id, a client secret and an organization id. A free demo account gives test credentials; production access comes through Turquoise Health sales. Paste all three into the credential fields (or set the DATA_API_CLIENT_ID, DATA_API_KEY and DATA_API_ORGANIZATION_ID secrets). The actor exchanges them once per run for an access token at api.turquoise.health/oauth/token, as the documentation describes, and reuses it. You can also paste a ready access token into the Client secret field and leave the client id empty. Secrets are sent only to Turquoise Health and are removed from everything the actor logs.

### Input

| Field | Modes | Description |
| --- | --- | --- |
| `mode` | all | `priceSearch` (default), `priceStatistics`, `priceById`, `providerSearch`, `providerById`, `providerTypes`, `payerSearch`, `networkSearch`, `packageSearch` or `packageLineItems` |
| `packageId` | price search, price statistics (required); provider, payer, network search | Service package ID such as `RA005` (knee MRI) |
| `pricingType` | price search, price statistics | `cash` (default) or `negotiated` |
| `networkId` | negotiated pricing (required); provider, package search | Payer network ID such as `-3776001016975145508` |
| `providerId` | price search, price statistics; payer, network, package search | One facility |
| `payerId` | provider, network, package search | One insurer |
| `sort`, `sortDirection` | price search | `total` or `distance`; `asc` or `desc` |
| `zip`, `latLng`, `radiusMiles`, `state`, `cbsa`, `zipCodes` | price search, price statistics; provider, payer, network search | One location only |
| `ids`, `expandLineItems` | price by ID, provider by ID, package line items | Up to 500 IDs a run |
| `name`, `searchText`, `minScore` | provider, payer, network, package search | Substring and semantic search |
| `npi`, `providerType` | provider search | Exact facility NPI and type |
| `anchorCode` | package search | CPT or HCPCS code such as `73721` |
| `maxResults` | all | Row ceiling for the run (default 100) |
| `requestsPerMinute` | all | Pacing, default 60 |
| `clientId`, `apiKey`, `organizationId` | all | Your Turquoise Health credentials (or a ready access token in `apiKey`) |

Example: cash prices for a knee MRI near downtown Denver, nearest first.

```json
{
    "mode": "priceSearch",
    "packageId": "RA005",
    "pricingType": "cash",
    "zip": "80202",
    "sort": "distance",
    "maxResults": 50
}
```

Example: negotiated rates for the same MRI under one payer network, statewide.

```json
{
    "mode": "priceSearch",
    "packageId": "RA005",
    "pricingType": "negotiated",
    "networkId": "-3776001016975145508",
    "state": "CO"
}
```

### Example output

One price search row (the full Turquoise Health record is kept under `record`):

```json
{
    "mode": "priceSearch",
    "modeLabel": "Price search",
    "recordType": "price",
    "query": "package=RA005 pricing=cash location=80202",
    "id": "p_5754_RA005_cash",
    "name": "MRI of the Knee at Example Imaging Center",
    "providerId": "5754",
    "providerName": "Example Imaging Center",
    "providerType": "Imaging Center",
    "npi": "1234567890",
    "city": "Denver",
    "state": "CO",
    "zip": "80218",
    "latitude": 39.7316,
    "longitude": -104.9714,
    "distanceMiles": 1.42,
    "packageId": "RA005",
    "packageName": "MRI of the Knee",
    "pricingType": "cash",
    "networkId": null,
    "networkName": null,
    "payerId": null,
    "payerName": null,
    "totalPrice": 650,
    "currency": "USD",
    "lineItemCount": null,
    "found": true,
    "retrievedAt": "2026-10-21T09:00:00.000Z",
    "note": null,
    "record": { "object": "price", "id": "p_5754_RA005_cash", "total": { "amount": "650.00", "minor_units": 65000, "currency": "USD" } }
}
```

A price statistics row carries `count`, `priceMin`, `priceQ1`, `priceMedian`, `priceAvg`, `priceQ3` and `priceMax` instead. Values above are illustrative.

### FAQ

#### What is the Turquoise Health Consumer Pricing API?

It is Turquoise Health's REST API for healthcare prices: negotiated commercial rates (its Clear Rates data, refreshed monthly) and cash prices for about 70 shoppable service packages, across roughly 14,000 hospitals, ambulatory surgery centers and imaging centers, 96 payers and 292 payer networks in all 50 states and DC, according to its documentation.

#### Do I need my own Turquoise Health credentials?

Yes. This actor is bring your own key: it runs on the client id, client secret and organization id Turquoise Health issued you, or a ready access token. Without them the run ends straight away with a message saying what to add, and nothing is charged.

#### How do I compare hospital prices for a procedure near me?

Find the service package with Service package search (for example name `MRI` or billing code `73721`), then run Price search with that package ID, a ZIP code and sort `total` for the cheapest providers first, or sort `distance` for the nearest.

#### How do I get negotiated insurance rates for a health plan?

Run Network search with the insurer's name (for example `Cigna`) to get its network IDs, then Price search with pricing type `negotiated` and that network ID. Each row is the package total that network has negotiated with one provider.

#### What is the difference between cash and negotiated prices?

A cash price is what the facility charges a self pay patient. A negotiated rate is the price an insurer's network agreed with the facility; it is the allowed amount before the member's deductible and coinsurance, not the member's out of pocket cost.

#### What is a service package?

A bundle of the billing codes that are usually billed together for one service, such as the imaging code plus facility and professional fees for a knee MRI. Package line items lists those codes with their fee type and how likely each is to be part of the package.

#### How many API requests does a run use?

One per ID, one per page in the paged searches (page size up to 250, matched to Maximum results), one for price statistics, plus one token request when you give a client id. A semantic search is always a single page. The run log reports the exact request count.

#### What do I pay?

Pay per result: 0.015 USD per price, 0.01 USD per price statistics summary, and 0.005 USD per provider, provider type, payer, network, package or line item. Refused and empty lookups are never charged. Your Turquoise Health contract is billed separately by Turquoise Health.

### Pricing

| Event | Price | Charged for |
| --- | --- | --- |
| `price-record` | 0.015 USD | Each negotiated rate or cash price from price search or price by ID |
| `price-statistics` | 0.01 USD | Each price statistics summary |
| `directory-record` | 0.005 USD | Each provider, provider type, payer, network, service package or package line item |

### Keyword map

Healthcare price transparency API, hospital price transparency data, negotiated rates API, insurance negotiated rates, cash price lookup, self pay prices, procedure cost comparison, MRI cost, colonoscopy price, CPT price lookup, shoppable services, Transparency in Coverage data, machine readable files, payer network rates, Turquoise Health API, Clear Rates, healthcare pricing data, care navigation, employer health cost analysis, AI healthcare cost agent.

### Terms and data use

Access to the Turquoise Health API is governed by your agreement with Turquoise Health. Its Master Subscription Agreement limits use to the customer's internal business purposes and bars using the service to build a competing product, so run this actor with your own credentials, keep the results for the uses your agreement allows, and do not publish or resell them without written permission from Turquoise Health. Turquoise Health notes that IDs can change when its data is refreshed, so read IDs fresh rather than storing them long term. Prices are estimates for informational purposes, not quotes or medical advice. This actor is not affiliated with or endorsed by Turquoise Health.

# Actor input Schema

## `mode` (type: `string`):

Price search returns negotiated insurance rates or cash prices for one service package (a shoppable procedure such as a knee MRI or colonoscopy) across hospitals, surgery centers and imaging centers, cheapest or nearest first. Price statistics gives the count, minimum, quartiles, median, average and maximum of the same prices. Price by ID reads single prices, optionally with their billing line items. Provider, payer, network and service package search read the directories and give the IDs the price modes take. Provider types lists the valid provider type values. Package line items shows the billing codes inside a package.

## `packageId` (type: `string`):

Price search and price statistics (required), and an optional filter on provider, payer and network search. The Turquoise Health package ID of a shoppable service, such as RA005 for a knee MRI. Find IDs with the Service package search mode.

## `pricingType` (type: `string`):

Price search and price statistics. Cash is the self pay price; negotiated is the rate under one payer network, which needs the network ID.

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

Negotiated pricing (required), and an optional filter on provider and package search. The payer network ID, such as -3776001016975145508. Find IDs with the Network search mode.

## `providerId` (type: `string`):

Optional on price search and price statistics (one facility only), and a filter on payer, network and package search. Find IDs with the Provider search mode.

## `payerId` (type: `string`):

Provider, network and package search only. Keeps records priced under this payer's networks. Find IDs with the Payer search mode.

## `sort` (type: `string`):

Price search only.

## `sortDirection` (type: `string`):

Price search only.

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

Search around the centroid of this 5 digit US ZIP code with the default radius. Set one location input only.

## `latLng` (type: `string`):

Instead of a ZIP code: latitude,longitude such as 39.746549,-104.966925.

## `radiusMiles` (type: `number`):

With coordinates only. The search radius around the point; Turquoise Health defaults to about 15.5 miles (25 km).

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

Instead of a point: a two letter state code such as CO.

## `cbsa` (type: `string`):

Instead of a point: a metro area name, matched as a case insensitive substring, such as Denver-Aurora.

## `zipCodes` (type: `array`):

Instead of a point: providers in any of these 5 digit ZIP codes, one per line.

## `ids` (type: `array`):

Price by ID, provider by ID and package line items only. One price ID, provider ID or service package ID per line, up to 500 a run, read fresh from this API (IDs change when the data is refreshed). Each ID is one request.

## `expandLineItems` (type: `boolean`):

Price by ID only. Inlines the billing codes, fee types and association rates that make up each priced package.

## `name` (type: `string`):

Provider, payer, network and package search. A case insensitive substring of the name, such as Inova or Aetna or MRI.

## `searchText` (type: `string`):

Provider, network and package search. A meaning based search such as knee imaging; answers one relevance ordered page of up to 250 results.

## `minScore` (type: `number`):

With semantic search only. Drops results below this similarity score (0 to 1).

## `npi` (type: `string`):

Provider search only. An exact 10 digit facility NPI.

## `providerType` (type: `string`):

Provider search only. An exact provider type such as Hospital; list the valid values with the Provider types mode.

## `anchorCode` (type: `string`):

Service package search only. A CPT or HCPCS anchor code such as 73721, returning the package built on it.

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

The most rows this run returns and charges for. Searches stop paging once this many rows are in, so no request is spent on rows that would be cut.

## `requestsPerMinute` (type: `integer`):

Pacing. A rate limit answer is waited out and retried; a used up allowance ends the run.

## `clientId` (type: `string`):

Your own Turquoise Health API client id, issued with your API access. Stored as a secret. You can instead set the DATA_API_CLIENT_ID environment secret.

## `apiKey` (type: `string`):

The client secret that goes with the client id. The client id, secret and organization id are exchanged at api.turquoise.health for an access token, reused for the whole run. You can paste a ready access token here instead and leave the client id empty. Stored as a secret, sent only to Turquoise Health, never logged. You can instead set the DATA_API_KEY environment secret.

## `organizationId` (type: `string`):

The organization id issued with your client id. Stored as a secret. You can instead set the DATA_API_ORGANIZATION_ID environment secret.

## Actor input object example

```json
{
  "mode": "priceSearch",
  "packageId": "RA005",
  "pricingType": "cash",
  "sort": "total",
  "sortDirection": "asc",
  "zip": "80202",
  "expandLineItems": false,
  "maxResults": 100,
  "requestsPerMinute": 60
}
```

# Actor output Schema

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

One row per record returned for the chosen mode.

# 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 = {
    "packageId": "RA005",
    "zip": "80202"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/healthcare-price-transparency-api").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 = {
    "packageId": "RA005",
    "zip": "80202",
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/healthcare-price-transparency-api").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 '{
  "packageId": "RA005",
  "zip": "80202"
}' |
apify call nabeelbaghoor/healthcare-price-transparency-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/healthcare-price-transparency-api"
        }
    }
}
```

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/CoRrWssFQIS9dlaWa/builds/lR15a2sW8QNaAIW0I/openapi.json
