{
  "openapi": "3.0.1",
  "info": {
    "title": "GulfTalent Scraper - Gulf Jobs, Salaries, Employer & Expiry",
    "description": "Every GulfTalent job across 16 countries: title, employer, city, industry, employment type, posted and expiry dates, and the salary as two numbers with its currency and period when published - 44% of jobs, measured. A country GulfTalent does not know returns a note, not other jobs. Unofficial.",
    "version": "0.1",
    "x-build-id": "Ocfhcsd2bqgPPEiQf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~gulftalent-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-gulftalent-jobs",
        "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/neverempty~gulftalent-jobs/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-gulftalent-jobs",
        "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/neverempty~gulftalent-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-gulftalent-jobs",
        "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": "Country",
            "enum": [
              "uae",
              "saudi-arabia",
              "qatar",
              "oman",
              "bahrain",
              "kuwait",
              "egypt",
              "jordan",
              "lebanon",
              "iraq",
              "libya",
              "india",
              "africa",
              "far-east",
              "europe",
              "other"
            ],
            "type": "string",
            "description": "Which GulfTalent country site to search. Measured on 2026-09-03: a country GulfTalent does not recognise answers HTTP 200 with a mixed list of jobs from other countries instead of an error, so this Actor checks the country of every job it found and returns one unpaid row explaining the problem rather than charging you for the wrong country.",
            "default": "uae"
          },
          "keyword": {
            "title": "Job title",
            "type": "string",
            "description": "The job title to search for, as a hyphenated slug: `software-developer`, `accountant`, `civil-engineer`, `nurse`, `sales-manager`. Spaces are converted to hyphens for you. GulfTalent answers HTTP 404 for a title it does not have, so you get one row saying so instead of a silently unfiltered list. Measured on 2026-09-03 in the UAE: software-developer 115 jobs, accountant 138, civil-engineer 102.",
            "default": "software-developer"
          },
          "city": {
            "title": "City (optional)",
            "type": "string",
            "description": "Narrow to one city, for example `dubai`, `abu-dhabi`, `sharjah`. Leave empty for the whole country.",
            "default": ""
          },
          "maxJobs": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many jobs to return at most. One job = one row = one charged event. GulfTalent lists 25 jobs per page. A job that appears again is dropped, so it is never charged twice. Rows that say a search is empty, a country was not recognised, or a page could not be read are never charged.",
            "default": 25
          },
          "includeDescription": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "Default: true. The full advert text with HTML stripped and HTML entities decoded. Turn it off for a smaller dataset - the price is the same either way.",
            "default": true
          },
          "useProxy": {
            "title": "Use an Apify proxy",
            "type": "boolean",
            "description": "Default: true. Measured on 2026-09-03: GulfTalent answers HTTP 403 to a plain datacenter connection while returning HTTP 200 to an ordinary home connection, so the run goes through an Apify proxy. Turn it off only if you are running from a network GulfTalent already accepts.",
            "default": true
          },
          "maxPages": {
            "title": "Maximum listing pages",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Safety cap on how many listing pages to walk. 0 lets the Actor decide from Maximum jobs (25 per page). Asking GulfTalent for a page past the last one silently returns the last page again; this Actor stops when a page brings no new jobs.",
            "default": 0
          },
          "keywords": {
            "title": "Keyword filter",
            "type": "array",
            "description": "Keep only jobs whose title, description, employer, industry or location contains one of these words. Case is ignored. Leave empty to keep everything. Nothing extra is fetched from GulfTalent - this narrows the jobs already read, and jobs that do not match are never charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Keyword matching",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "`any` keeps a job that contains at least one keyword. `all` keeps only jobs that contain every keyword.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop any job containing one of these words - for example an agency you do not want, or `commission only`. Applied after the keyword filter.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Employers to include",
            "type": "array",
            "description": "Keep only jobs from employers whose name contains one of these (partial match, case ignored). Leave empty for all employers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs paying at least this much, in the currency GulfTalent publishes (usually AED, usually per month). A job with no published salary is **kept**, not dropped - an unknown salary is not a low one. Measured on 2026-09-03: 44% of listings publish a salary.",
            "default": 0
          },
          "requireSalary": {
            "title": "Only jobs that publish a salary",
            "type": "boolean",
            "description": "Default: false. Turn it on to drop the roughly 56% of jobs that hide the salary.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. 0 means no limit. A job whose posted date cannot be read is **kept**, not dropped.",
            "default": 0
          },
          "monitoringMode": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Default: false. Turn it on and schedule this Actor daily: each run returns only the jobs it has not returned before, so you pay for new postings instead of the same list again. Already-seen jobs are skipped **before** their pages are opened, so repeat runs are fast as well as cheap.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Reset the monitoring memory (one-shot)",
            "type": "boolean",
            "description": "Default: false. Turn it on for a single run to forget which jobs were already returned and start monitoring again from scratch.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}