{
  "openapi": "3.0.1",
  "info": {
    "title": "Robota.ua Scraper",
    "description": "[💰 $1.8 / 1K] Extract job listings from robota.ua, Ukraine's largest job board. Search by keyword and location, filter by experience, work schedule, salary, and remote work, and get structured jobs with titles, companies, salaries, descriptions, contacts, and apply links.",
    "version": "1.0",
    "x-build-id": "RyYux2Z6PBJDIhU0n"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~robota-ua-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-robota-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/solidcode~robota-ua-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-robota-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/solidcode~robota-ua-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-robota-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": {
          "keywords": {
            "title": "Search Keywords",
            "maxItems": 50,
            "type": "array",
            "description": "Job titles, roles, or keywords to search for, such as 'developer', 'менеджер', or 'accountant'. Each keyword runs its own search. Leave empty to collect the broadest result set for the chosen location and filters. Up to 50 keywords per run.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City or region to search in, such as 'Kyiv', 'Lviv', or 'Odesa'. Matches what you would type into robota.ua's location box. Leave empty to search all of Ukraine."
          },
          "startUrls": {
            "title": "Direct robota.ua URLs",
            "maxItems": 50,
            "type": "array",
            "description": "Paste full robota.ua search-result or individual vacancy URLs (e.g. https://robota.ua/zapros/developer/ukraine) to scrape them directly. Useful when you already have a search dialed in on the website — any filters baked into the URL are respected. Up to 50 URLs per run.",
            "items": {
              "type": "string"
            }
          },
          "noExperienceOnly": {
            "title": "Only entry-level / no-experience jobs",
            "type": "boolean",
            "description": "When on, only show jobs open to candidates with no prior experience (entry-level roles). robota.ua does not offer graduated experience bands, so this is an on/off entry-level filter. Leave off to include jobs at every experience level.",
            "default": false
          },
          "employmentType": {
            "title": "Work Schedule",
            "uniqueItems": true,
            "type": "array",
            "description": "Only return jobs with these work schedules. Leave empty to include all types.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "remote",
                "internship",
                "project",
                "seasonal",
                "shift_work",
                "hybrid",
                "on_site"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Remote",
                "Internship",
                "Project-based",
                "Seasonal / Temporary",
                "Shift work",
                "Hybrid",
                "On-site"
              ]
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote Jobs Only",
            "type": "boolean",
            "description": "Only show jobs that can be done remotely.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum Salary (UAH)",
            "minimum": 0,
            "type": "integer",
            "description": "Only show jobs offering at least this monthly salary, in Ukrainian hryvnia (UAH). Leave empty for no salary floor. Jobs that do not disclose a salary are excluded when this is set."
          },
          "maxResults": {
            "title": "Max Results per Search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of job listings to collect per keyword (or per start URL). Set to 0 to collect all available results across pagination. Results are fetched in pages: the actor stops once your cap is reached but always keeps the whole final page, so a small cap can return up to a full page more than you asked for. Listings repeated across pages are deduplicated, so the final count can also run slightly below your cap.",
            "default": 100
          },
          "onlyUniqueJobs": {
            "title": "Only Unique Jobs",
            "type": "boolean",
            "description": "When on, each job is returned once even if robota.ua lists it across several pages or searches. Deduplicates by the vacancy ID. Turn off to keep every copy.",
            "default": true
          },
          "includeDescription": {
            "title": "Fetch Full Job Descriptions",
            "type": "boolean",
            "description": "Include the full job description text and HTML for each listing, plus contact info, skills, industry, geo, and company verification from the vacancy page. Leave on for the most complete data. Turn off for lighter, faster records when you only need titles, companies, locations, salaries, and apply links from the results list. Note: the description-only fields (description, descriptionHtml, skills, contacts, industry, district/metro/address, latitude/longitude, companyUrl and companyVerified) are empty when this is off — companyVerified reads false then because the verification flag isn't fetched, not because the employer is unverified.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}