# Vitals.com Doctor \[$1.99/1k] Scraper · NPI, Specialty & Reviews (`memo23/vitals-scraper`) Actor

\[$1.99/1k] Scrape Vitals.com US doctor & dentist profiles — by specialty/location browse or individual profile URLs. Returns name, NPI, specialty, education, licenses, practice locations, phone, ratings & review counts, languages, insurance and bio in clean JSON/CSV. Pure HTTP, no browser

- **URL**: https://apify.com/memo23/vitals-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Agents, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.99 / 1,000 results

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Vitals.com Doctor Scraper — NPI, Specialty, Reviews & More

Scrape **Vitals.com — US doctor & dentist profiles** — browse by specialty/location or pass individual profile URLs. Every provider comes back in one clean schema with name, **NPI**, specialty, education, medical licenses, practice locations, phone, ratings + review counts, languages, insurance and bio. Pure HTTP, no browser.

![How it works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-vitals.png)

### Why use this scraper

- **Provider-grade data** — name, degree, **National Provider Identifier (NPI)**, primary + all specialties, years of experience, gender, languages.
- **Education & licensing** — medical school / residency / fellowship history, and state licenses (type, state, expiry, status).
- **Practice locations** — practice name, address, city/state/zip, phone, lat/long for every office.
- **Ratings & reviews** — Vitals rating score, number of ratings, review count, plus telehealth, insurance, Medicare/Medicaid flags.
- **Pure HTTP, no browser** — reads Vitals' embedded `__INITIAL_STATE__` directly. Fast and cheap.

### Overview

Vitals embeds the full provider record in each profile page as a JSON island. The actor classifies each URL (browse / provider), walks specialty/location browse pages (~60 per page, `?page=N`), fans out to each provider, and normalises everything into a consistent row. Ideal for healthcare data teams, recruiters, medical-device/pharma sales, and provider-directory builders.

### Supported inputs

| Input URL shape | Example |
|---|---|
| **Specialty browse** | `vitals.com/cardiologists` |
| **Specialty + location** | `vitals.com/cardiologists/ny/new-york` |
| **Individual provider** | `vitals.com/doctors/{slug}` (or `/dentists/{slug}`) |

> **Tip:** browse a specialty + city on vitals.com, then copy the URL from your browser's address bar — it drops straight into `startUrls`.

### Use cases

- **Healthcare data teams** — build / enrich provider directories keyed on NPI.
- **Medical-device & pharma sales** — target specialists by specialty, location, affiliation.
- **Recruiters** — source physicians by specialty, experience, location, languages.
- **Market research** — analyse provider density, ratings, and acceptance of new patients by region.

### How it works

1. You provide one or more Vitals URLs (browse or provider).
2. The actor classifies each URL and walks browse pages with `?page=N` pagination.
3. Each provider's `__INITIAL_STATE__` is parsed for the full structured record.
4. Rows are normalised to one schema and streamed to your dataset — JSON or CSV.

### Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | — | vitals.com URLs (browse or provider) |
| `flatten` | boolean | `true` | Flatten nested fields for CSV-friendly output |
| `maxItems` | integer | `10000` | Hard cap on rows collected |
| `maxConcurrency` | integer | `6` | Parallel profile fetches |

### Output samples

**Flattened (`flatten: true`, default):**

```json
{
  "portal": "vitals",
  "npi": "1568632859",
  "fullName": "Dmitriy N. Feldman",
  "degree": "MD",
  "gender": "M",
  "yearsOfExperience": 24,
  "primarySpecialty": "Cardiovascular Disease",
  "specialties_json": "[{\"name\":\"Cardiovascular Disease\",\"title\":\"Cardiologist\"}]",
  "city": "New York",
  "state": "NY",
  "phone": "(212) 555-0143",
  "ratingScore": 4.9,
  "reviewCount": 27,
  "education_json": "[{\"type\":\"Fellowship\",\"institution\":\"…\",\"year\":\"2016\"}]",
  "licenses_json": "[{\"type\":\"Medical Doctor\",\"state\":\"New York\",\"status\":\"Active\"}]",
  "languages_json": "[\"English\"]",
  "isTelehealth": true,
  "acceptsNewPatients": true
}
````

### Key output fields

| Field | Description |
|---|---|
| `npi`, `providerId`, `entityId`, `vitalsGuid` | Identity (incl. National Provider Identifier) |
| `fullName`, `firstName`, `lastName`, `suffix`, `degree` | Name |
| `gender`, `yearsOfExperience` | Demographics |
| `primarySpecialty`, `specialties[]`, `expertise[]` | Specialties |
| `education[]` | School / residency / fellowship (type, institution, year) |
| `licenses[]` | State licenses (type, state, expiry, status) |
| `practiceLocations[]` | Practice name, address, city/state/zip, phone, lat/long |
| `phone` | Primary phone |
| `city`, `state`, `postcode`, `latitude`, `longitude` | Location |
| `ratingScore`, `numberOfRatings`, `reviewCount`, `vitalsScore` | Ratings |
| `languages[]`, `acceptsNewPatients`, `isTelehealth` | Access |
| `hospitals[]`, `insurances[]`, `isMedicare`, `isMedicaid` | Affiliations / coverage |
| `bio`, `photoUrl`, `videoUrl` | Profile media |

### FAQ

**Does it include the NPI?**
Yes — the National Provider Identifier is on every provider row, plus state license details.

**Can I scrape dentists too?**
Yes — `/dentists/...` browse and `/dentists/{slug}` profiles work the same as doctors.

**How many providers per browse page?**
Around 60, and the actor paginates with `?page=N` until `maxItems`.

### Support

Found a bug or need a field added? Open an issue on the actor's Apify Console page.

### Explore more scrapers

- **[Avvo Scraper](https://apify.com/memo23/avvo-scraper)** — US lawyer directory
- **[FindLaw Scraper](https://apify.com/memo23/findlaw-scraper)** — US legal directory
- **[Martindale Scraper](https://apify.com/memo23/martindale-scraper)** — US attorney directory

Full portfolio: [apify.com/memo23](https://apify.com/memo23)

### ⚠️ Disclaimer

This scraper accesses only publicly available data. Use the extracted data in compliance with Vitals.com's Terms of Use, US privacy laws (including state regulations), and all applicable laws. You are responsible for how you use scraped data — particularly personal information (provider names, contact details). This actor is not affiliated with, endorsed by, or connected to Vitals, WebMD, or Internet Brands.

### SEO Keywords

vitals scraper, vitals.com scraper, doctor directory scraper, physician data scraper, NPI scraper, US healthcare provider data, doctor reviews scraper, medical provider scraper, healthcare lead generation, physician directory api, doctor contact data, dentist scraper, provider npi lookup, healthcare data extraction, medical sales leads

# Actor input Schema

## `startUrls` (type: `array`):

Full vitals.com URLs. Browse/specialty URLs are paginated and fanned out to individual provider profiles automatically until `Maximum items` is reached.

## `flatten` (type: `boolean`):

When enabled (default), nested objects/arrays (specialties, education, licenses, practiceLocations) are JSON-stringified into `*_json` fields for CSV. Disable to keep the full nested JSON.

## `enrichEmails` (type: `boolean`):

If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Billed per contact email found; only charged when an email is returned, never for misses.

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

Hard cap on the number of providers collected. Vitals browse pages list ~60 providers each; use this cap to control billing.

## `maxConcurrency` (type: `integer`):

Maximum number of profile pages fetched in parallel. 4-8 is the sweet spot.

## `minConcurrency` (type: `integer`):

Minimum number of profile pages fetched in parallel.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

Defaults to Apify Residential with country=US. Vitals serves data cleanly to good fingerprints; US residential IPs are recommended for large runs (the domain sits behind Cloudflare, passive at normal volume).

## Actor input object example

```json
{
  "startUrls": [
    "https://www.vitals.com/cardiologists/ny/new-york",
    "https://www.vitals.com/dermatologists/ca/los-angeles",
    "https://www.vitals.com/dentists/tx/houston"
  ],
  "flatten": true,
  "enrichEmails": false,
  "maxItems": 10000,
  "maxConcurrency": 6,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.vitals.com/cardiologists/ny/new-york",
        "https://www.vitals.com/dermatologists/ca/los-angeles",
        "https://www.vitals.com/dentists/tx/houston"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/vitals-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 = {
    "startUrls": [
        "https://www.vitals.com/cardiologists/ny/new-york",
        "https://www.vitals.com/dermatologists/ca/los-angeles",
        "https://www.vitals.com/dentists/tx/houston",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/vitals-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.vitals.com/cardiologists/ny/new-york",
    "https://www.vitals.com/dermatologists/ca/los-angeles",
    "https://www.vitals.com/dentists/tx/houston"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call memo23/vitals-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/vitals-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Vitals.com Doctor [$1.99/1k] Scraper · NPI, Specialty & Reviews",
        "description": "[$1.99/1k] Scrape Vitals.com US doctor & dentist profiles — by specialty/location browse or individual profile URLs. Returns name, NPI, specialty, education, licenses, practice locations, phone, ratings & review counts, languages, insurance and bio in clean JSON/CSV. Pure HTTP, no browser",
        "version": "0.0",
        "x-build-id": "HCpfjYL1CLEbshblL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~vitals-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-vitals-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~vitals-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-vitals-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~vitals-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-vitals-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Vitals.com URLs",
                        "type": "array",
                        "description": "Full vitals.com URLs. Browse/specialty URLs are paginated and fanned out to individual provider profiles automatically until `Maximum items` is reached.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "flatten": {
                        "title": "Flatten nested fields for CSV-friendly output",
                        "type": "boolean",
                        "description": "When enabled (default), nested objects/arrays (specialties, education, licenses, practiceLocations) are JSON-stringified into `*_json` fields for CSV. Disable to keep the full nested JSON.",
                        "default": true
                    },
                    "enrichEmails": {
                        "title": "Enrich with contact emails (experimental, billed per email)",
                        "type": "boolean",
                        "description": "If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Billed per contact email found; only charged when an email is returned, never for misses.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum items to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the number of providers collected. Vitals browse pages list ~60 providers each; use this cap to control billing.",
                        "default": 10000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of profile pages fetched in parallel. 4-8 is the sweet spot.",
                        "default": 6
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of profile pages fetched in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Defaults to Apify Residential with country=US. Vitals serves data cleanly to good fingerprints; US residential IPs are recommended for large runs (the domain sits behind Cloudflare, passive at normal volume)."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
