{
  "openapi": "3.0.1",
  "info": {
    "title": "Work.ua Scraper",
    "description": "Scrape job listings from Work.ua, Ukraine's #1 job board with 100,000+ active vacancies. Returns titles, salaries, companies, skills, geolocation and full descriptions. Incremental change tracking, compact LLM mode, keyword, date, category and salary filters. No API key required.",
    "version": "0.0",
    "x-build-id": "anRZxalqIQ5vhzag2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unfenced-group~work-ua-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unfenced-group-work-ua-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/unfenced-group~work-ua-scraper/runs": {
      "post": {
        "operationId": "runs-sync-unfenced-group-work-ua-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/unfenced-group~work-ua-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-unfenced-group-work-ua-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": {
          "searchQuery": {
            "title": "Search keywords",
            "type": "string",
            "description": "Job search keywords (e.g. 'developer', 'менеджер', 'python'). Leave empty to return all jobs.",
            "default": ""
          },
          "location": {
            "title": "Location / City",
            "type": "string",
            "description": "City name in English or Ukrainian (e.g. 'Kyiv', 'Київ', 'Lviv', 'Одеса'). Leave empty for all of Ukraine.",
            "default": ""
          },
          "daysOld": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Return only jobs posted within this many days. Accepted values: 1, 7, 14, 30. Leave empty for all dates."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "date",
              "salary"
            ],
            "type": "string",
            "description": "Sort order for results on Work.ua.",
            "default": "date"
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of job listings to return.",
            "default": 100
          },
          "fetchDescription": {
            "title": "Fetch full job description",
            "type": "boolean",
            "description": "Visit each job's detail page to retrieve the full description (HTML, text, Markdown), skills list and employment type. Slower but produces richer output. Salary and company data are returned either way.",
            "default": true
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "RESIDENTIAL proxy is required for Work.ua. Defaults to Apify RESIDENTIAL.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional: provide Work.ua search or job URLs directly. When set, keywords and location are ignored.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "minSalary": {
            "title": "💰 Minimum salary (UAH)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return jobs whose disclosed salary meets at least this monthly amount in UAH. Applied after fetching (Work.ua has no salary search filter); jobs with no disclosed salary are excluded when set."
          },
          "categoryIds": {
            "title": "Category IDs",
            "type": "array",
            "description": "Optional work.ua category IDs to filter by (e.g. [1, 23]). Leave empty for all categories.",
            "default": []
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Return core fields only (jobId, title, url, company, location, salary, employment, description text, skills). Ideal for LLM / AI-agent workflows.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Which description variants to include.",
            "default": "all"
          },
          "descriptionMaxLength": {
            "title": "Description max length",
            "minimum": 0,
            "type": "integer",
            "description": "Truncate descriptions to this many characters. 0 = no truncation.",
            "default": 0
          },
          "excludeEmptyFields": {
            "title": "Exclude empty fields",
            "type": "boolean",
            "description": "Drop null / empty fields from each record.",
            "default": false
          },
          "includeKeywords": {
            "title": "Include keywords",
            "type": "array",
            "description": "Keep only jobs whose title or description contains ANY of these words (case-insensitive).",
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title or description contains ANY of these words (case-insensitive).",
            "default": []
          },
          "fromDate": {
            "title": "From date",
            "type": "string",
            "description": "Only include jobs posted on or after this date (YYYY-MM-DD)."
          },
          "toDate": {
            "title": "To date",
            "type": "string",
            "description": "Only include jobs posted on or before this date (YYYY-MM-DD)."
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Compare against previous runs and tag each job NEW / UPDATED / UNCHANGED with first/last-seen timestamps. Only NEW and UPDATED are emitted unless 'Emit unchanged' is on. Ideal for scheduled monitoring.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Stable identifier for the tracked search. Leave empty to auto-generate from your search terms."
          },
          "emitUnchanged": {
            "title": "Emit unchanged",
            "type": "boolean",
            "description": "When incremental mode is on, also emit jobs that have not changed since the last run.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}