{
  "openapi": "3.0.1",
  "info": {
    "title": "JobStreet & JobsDB Scraper - Asia Jobs (MY, SG, PH, ID, HK, TH)",
    "description": "Scrape jobs from JobStreet (Malaysia, Singapore, Philippines, Indonesia) and JobsDB (Hong Kong, Thailand) in one Actor: title, company, location, parsed salary, classification, work type, bullet points and optional full descriptions. Only-new-jobs mode for alerts.",
    "version": "0.1",
    "x-build-id": "N0FrQoqvZtebRdH3a"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~jobstreet-jobsdb-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-jobstreet-jobsdb-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/rjmacarthy~jobstreet-jobsdb-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-jobstreet-jobsdb-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/rjmacarthy~jobstreet-jobsdb-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-jobstreet-jobsdb-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": {
          "country": {
            "title": "Countries",
            "type": "array",
            "description": "Which job boards to search. Each country is searched separately (and with each keyword below), so pick several to compare markets in one run.",
            "items": {
              "type": "string",
              "enum": [
                "MY",
                "SG",
                "PH",
                "ID",
                "HK",
                "TH"
              ],
              "enumTitles": [
                "Malaysia (JobStreet)",
                "Singapore (JobStreet)",
                "Philippines (JobStreet)",
                "Indonesia (JobStreet)",
                "Hong Kong (JobsDB)",
                "Thailand (JobsDB)"
              ]
            },
            "default": [
              "MY"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "What you would type into the site's search box: a job title, skill or company (e.g. \"software engineer\", \"accountant\"). Each keyword is a separate search in every chosen country. Leave empty for all jobs.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "The site's \"Where\" box: a city, district or region (e.g. \"Kuala Lumpur\", \"Makati City\", \"Bangkok\"). Leave empty for the whole country. Applied to every chosen country, so use it with one country at a time. The run log shows which location the site matched."
          },
          "maxItems": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many jobs from each search (one search = one country x one keyword). Default 100. Set 0 for no limit.",
            "default": 100
          },
          "fetchDetails": {
            "title": "Include full job description",
            "type": "boolean",
            "description": "Make one extra request per job for the full description (HTML and plain text), expiry date, external-apply flag and company industry/size/website. Charged as an extra \"job-details\" event per job. Off by default: the listing data (title, company, salary, classification, work type, bullet points, teaser) is already included.",
            "default": false
          },
          "classifications": {
            "title": "Classification",
            "type": "array",
            "description": "Job classifications (industries). Several are OR-ed.",
            "items": {
              "type": "string",
              "enum": [
                "accounting",
                "administration-office-support",
                "advertising-arts-media",
                "banking-financial-services",
                "call-centre-customer-service",
                "ceo-general-management",
                "community-services-development",
                "construction",
                "consulting-strategy",
                "design-architecture",
                "education-training",
                "engineering",
                "farming-animals-conservation",
                "government-defence",
                "healthcare-medical",
                "hospitality-tourism",
                "human-resources-recruitment",
                "information-communication-technology",
                "insurance-superannuation",
                "legal",
                "manufacturing-transport-logistics",
                "marketing-communications",
                "mining-resources-energy",
                "real-estate-property",
                "retail-consumer-products",
                "sales",
                "science-technology",
                "self-employment",
                "sport-recreation",
                "trades-services"
              ],
              "enumTitles": [
                "Accounting",
                "Administration & Office Support",
                "Advertising, Arts & Media",
                "Banking & Financial Services",
                "Call Centre & Customer Service",
                "CEO & General Management",
                "Community Services & Development",
                "Construction",
                "Consulting & Strategy",
                "Design & Architecture",
                "Education & Training",
                "Engineering",
                "Farming, Animals & Conservation",
                "Government & Defence",
                "Healthcare & Medical",
                "Hospitality & Tourism",
                "Human Resources & Recruitment",
                "Information & Communication Technology",
                "Insurance & Superannuation",
                "Legal",
                "Manufacturing, Transport & Logistics",
                "Marketing & Communications",
                "Mining, Resources & Energy",
                "Real Estate & Property",
                "Retail & Consumer Products",
                "Sales",
                "Science & Technology",
                "Self Employment",
                "Sport & Recreation",
                "Trades & Services"
              ]
            }
          },
          "workTypes": {
            "title": "Work type",
            "type": "array",
            "description": "Full time, part time, contract/temp or casual/vacation. Several are OR-ed.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract-temp",
                "casual-vacation"
              ],
              "enumTitles": [
                "Full time",
                "Part time",
                "Contract/Temp",
                "Casual/Vacation"
              ]
            }
          },
          "workArrangements": {
            "title": "Work arrangement",
            "type": "array",
            "description": "On-site, hybrid or remote, as set by the advertiser. Several are OR-ed.",
            "items": {
              "type": "string",
              "enum": [
                "on-site",
                "hybrid",
                "remote"
              ],
              "enumTitles": [
                "On-site",
                "Hybrid",
                "Remote"
              ]
            }
          },
          "dateRange": {
            "title": "Date listed",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14",
              "31"
            ],
            "type": "string",
            "description": "Only jobs listed within this many days.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "date",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first (date) or the site's relevance ranking. Matters when you set \"Max jobs per search\". Incremental mode always sorts by date.",
            "default": "date"
          },
          "onlyNew": {
            "title": "Only new jobs (incremental mode)",
            "type": "boolean",
            "description": "Remember which jobs were already output and only output (and charge for) jobs that are new since the previous run. The first run outputs all matching jobs and saves them as the baseline. Ideal for scheduled job alerts.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name (state key)",
            "type": "string",
            "description": "Name of this monitor's memory. Runs with the same name share the list of already-seen jobs (kept separately for each country and search). Use different names for independent monitors.",
            "default": "default"
          },
          "stateStoreName": {
            "title": "State key-value store name",
            "type": "string",
            "description": "Named key-value store in your account where incremental state is kept (letters, digits and dashes).",
            "default": "jobstreet-jobsdb-scraper-state"
          },
          "maxConcurrency": {
            "title": "Max parallel requests",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Maximum parallel requests (job details are fetched in parallel, at most one request per second).",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Off by default; the JSON API works without a proxy. If the run log says the site blocked the run (HTTP 403/429), enable Apify Proxy (datacenter). Residential proxies are not supported: if you pick the RESIDENTIAL group the Actor logs a warning and uses Apify datacenter proxy instead.",
            "default": {
              "useApifyProxy": 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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}