# Dubai DHA License Verification Scraper: Bulk Search and Monitor (`getascraper/dha-license-verification-scraper`) Actor

Verify Dubai Health Authority (DHA) healthcare professional licenses in seconds. Search the full 103,935+ professional registry in bulk by category, specialty, facility, nationality, area, or language, and monitor a roster on schedule for real status changes only. No login. $4 per 1,000 records.

- **URL**: https://apify.com/getascraper/dha-license-verification-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 professional records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 🩺 Dubai DHA License Verification Scraper: Bulk Search and Monitor

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#E7F4EF;border:1px solid #BEE0D2;border-top:4px solid #0B6E4F;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Know a DHA license status the moment it changes, not the moment someone asks</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Verify Dubai Health Authority (DHA) healthcare professional licenses, search the full public registry of 103,000+ professionals in bulk, and monitor a roster on a schedule so you only see what actually changed. No login required.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BEE0D2;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B6E4F">⚡ Instant, not days</span><br>
<span style="font-size:12px;color:#57534E">A manual Primary Source Verification check can take days and cost per lookup. This Actor checks live in seconds.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BEE0D2;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B6E4F">📋 A whole roster, one run</span><br>
<span style="font-size:12px;color:#57534E">Search the registry in bulk by category, specialty, facility, nationality, or area, not one professional at a time.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BEE0D2;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B6E4F">🔔 Only real changes, on schedule</span><br>
<span style="font-size:12px;color:#57534E">Roster monitor mode reports new or changed license status since the last check, not a full re-dump every time.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BEE0D2;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B6E4F">🔓 No login required</span><br>
<span style="font-size:12px;color:#57534E">Reads DHA's own public verification tool, the same anonymous lookup anyone can use in a browser.</span>
</td>
</tr>
</table>

Point this Actor at a DHA Unique ID, a license number, or a set of registry filters, and pull structured license data, from a single check to a scheduled watch over a whole roster.

### 🔍 What does this Actor do?

The Dubai Health Authority (DHA) keeps the public register of every healthcare professional licensed to practice in Dubai, over 103,000 doctors, nurses, dentists, pharmacists, and allied health workers. A license can lapse, get suspended, or simply expire without renewal after someone is already hired, placed, or insured.

This Actor checks that registry for you, in three ways. Look up one professional by their DHA Unique ID or license number. Search the whole registry in bulk with filters like category, specialty, facility, nationality, or area. Or turn on Roster monitor mode and let it re-check a saved roster on a schedule, only reporting professionals who are new or whose license status genuinely changed since the last check.

### 💡 Who uses this?

- **I run a healthcare staffing agency placing nurses and doctors in Dubai.** I placed someone months ago. I need to know the day their license status changes, not the day a client asks me about it.
- **I handle credentialing for a hospital or clinic.** Re-verifying a roster of dozens of professionals one manual check at a time doesn't scale. I need the whole list checked in one pass.
- **I work in insurance or compliance.** A cancelled or expired license on staff is a liability I need to catch immediately, not discover during an audit.
- **I run a background-check or verification service.** My clients expect fast, structured license data, not a multi-day manual verification turnaround for every single check.

### 🚀 How to use

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#E7F4EF;border:1px solid #BEE0D2;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0B6E4F;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a mode</span><br>
<span style="font-size:12px;color:#57534E">Single lookup, a bulk directory search, or Roster monitor for scheduled re-checks.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E7F4EF;border:1px solid #BEE0D2;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0B6E4F;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get the full license record</span><br>
<span style="font-size:12px;color:#57534E">Status, facility, license number, issue and expiry dates for every license a professional has held.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E7F4EF;border:1px solid #BEE0D2;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0B6E4F;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Schedule it and watch for change</span><br>
<span style="font-size:12px;color:#57534E">Name a monitor state and run it on a schedule. Later runs report only what's new or changed.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `mode` | enum | No | `lookup` for one professional, `directorySearch` for a bulk registry search, or `watchlist` for scheduled roster re-verification that only reports genuine changes. Default: `lookup`. |
| `query` | string | No | Used in Single lookup mode. A DHA Unique ID (for example `73567070`) or a full license number (for example `73567070-002`). |
| `searchString` | string | No | Used in Directory search mode. Free-text match against professional names. |
| `category` | array (enum) | No | Used in Directory search mode. One or more of Physician, Dentist, Nurse and Midwife, Allied Health, or TCIM practitioners. |
| `licenseType` | array (enum) | No | Used in Directory search mode. One or more of Full-time License, Part-time License, Registered Only, or Trainee License. |
| `gender` | array (enum) | No | Used in Directory search mode. Female, Male, or both. |
| `speciality` | array of strings | No | Used in Directory search mode. One specialty per line, matched against the registry's own values, for example Pharmacist or Registered Nurse. |
| `facilityName` | array of strings | No | Used in Directory search mode. One facility name per line. |
| `nationality` | array of strings | No | Used in Directory search mode. One nationality per line. |
| `area` | array of strings | No | Used in Directory search mode. One Dubai area per line. |
| `language` | array (enum) | No | Used in Directory search mode. One or more of 79 languages a professional speaks, taken live from the registry's own filter list. Filtering to Hindi alone, for example, narrows the full 103,935-professional registry to 4,362. |
| `dhaUniqueIds` | array of strings | No | Used in Roster monitor mode. One DHA Unique ID or license number per line, the roster to check. |
| `maxItems` | integer | No | Used in Directory search mode. Maximum registry records returned per run. Default: 20. |
| `fetchDetails` | boolean | No | Used in Directory search mode. Also fetch each result's full license record (license number, status, dates), not just the directory summary. Default: `false`. |
| `maxRosterSize` | integer | No | Used in Roster monitor mode. Maximum roster entries processed per run. Default: 20. |
| `stateName` | string | No | Used only in Roster monitor mode. Names the saved history this run compares against. Use a different name per distinct roster so separate schedules never mix up their history. Default: `default`. |
| `onlyNewOrChanged` | boolean | No | Used only in Roster monitor mode. When on, only new or genuinely changed professionals are output. When off, every roster entry is output every run with a change label attached. Default: `true`. |
| `proxyConfiguration` | proxy | No | Keep the datacenter default; it reaches the DHA registry without issue. |

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `dhaUniqueId` | string | The professional's DHA Unique ID, for example `73567070`. |
| `name` | string | absent | Professional's registered name. |
| `nationality` | string | absent | As published on the registry. |
| `categoryOrSpeciality` | string | absent | Directory-level category or specialty label, present on Directory search results. |
| `facilityName` | string | absent | Directory-level current facility, present on Directory search results. |
| `licenseCount` | number | absent | Number of licenses on file, present on Directory search results. |
| `detailFetched` | boolean | Whether the full license record below was fetched for this row. |
| `licenses` | array | absent | Every license/experience entry on file: profession, status, facility, license number, issue date, expiry date, duration, and whether it's the current position. |
| `currentStatus` | string | absent | Status of the professional's current or most recent license, for example Fully Active or Cancelled. |
| `matchedQuery` | string | absent | The lookup or roster entry that produced this row. |
| `sourceUrl` | string | The DHA registry page this data comes from. |
| `scrapedAt` | string | When this row was checked. |
| `changeType` | string | absent | Only present in Roster monitor mode: `NEW`, `UPDATED`, or `UNCHANGED`. |

You can download the dataset in JSON, HTML, CSV, or Excel from the Output tab of any run.

### 📤 Sample output

```json
{
    "dhaUniqueId": "73567070",
    "name": "Aabida Bashir",
    "nationality": "India",
    "detailFetched": true,
    "licenses": [
        {
            "isCurrent": true,
            "profession": "Pharmacist",
            "status": "Fully Active",
            "startDate": "11 June 2026",
            "endDate": "11 June 2027",
            "durationText": "3 Months"
        },
        {
            "isCurrent": false,
            "profession": "Pharmacist",
            "status": "Cancelled",
            "facilityName": "Life Vision Pharmacy L L C",
            "licenseNumber": "73567070-002",
            "startDate": "19 November 2024",
            "endDate": "11 June 2026",
            "durationText": "1 years",
            "location": "Dubai, UAE"
        }
    ],
    "currentStatus": "Fully Active",
    "matchedQuery": "73567070",
    "sourceUrl": "https://services.dha.gov.ae/sheryan/wps/portal/home/medical-directory/professional-details?dhaUniqueId=73567070",
    "scrapedAt": "2026-09-30T13:27:46.206Z"
}
```

### 💰 Pricing

Pricing is pay per result: you're charged for the professional records actually written to your dataset, not for the run itself. An empty run that finds no matches or no changes costs nothing. There are no monthly subscriptions or minimum commitments.

Free plan runs are limited in items per run, runs per day, and a short wait between runs. These limits do not apply to paid plans.

### ⭐ Enjoying DHA License Verification Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#E7F4EF;border:1px solid #BEE0D2;border-left:5px solid #0B6E4F;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">One run just told you exactly what changed on your roster since last time.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other agencies and credentialing teams find this Actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0B6E4F;border:1px solid #BEE0D2;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/dha-license-verification-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Look up by DHA Unique ID or license number when you have it.** Either works: a license number is automatically reduced to its DHA Unique ID before the lookup.
- **Give every monitored roster its own state name.** Use a different `stateName` per client or roster so scheduled runs never mix up their change history.
- **Leave `fetchDetails` off for a fast directory browse.** Turn it on only when you actually need license numbers, status, and dates for every result, since it adds time per record.
- **Turn `onlyNewOrChanged` off for a full audit snapshot.** Every roster entry is output on every run with its change label attached, useful for a point-in-time compliance record.
- **Schedule Roster monitor mode on the Apify Scheduler.** Each run after the first reports only what actually moved.

### ❓ FAQ

##### Does this Actor need a login or a DHA account?

No. It reads DHA's own public verification and registry pages, the same anonymous lookup anyone can use in a browser without signing in.

##### How does Roster monitor mode know what changed?

Give it a `stateName` and run it on a schedule with the same roster. Each run compares the current license status, facility, license number, and dates against what was saved last time, and labels every professional `NEW`, `UPDATED`, or `UNCHANGED`.

##### What counts as a "change"?

A genuine difference in name, nationality, current status, or license history. Re-checking the same, unchanged record never counts as a change.

##### How fresh is the data?

Every run reads the DHA registry live at the moment it runs. Results reflect what the public registry shows right then.

##### Is checking the DHA registry legal?

This Actor reads publicly available verification and registry pages, the same pages DHA makes available to anyone without a login. It is an independent tool, not affiliated with or endorsed by the Dubai Health Authority. You are responsible for complying with DHA's terms of use and applicable law. For questions or custom fields, contact the author at <devanshtiwari365@gmail.com>.

### 🔗 Other actors

- [AHPRA Health Practitioner Register Scraper: Bulk Check & Watch](https://apify.com/getascraper/ahpra-practitioner-register-monitor) ↗ - the same bulk-check and recurring-monitor shape applied to Australia's health practitioner register.
- [UAE Industrial Licence Monitor: بيانات الموردين](https://apify.com/getascraper/uae-industrial-licence-monitor) ↗ - monitors UAE industrial licences for supplier and activity changes.
- [PERM Green Card Sponsor Monitor: U.S. Labor Certifications](https://apify.com/getascraper/perm-sponsor-monitor) ↗ - tracks U.S. employer sponsorship filings for change, the same recurring-monitor shape applied to a different compliance register.
- [Multi-state contractor license verifier](https://apify.com/getascraper/multistate-contractor-license-verifier) ↗ - bulk license-status verification across U.S. state contractor boards.
- [US licensed contractor directory](https://apify.com/getascraper/us-licensed-contractor-directory) ↗ - structured contractor licensing data pulled from public U.S. state registers.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/dha-license-verification-scraper/changelog.md

# Actor input Schema

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

Single lookup verifies one healthcare professional's DHA licence status, the way DataFlow Group's manual Primary Source Verification service does for AED 1,100-1,500 and several days per check. Directory search enumerates Dubai's public registry of 103,935 healthcare professionals by category, specialty, facility, and more. Roster monitor re-checks a saved list of professionals on a schedule and reports only what actually changed, so a staffing agency or credentialing team can keep a whole roster current without paying per manual check.

## `query` (type: `string`):

Used in Single lookup mode. Enter an 8-digit DHA Unique ID (for example "73567070") or a full license number in the format {DHA Unique ID}-{sequence} (for example "73567070-002"). Either works: a license number is automatically reduced to its DHA Unique ID prefix before the lookup, since the registry's public profile page is keyed by that ID.

## `searchString` (type: `string`):

Used in Directory search mode. Free-text match against professional names, for example "Bashir". Leave blank to browse the registry using only the filters below, or combine both.

## `category` (type: `array`):

Used in Directory search mode. Filter to one or more of the registry's 5 top-level practitioner categories, taken live from the registry's own filter list.

## `licenseType` (type: `array`):

Used in Directory search mode. Filter to one or more of the registry's 4 license types, taken live from the registry's own filter list.

## `gender` (type: `array`):

Used in Directory search mode. Filter to one or both genders as recorded by the registry.

## `speciality` (type: `array`):

Used in Directory search mode. One specialty per line, matched exactly against the registry's own values (for example "Pharmacist", "Registered Nurse", "Allied Health-Physiotherapist"). The registry tracks 456 distinct specialties, too many to list as a dropdown, so this is free text: check a Directory search run's output for the exact spelling the registry uses before filtering on it.

## `facilityName` (type: `array`):

Used in Directory search mode. One facility name per line, matched against the registry's 5,675 tracked facilities (hospitals, clinics, pharmacies). Free text since there are far too many to list.

## `nationality` (type: `array`):

Used in Directory search mode. One nationality per line (for example "India", "Philippines", "United Kingdom"), matched against the registry's 167 tracked nationality values.

## `area` (type: `array`):

Used in Directory search mode. One Dubai area per line (for example "Al Baraha", "Abu Hail"), matched against the registry's 218 tracked practice areas.

## `language` (type: `array`):

Used in Directory search mode. Filter to professionals who speak one or more of these languages, taken live from the registry's own filter list (79 values, confirmed live to actually narrow results, for example "Hindi" alone cuts the full 103,935-record registry to 4,362). You can also type a value not in the list if the registry adds a new one later.

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

Used in Directory search mode. Caps how many registry records this run returns. The directory endpoint takes roughly the same 7-8 seconds per page regardless of page size, so cost scales with how many pages a run requests, not how many records are on each page. Keep this modest for routine searches; a full-registry export (103,935+ records) takes hours and should only be attempted as a deliberately scheduled, non-default run with a much higher value and a long timeout.

## `fetchDetails` (type: `boolean`):

Used in Directory search mode. A directory search result alone only has name, specialty, facility, and DHA Unique ID, not license number, status, or dates. Turning this on opens each result's full profile page for that detail, the same page Single lookup mode uses, adding about 1.5 seconds per extra result. Off by default and bounded by Max results per run above, so a large directory search never silently multiplies into an hours-long run.

## `dhaUniqueIds` (type: `array`):

Used in Roster monitor mode. One DHA Unique ID or license number per line, the professionals a staffing agency, credentialing vendor, or HR team is responsible for keeping verified. Each run re-fetches every entry and compares it against the saved state from the previous run under the same Monitor state name below.

## `maxRosterSize` (type: `integer`):

Used in Roster monitor mode. Caps how many entries from the Roster list above are actually checked in one run. Keep this modest for a scheduled monitor run; raise it for a one-time full-roster sweep.

## `stateName` (type: `string`):

Used in Roster monitor mode. Names the saved state this run compares against to detect what changed since the last check of this exact roster. Use a different name per client or roster so separate monitoring schedules never overwrite each other's history.

## `onlyNewOrChanged` (type: `boolean`):

Used in Roster monitor mode. When on, a scheduled run only pushes roster entries that are new or whose status, facility, license number, or dates genuinely changed since the last run under this Monitor state name, so downstream systems only see real events, the way a compliance alert should work. When off, every roster entry is pushed on every run, each tagged with a changeType field, for buyers who want the full snapshot every time.

## `proxyConfiguration` (type: `object`):

This registry was confirmed live to have no bot defense of any kind (no CAPTCHA, no WAF challenge, no IP-quality gating): a cold request with zero cookies and no prior page load reaches real data every time. Apify datacenter proxy is the default and is sufficient; residential is not needed and would only add cost.

## Actor input object example

```json
{
  "mode": "lookup",
  "query": "73567070",
  "searchString": "",
  "category": [],
  "licenseType": [],
  "gender": [],
  "speciality": [],
  "facilityName": [],
  "nationality": [],
  "area": [],
  "language": [],
  "maxItems": 20,
  "fetchDetails": false,
  "dhaUniqueIds": [],
  "maxRosterSize": 20,
  "stateName": "default",
  "onlyNewOrChanged": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `professionals` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "lookup",
    "query": "73567070",
    "searchString": "",
    "category": [],
    "licenseType": [],
    "gender": [],
    "speciality": [],
    "facilityName": [],
    "nationality": [],
    "area": [],
    "language": [],
    "maxItems": 20,
    "fetchDetails": false,
    "dhaUniqueIds": [],
    "maxRosterSize": 20,
    "stateName": "default",
    "onlyNewOrChanged": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/dha-license-verification-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 = {
    "mode": "lookup",
    "query": "73567070",
    "searchString": "",
    "category": [],
    "licenseType": [],
    "gender": [],
    "speciality": [],
    "facilityName": [],
    "nationality": [],
    "area": [],
    "language": [],
    "maxItems": 20,
    "fetchDetails": False,
    "dhaUniqueIds": [],
    "maxRosterSize": 20,
    "stateName": "default",
    "onlyNewOrChanged": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/dha-license-verification-scraper").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 '{
  "mode": "lookup",
  "query": "73567070",
  "searchString": "",
  "category": [],
  "licenseType": [],
  "gender": [],
  "speciality": [],
  "facilityName": [],
  "nationality": [],
  "area": [],
  "language": [],
  "maxItems": 20,
  "fetchDetails": false,
  "dhaUniqueIds": [],
  "maxRosterSize": 20,
  "stateName": "default",
  "onlyNewOrChanged": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/dha-license-verification-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/dha-license-verification-scraper"
        }
    }
}
```

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/z4zTrPs8GaCspl7xk/builds/ItcBK9C5wN5eJwndC/openapi.json
