{
  "openapi": "3.0.1",
  "info": {
    "title": "AHPRA Health Practitioner Register Scraper: Bulk Check & Watch",
    "description": "Bulk-check Australian health practitioner registrations on AHPRA's public register in one run. Get status, conditions, undertakings, reprimands, and expiry, plus a monitor mode reporting only genuine roster changes since last check. $0.005/record plus a small session fee.",
    "version": "0.1",
    "x-build-id": "0itxrmgqMB9iKtJx9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~ahpra-practitioner-register-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-ahpra-practitioner-register-monitor",
        "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/getascraper~ahpra-practitioner-register-monitor/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-ahpra-practitioner-register-monitor",
        "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/getascraper~ahpra-practitioner-register-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-ahpra-practitioner-register-monitor",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "lookup",
              "bulk",
              "monitor"
            ],
            "type": "string",
            "description": "A staffing agency, credentialing vendor, or insurer rarely just looks a practitioner up once: the real job is keeping a whole roster verified as registrations change over time. Single lookup covers the one-off case; Bulk roster check verifies a whole list in one run; Recurring monitor is built for scheduled re-verification, only reporting practitioners that are new or actually changed since the last run.",
            "default": "lookup"
          },
          "query": {
            "title": "Practitioner name or registration number",
            "type": "string",
            "description": "Used in Single lookup mode. Enter a practitioner's full name (for example \"Jane Smith\") or their AHPRA registration number (for example \"MED0002057420\"). A registration number is more precise: a common surname can match thousands of real register entries.",
            "default": "Smith"
          },
          "practitioners": {
            "title": "Practitioner roster",
            "type": "array",
            "description": "Used in Bulk roster check and Recurring monitor mode. One practitioner per line, by name or by AHPRA registration number. This is the list a staffing agency or credentialing vendor is responsible for keeping current, checked together in one run instead of one Actor run per practitioner.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full registration details",
            "type": "boolean",
            "description": "Also open each matched practitioner's public Registration Details page for registration status, conditions, undertakings, reprimands, endorsements, notations, expiry date, qualifications, and principal place of practice, not just the name/profession summary from the search list. This is the field set that actually matters for ongoing liability (a suspension or a new condition), so it is on by default, bounded by the roster and per-query result limits below rather than switched off.",
            "default": true
          },
          "maxRosterSize": {
            "title": "Max roster entries per run",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Caps how many names or registration numbers from the roster (Bulk/Recurring monitor mode) are actually processed in one run. Keep this modest for scheduled monitor runs; raise it for a one-time full-roster sweep.",
            "default": 10
          },
          "maxResultsPerQuery": {
            "title": "Max matches per search",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Caps how many matched practitioners are kept for a single name or number search. A precise registration number normally matches exactly one person; a common surname can match thousands of real AHPRA entries, so this protects against one imprecise roster line silently blowing out the whole run's output and runtime.",
            "default": 5
          },
          "stateName": {
            "title": "Monitor state name",
            "type": "string",
            "description": "Used only in Recurring 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 distinct roster or client so separate monitoring schedules never overwrite each other's history.",
            "default": "default"
          },
          "onlyNewOrChanged": {
            "title": "Only output new or changed practitioners",
            "type": "boolean",
            "description": "Used only in Recurring monitor mode. When on, a scheduled run only pushes practitioners that are new to the roster or whose status, conditions, undertakings, reprimands, notations, or expiry genuinely changed since the last run under this state name, so downstream systems only see real events. 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.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "AHPRA's register is gated by a JS bot-defense challenge (Cloudflare plus F5 Distributed Cloud Bot Defense). Sustained testing against this target escalated to a hard block on both datacenter and residential proxy, so default to Australia-pinned residential: this platform's own comparable case (career-cross-scraper, also Cloudflare-class) found the defense weights geographic plausibility heavily, and an AU-market register seeing AU-origin traffic is the more defensible default. Datacenter remains selectable if you prefer.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AU"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}