# NMC Doctor Lookup & Verification India (`whoareyouanas/nmc-doctor-lookup`) Actor

Verify Indian doctor registration numbers against the NMC Indian Medical Register (IMR), or search by name, year, and State Medical Council.

- **URL**: https://apify.com/whoareyouanas/nmc-doctor-lookup.md
- **Developed by:** [Anas Nadeem](https://apify.com/whoareyouanas) (community)
- **Categories:** Lead generation, Integrations
- **Stats:** 3 total users, 1 monthly users, 80.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

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

## NMC Doctor Lookup API - India NMC Registration Verification

Verify Indian doctor registration numbers against the National Medical Commission (NMC) Indian Medical Register (IMR). This Apify actor provides a fast NMC doctor lookup API for registration verification, batch checks, and optional doctor search by name, registration year, or State Medical Council.

The actor uses the public NMC IMR JSON endpoints directly. It does not use browser automation, so registration-number checks are usually much faster than page scraping.

### What This Actor Does

- Verifies one doctor registration number against NMC IMR.
- Verifies many registration numbers in one run.
- Searches NMC doctors by name, registration year, State Medical Council ID, or council name.
- Fetches detailed NMC records when a unique registration match is found.
- Returns structured JSON for KYC, healthcare onboarding, credential checks, compliance workflows, and internal verification tools.

### Best For

- NMC doctor registration verification in India.
- Indian Medical Register lookup by registration number.
- Doctor credential checks for hospitals, clinics, healthtech, insurance, lending, and compliance teams.
- Batch verification of doctor registration numbers.
- Advanced NMC doctor search when only name, year, or council information is available.

### Data Source

The source is the official NMC Indian Medical Register:

- NMC IMR page: https://www.nmc.org.in/information-desk/indian-medical-register/
- NMC API base: `https://www.nmc.org.in/MCIRest`

This actor is not affiliated with or endorsed by the National Medical Commission. It only automates lookup against public NMC IMR data.

### Inputs

Verification is selected when `registrationId` or `registrationIds` is present. Search mode is selected when no registration ID is present and at least one advanced filter is provided.

#### Verify One Registration

```json
{
  "registrationId": "2000010031",
  "stateMedicalCouncil": "Maharashtra Medical Council"
}
````

#### Batch Verify

```json
{
  "registrationIds": ["2000010031", "12345"],
  "maxConcurrency": 3,
  "delayMs": 100,
  "allowInsecureTls": true
}
```

#### Advanced Search

```json
{
  "name": "salunkhe",
  "year": 2000,
  "maxResults": 25,
  "includeDetails": false
}
```

For precise council search, pass `stateMedicalCouncilId` when you know the NMC `smcId`. `stateMedicalCouncil` is useful for registration disambiguation and post-filtering search results by council name.

### Input Fields

| Field | Mode | Description |
| --- | --- | --- |
| `registrationId` | Verify | One NMC doctor registration number. |
| `registrationIds` | Verify | Batch list of registration numbers. |
| `name` | Search | Doctor name filter for NMC search. |
| `year` | Search | Registration year from 1947 to the current year. |
| `stateMedicalCouncil` | Verify/Search | Council name for duplicate registration disambiguation or search filtering. |
| `stateMedicalCouncilId` | Search/Verify | Official NMC `smcId` for precise council filtering. |
| `includeDetails` | Search | Fetch detailed NMC data for each candidate row. |
| `includeRaw` | Both | Include raw NMC row/detail payloads for audit. |
| `maxResults` | Search | Maximum candidate rows to emit. |
| `maxConcurrency` | Verify | Concurrent verification workers. |
| `delayMs` | Both | Optional polite delay after detail requests. |
| `requestTimeoutSecs` | Both | Timeout per NMC request. Defaults to 120 seconds because NMC can respond slowly. |
| `maxRetries` | Both | Retry attempts after failed NMC requests. |
| `allowInsecureTls` | Both | Use only if Node rejects NMC's certificate chain. |

### Output

Verify mode emits one item per registration number:

```json
{
  "mode": "verify",
  "query": {
    "registrationId": "2000010031"
  },
  "status": "valid",
  "isValid": true,
  "doctorName": "salunkhe deepak vasantrao",
  "registrationId": "2000010031",
  "nmcDoctorId": 3631,
  "stateMedicalCouncil": "Maharashtra Medical Council",
  "registrationDate": "10/01/2000",
  "yearInfo": 2000,
  "qualification": "MBBS",
  "source": "NMC Indian Medical Register"
}
```

Search mode emits candidate records with `status: "candidate"` and `isValid: null`.

### Output Fields

Common verification output fields include:

- `status`
- `isValid`
- `doctorName`
- `registrationId`
- `nmcDoctorId`
- `stateMedicalCouncil`
- `registrationDate`
- `yearInfo`
- `qualification`
- `qualificationYear`
- `university`
- `parentName`
- `dateOfBirth`
- `uprnNo`
- `address`
- `additionalQualifications`
- `source`
- `sourceUrl`
- `checkedAt`

### Statuses

- `valid`: one exact registration match was found and detail was fetched.
- `removed`: NMC detail marks the registration as removed.
- `restored`: NMC detail marks the registration as restored.
- `not_found`: no exact registration match was found.
- `ambiguous`: multiple exact registration matches were found; pass `stateMedicalCouncil`.
- `candidate`: search-mode result, not a verified identity.
- `error`: a per-record lookup failed.

### Verification vs Search

Use registration verification when you need a reliable result. NMC registration numbers can collide across State Medical Councils, so the actor exact-matches registration numbers and returns `ambiguous` when more than one council has the same registration number. Pass `stateMedicalCouncil` to disambiguate.

Use search mode when you are exploring candidates by name, year, or council. Search results are not marked as verified identities because name-based matching can return multiple doctors.

### TLS

Secure TLS verification is enabled by default. At the time of testing, Node can reject the NMC certificate chain with `unable to verify the first certificate`. If that happens in the Apify runtime, rerun with:

```json
{
  "registrationId": "2000010031",
  "allowInsecureTls": true
}
```

Only use this flag when needed.

### Example Use Cases

- Verify a doctor before onboarding to a healthtech platform.
- Check doctor credentials for healthcare KYC.
- Validate registration details during insurance or lending workflows.
- Search NMC IMR candidates by doctor name and registration year.
- Build an internal NMC doctor verification API without maintaining browser automation.

### Notes

- Registration verification is the fastest and most deterministic path.
- Broad name searches can return many candidates.
- The actor writes one dataset item per verification result or search candidate.
- Public NMC availability and response shape can change; use `includeRaw` for audit/debugging if needed.

# Actor input Schema

## `registrationId` (type: `string`):

Single doctor registration number to verify against NMC IMR.

## `registrationIds` (type: `array`):

Batch registration numbers. Duplicates are removed after whitespace normalization.

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

Advanced search name filter. Used only when no registration ID is provided.

## `year` (type: `integer`):

Advanced search registration year filter, from 1947 through the current year.

## `stateMedicalCouncil` (type: `string`):

Council name. In verify mode it disambiguates duplicate registration IDs. In search mode it filters returned rows by council name.

## `stateMedicalCouncilId` (type: `string`):

Official NMC smcId for precise council search. Prefer this over council name for broad search.

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

Maximum candidate rows to emit in search mode.

## `includeDetails` (type: `boolean`):

In search mode, fetch the detail payload for each candidate row.

## `includeRaw` (type: `boolean`):

Attach raw parsed row/detail data for audit or debugging.

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

Maximum concurrent verification/detail workers.

## `delayMs` (type: `integer`):

Optional polite delay after each detail request worker iteration.

## `requestTimeoutSecs` (type: `integer`):

Timeout for each NMC request in seconds. The default is high because NMC can respond slowly.

## `maxRetries` (type: `integer`):

Additional retry attempts after the first failed NMC request.

## `allowInsecureTls` (type: `boolean`):

Use only if Node rejects NMC's certificate chain. Secure certificate verification is enabled by default.

## Actor input object example

```json
{
  "registrationId": "2000010031",
  "maxResults": 100,
  "includeDetails": false,
  "includeRaw": false,
  "maxConcurrency": 3,
  "delayMs": 0,
  "requestTimeoutSecs": 120,
  "maxRetries": 2,
  "allowInsecureTls": false
}
```

# 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 = {
    "registrationId": "2000010031"
};

// Run the Actor and wait for it to finish
const run = await client.actor("whoareyouanas/nmc-doctor-lookup").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 = { "registrationId": "2000010031" }

# Run the Actor and wait for it to finish
run = client.actor("whoareyouanas/nmc-doctor-lookup").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 '{
  "registrationId": "2000010031"
}' |
apify call whoareyouanas/nmc-doctor-lookup --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NMC Doctor Lookup & Verification India",
        "description": "Verify Indian doctor registration numbers against the NMC Indian Medical Register (IMR), or search by name, year, and State Medical Council.",
        "version": "0.1",
        "x-build-id": "9MDxjcMeiRTzZYIyb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/whoareyouanas~nmc-doctor-lookup/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-whoareyouanas-nmc-doctor-lookup",
                "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/whoareyouanas~nmc-doctor-lookup/runs": {
            "post": {
                "operationId": "runs-sync-whoareyouanas-nmc-doctor-lookup",
                "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/whoareyouanas~nmc-doctor-lookup/run-sync": {
            "post": {
                "operationId": "run-sync-whoareyouanas-nmc-doctor-lookup",
                "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": {
                    "registrationId": {
                        "title": "Registration ID",
                        "type": "string",
                        "description": "Single doctor registration number to verify against NMC IMR."
                    },
                    "registrationIds": {
                        "title": "Registration IDs",
                        "type": "array",
                        "description": "Batch registration numbers. Duplicates are removed after whitespace normalization.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "name": {
                        "title": "Doctor Name",
                        "type": "string",
                        "description": "Advanced search name filter. Used only when no registration ID is provided."
                    },
                    "year": {
                        "title": "Registration Year",
                        "type": "integer",
                        "description": "Advanced search registration year filter, from 1947 through the current year."
                    },
                    "stateMedicalCouncil": {
                        "title": "State Medical Council",
                        "type": "string",
                        "description": "Council name. In verify mode it disambiguates duplicate registration IDs. In search mode it filters returned rows by council name."
                    },
                    "stateMedicalCouncilId": {
                        "title": "State Medical Council ID",
                        "type": "string",
                        "description": "Official NMC smcId for precise council search. Prefer this over council name for broad search."
                    },
                    "maxResults": {
                        "title": "Max Search Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum candidate rows to emit in search mode.",
                        "default": 100
                    },
                    "includeDetails": {
                        "title": "Include Details",
                        "type": "boolean",
                        "description": "In search mode, fetch the detail payload for each candidate row.",
                        "default": false
                    },
                    "includeRaw": {
                        "title": "Include Raw NMC Payloads",
                        "type": "boolean",
                        "description": "Attach raw parsed row/detail data for audit or debugging.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum concurrent verification/detail workers.",
                        "default": 3
                    },
                    "delayMs": {
                        "title": "Delay Between Detail Requests",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Optional polite delay after each detail request worker iteration.",
                        "default": 0
                    },
                    "requestTimeoutSecs": {
                        "title": "Request Timeout",
                        "minimum": 1,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Timeout for each NMC request in seconds. The default is high because NMC can respond slowly.",
                        "default": 120
                    },
                    "maxRetries": {
                        "title": "Max Retries",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Additional retry attempts after the first failed NMC request.",
                        "default": 2
                    },
                    "allowInsecureTls": {
                        "title": "Allow Insecure TLS",
                        "type": "boolean",
                        "description": "Use only if Node rejects NMC's certificate chain. Secure certificate verification is enabled by default.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
