Apify actor · whoareyouanas/nmc-doctor-lookup
NMC Doctor Lookup & Verification India
Look up India's public NMC Indian Medical Register by registration number, or search candidate records by name, year, and council. Preserve the distinction between an exact registry match and a search candidate.
Documentation checked 2026-10-29 · deployed build 0.1.4 · run through your Apify account
01 / Overview
Match the actor to the job.
Registration lookup
Verify one registration number or a batch using the public register endpoints.
Council disambiguation
Use the State Medical Council when a registration number matches more than one council.
Candidate search
Explore name, year, or council matches without labeling a search candidate a verified identity.
02 / Input
Start with a clear, bounded input.
Use registrationId or registrationIds for exact registration lookup. Without an ID, name/year/council inputs select search mode. A council name can disambiguate collisions; council ID is useful for precise searches.
{
"registrationId": "2000010031",
"stateMedicalCouncil": "Maharashtra Medical Council"
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| registrationId | string | Not specified | Single doctor registration number to verify against NMC IMR. |
| registrationIds | array | Not specified | Batch registration numbers. Duplicates are removed after whitespace normalization. |
| name | string | Not specified | Advanced search name filter. Used only when no registration ID is provided. |
| year | integer | Not specified | Advanced search registration year filter, from 1947 through the current year. |
| stateMedicalCouncil | string | Not specified | Council name. In verify mode it disambiguates duplicate registration IDs. In search mode it filters returned rows by council name. |
All other input controls (9)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| stateMedicalCouncilId | string | Not specified | Official NMC smcId for precise council search. Prefer this over council name for broad search. |
| maxResults | integer | 100 | Maximum candidate rows to emit in search mode. Minimum: 1 · Maximum: 10000 |
| includeDetails | boolean | false | In search mode, fetch the detail payload for each candidate row. |
| includeRaw | boolean | false | Attach raw parsed row/detail data for audit or debugging. |
| maxConcurrency | integer | 3 | Maximum concurrent verification/detail workers. Minimum: 1 · Maximum: 10 |
| delayMs | integer | 0 | Optional polite delay after each detail request worker iteration. Minimum: 0 · Maximum: 10000 |
| requestTimeoutSecs | integer | 120 | Timeout for each NMC request in seconds. The default is high because NMC can respond slowly. Minimum: 1 · Maximum: 120 |
| maxRetries | integer | 2 | Additional retry attempts after the first failed NMC request. Minimum: 0 · Maximum: 5 |
| allowInsecureTls | boolean | false | Last-resort fallback if Node rejects NMC's certificate chain. Secure certificate verification is enabled by default and the actor already bundles NMC's current missing intermediate CA. |
03 / Output
Know what each returned row represents.
- Verification emits a result per registration number; search mode emits candidates with status candidate and isValid null.
- Statuses include valid, removed, restored, not_found, ambiguous, candidate, and error. The record reflects the source register, not an independent identity or clinical qualification assessment.
{
"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"
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
mode
mode
query
query
status
status
isValid
isValid
doctorName
doctorName
registrationId
registrationId
nmcDoctorId
nmcDoctorId
stateMedicalCouncil
stateMedicalCouncil
registrationDate
registrationDate
yearInfo
yearInfo
qualification
qualification
source
source
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Actor Start apify-actor-start | $0.00005 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
result apify-default-dataset-item | $0.005 / event | Single result in the default dataset. $5.00 per 1,000 of this event. Other events and separate services are additional. |
- Dataset-item billing can apply to each lookup result or emitted search candidate, plus the configured startup event.
- Broad searches can emit many candidates. Use maxResults and review mode/status before treating row counts as successful verifications.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~nmc-doctor-lookup/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- Identical registration numbers can exist under different councils. Ambiguous results require disambiguation.
- Public register availability and source response shapes can change. Search candidates must not be treated as verified identities.
Questions
Before you build an integration.
What do I need to provide?
Use registrationId or registrationIds for exact registration lookup. Without an ID, name/year/council inputs select search mode. A council name can disambiguate collisions; council ID is useful for precise searches.
What should I check in the output?
- Verification emits a result per registration number; search mode emits candidates with status candidate and isValid null.
- Statuses include valid, removed, restored, not_found, ambiguous, candidate, and error. The record reflects the source register, not an independent identity or clinical qualification assessment.
How do I budget the run?
- Dataset-item billing can apply to each lookup result or emitted search candidate, plus the configured startup event.
- Broad searches can emit many candidates. Use maxResults and review mode/status before treating row counts as successful verifications.
Keep exploring