{
  "openapi": "3.0.1",
  "info": {
    "title": "Work.ua Job Scraper: Ukraine Vacancies & Salary",
    "description": "Scrape Work.ua, Ukraine's job board, by keyword, city or category: vacancy title, employer, city, salary range in hryvnia as numbers, experience, schedule and posting date. Optional full description and skills. Job ads only, no CVs or phone numbers.",
    "version": "0.1",
    "x-build-id": "iabUX9hw7bcdt0dP8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/reventadata~workua-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-reventadata-workua-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/reventadata~workua-scraper/runs": {
      "post": {
        "operationId": "runs-sync-reventadata-workua-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/reventadata~workua-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-reventadata-workua-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": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Job titles or keywords, one work.ua search per term (for example python, водій, sales manager). Leave empty to list every vacancy in the chosen city, category or remote listing. A hyphen inside a term can be read by work.ua as a city or category prefix, so write multi-word terms with spaces.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum items",
            "minimum": 1,
            "type": "integer",
            "description": "Total number of vacancies to save across all queries. Each result page holds up to 14 vacancies.",
            "default": 100
          },
          "maxPages": {
            "title": "Maximum pages per query",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Result pages to walk per query (14 vacancies each). The Actor stops earlier at the last page the site has. The default of 10 gives up to 140 vacancies per query; raise it for broad terms.",
            "default": 10
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "work.ua city slug, the part of the city's own page address after /jobs-: kyiv, lviv, odesa, dnipro, kharkiv, zaporizhzhya, ivano-frankivsk. The full list is at work.ua/jobs/by-region/. An unknown slug returns no vacancies. Cannot be combined with Remote only."
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Search work.ua's remote-work listing (/jobs-remote-...). Cannot be combined with City.",
            "default": false
          },
          "category": {
            "title": "Category",
            "enum": [
              "it",
              "administration",
              "construction-architecture",
              "accounting",
              "hotel-restaurant-tourism",
              "design-art",
              "publishing-media",
              "beauty-sports",
              "culture-music-showbiz",
              "logistic-supply-chain",
              "marketing-advertising-pr",
              "healthcare",
              "real-estate",
              "education-scientific",
              "security",
              "sales",
              "production-engineering",
              "retail",
              "office-secretarial",
              "insurance",
              "customer-service",
              "agriculture",
              "telecommunications",
              "management-executive",
              "auto-transport",
              "hr-recruitment",
              "banking-finance",
              "legal"
            ],
            "type": "string",
            "description": "Restrict the search to one work.ua job category. Leave unset for all categories."
          },
          "includeDetails": {
            "title": "Fetch full vacancy pages",
            "type": "boolean",
            "description": "Open every vacancy page to add the full description, requirements, skills, work place, schedule and the company link. This costs one extra Unblocker request per vacancy, so runs are slower. Off: each row carries the two-line snippet from the listing.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary (UAH)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only vacancies whose bold salary range, in hryvnia, reaches at least this amount. Vacancies with no numeric salary are dropped when this is set. Applied after fetching."
          },
          "maxSalary": {
            "title": "Maximum salary (UAH)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only vacancies whose salary range starts at or below this amount, in hryvnia. Vacancies with no numeric salary are dropped when this is set. Applied after fetching."
          },
          "onlyWithSalary": {
            "title": "Only vacancies with a numeric salary",
            "type": "boolean",
            "description": "Drop vacancies that show no salary range in hryvnia (text such as Договірна, a dollar amount or an hourly rate is not a numeric range).",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only vacancies posted in the last N days, counted in Kyiv time (0 is today). Applied after fetching."
          },
          "maxExperienceYears": {
            "title": "Maximum required experience (years)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only vacancies that ask for at most this many years of experience. Vacancies that state no experience pass. Applied after fetching."
          },
          "verifiedCompaniesOnly": {
            "title": "Verified companies only",
            "type": "boolean",
            "description": "Keep only vacancies from companies carrying work.ua's own verified tick.",
            "default": false
          },
          "includeKeywords": {
            "title": "Must contain",
            "type": "array",
            "description": "Keep only vacancies whose title, company or snippet contains every one of these words, ignoring case and accents.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Must not contain",
            "type": "array",
            "description": "Drop vacancies whose title, company or snippet contains any of these words, ignoring case and accents.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Unblocker is required: work.ua sits behind a Cloudflare challenge that no proxy, datacenter or residential proxy gets past.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}