{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Scraper & Aggregator: Remote OK, WWR, Himalayas",
    "description": "Remote jobs scraper and aggregator API: Remote OK, We Work Remotely, Remotive, Himalayas, Jobicy, Working Nomads and Arbeitnow in one list. Filter by keyword, location, salary, days. One result = one job: title, company, salary, who can apply, type, date, URLs. No login. $0.25 per 1,000.",
    "version": "1.0",
    "x-build-id": "VmQ5KvujNAvGiEFGd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rel8ble~remote-jobs-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rel8ble-remote-jobs-aggregator",
        "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/rel8ble~remote-jobs-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-rel8ble-remote-jobs-aggregator",
        "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/rel8ble~remote-jobs-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-rel8ble-remote-jobs-aggregator",
        "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": {
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Optional. Which job boards to read: any of \"remoteok\", \"weworkremotely\", \"remotive\", \"himalayas\", \"jobicy\", \"workingnomads\", \"arbeitnow\". Default = all seven. When the same job is on several boards, the copy from the board listed first is kept and the others go into alsoListedOn.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "weworkremotely",
                "remotive",
                "himalayas",
                "jobicy",
                "workingnomads",
                "arbeitnow"
              ],
              "enumTitles": [
                "Remote OK",
                "We Work Remotely",
                "Remotive",
                "Himalayas",
                "Jobicy",
                "Working Nomads",
                "Arbeitnow"
              ]
            },
            "default": [
              "remoteok",
              "weworkremotely",
              "remotive",
              "himalayas",
              "jobicy",
              "workingnomads",
              "arbeitnow"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Optional. Keep jobs whose title, company, category or tags contain any of these words or phrases, one per line: \"python\", \"data engineer\", \"customer support\", \"react\". Whole words only (\"java\" does not match \"JavaScript\"). Empty = every remote job.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Optional. Drop jobs whose title, company, category or tags contain any of these words, one per line: \"senior\", \"sales\", \"crypto\". Whole words only.",
            "items": {
              "type": "string"
            }
          },
          "keywordsInDescription": {
            "title": "Also match keywords in the description",
            "type": "boolean",
            "description": "Optional. Also look for the keywords in the full job description, not only in title / company / category / tags. Finds more jobs but less precise. Default false.",
            "default": false
          },
          "tags": {
            "title": "Categories / tags",
            "type": "array",
            "description": "Optional. Keep jobs whose category or tags contain any of these, one per line: \"Design\", \"DevOps\", \"Marketing\", \"Software Development\", \"Customer Support\". Each board names its categories differently, so short words work best. Empty = all categories.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Who can apply from (location eligibility)",
            "type": "array",
            "description": "Optional. Countries or regions you want to be eligible from, one per line: \"Worldwide\", \"USA\", \"Europe\", \"UK\", \"Germany\", \"Canada\", \"LATAM\", \"APAC\", \"EMEA\". A job matches when its \"who can apply\" line names that place, a region that contains it (Germany matches a job open to \"Europe\" or \"EMEA\") or a place inside it (Europe matches a job open to \"Germany\"). \"Worldwide\" = only jobs open to anyone anywhere. Empty = no location filter.",
            "items": {
              "type": "string"
            }
          },
          "includeWorldwide": {
            "title": "Include \"anywhere\" jobs in a location filter",
            "type": "boolean",
            "description": "Optional. With a location filter, also keep jobs that are open worldwide (anyone can apply). Default true. Set false to get only jobs that explicitly name your country or region.",
            "default": true
          },
          "includeUnknownLocation": {
            "title": "Include jobs that do not say where",
            "type": "boolean",
            "description": "Optional. With a location filter, also keep jobs that give no location or eligibility at all (common on Remote OK). Default false.",
            "default": false
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Optional. Keep only these types: any of \"Full-time\", \"Part-time\", \"Contract\", \"Freelance\", \"Internship\", \"Temporary\". Jobs that do not state a type are dropped when this is set. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "Full-time",
                "Part-time",
                "Contract",
                "Freelance",
                "Internship",
                "Temporary"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Freelance",
                "Internship",
                "Temporary"
              ]
            }
          },
          "minSalary": {
            "title": "Minimum salary (USD per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep jobs whose top of range is at least this much per year in US dollars, e.g. 80000. Hourly, daily and monthly pay and other currencies are converted with fixed approximate rates (2,080 hours a year). Jobs that show no salary are dropped unless \"Keep jobs without a salary\" is on. 0 or empty = no minimum."
          },
          "includeNoSalary": {
            "title": "Keep jobs without a salary",
            "type": "boolean",
            "description": "Optional. With a minimum salary set, also keep jobs that do not publish any salary. Default false.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Only jobs posted in the last N days, e.g. 1 for today and yesterday, 7 for the last week. Feeds are read newest first and stop at the cut-off, so this also makes runs faster. 0 or empty = any date."
          },
          "dedupe": {
            "title": "Merge duplicates across boards",
            "type": "boolean",
            "description": "Optional. Default true: the same job (same company and same title after cleaning, e.g. \"Sr.\" = \"Senior\", \"(m/w/d)\" removed) listed on several boards becomes one row; the other listings are in alsoListedOn with their own URLs. Set false to get one row per listing.",
            "default": true
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Most jobs to save in total. When this cuts the list, every board gets a fair share (round-robin, newest first). 0 = no limit (all matching jobs from all boards, about 100,000+ without filters, most of them from Himalayas). Default 100.",
            "default": 100
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Optional. Default true: each job gets its full description as plain text (HTML removed; e-mail addresses and phone numbers replaced). Set false for smaller rows.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Also keep description HTML",
            "type": "boolean",
            "description": "Optional. Also save the description as the board published it (HTML), in descriptionHtml. Default false.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Optional. Parallel requests. Default 10 is fine; Arbeitnow is always paced to its own limit.",
            "default": 10
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Optional. Retries for a failed or rate-limited request (with a new session each time). Default 6.",
            "default": 6
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Not needed: all seven boards publish these feeds for re-use and answer direct requests. Default no proxy.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}