{
  "openapi": "3.0.1",
  "info": {
    "title": "RemoteOK Scraper - Remote Jobs, Salary & Tags API",
    "description": "RemoteOK scraper and remote jobs API. Export remote job listings with company, tags, category, seniority, USD salary, apply URL, contact emails and full descriptions. 14 filters (keyword, tag, company, region, salary, date, sort). Fast JSON feed, no login or API key. JSON, CSV, Excel.",
    "version": "0.1",
    "x-build-id": "QzLtN5UTMjh18MAkW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapers_lat~remoteok-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapers_lat-remoteok-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/scrapers_lat~remoteok-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapers_lat-remoteok-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/scrapers_lat~remoteok-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapers_lat-remoteok-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": {
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keep a job when its position, company, tags or description matches ANY of these keywords (case-insensitive). Leave empty to keep every job in the feed.",
            "items": {
              "type": "string"
            }
          },
          "excludeTerms": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop a job when its position, company, tags or description matches ANY of these keywords (case-insensitive). Applied after the search keywords.",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Keep only jobs carrying at least one of these RemoteOK tags (case-insensitive), for example engineer, react, golang, marketing, design, senior. Leave empty to ignore tag filtering.",
            "items": {
              "type": "string"
            }
          },
          "company": {
            "title": "Company",
            "type": "string",
            "description": "Keep only jobs whose company name contains this text (case-insensitive). Leave empty to ignore company filtering."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Keep only jobs whose location text contains this value (case-insensitive), for example Europe, United States or Worldwide. Leave empty to ignore location filtering."
          },
          "remoteRegion": {
            "title": "Remote region",
            "enum": [
              "any",
              "worldwide",
              "usa",
              "europe"
            ],
            "type": "string",
            "description": "Restrict to a hiring region based on the listing's location text. 'worldwide' keeps globally-open roles, 'usa' and 'europe' keep roles pinned to those regions.",
            "default": "any"
          },
          "seniority": {
            "title": "Seniority",
            "enum": [
              "any",
              "junior",
              "mid",
              "senior",
              "lead"
            ],
            "type": "string",
            "description": "Keep only jobs at this seniority level, derived from the listing's tags and title.",
            "default": "any"
          },
          "minSalary": {
            "title": "Minimum salary (USD)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only jobs whose published maximum salary is at or above this annual USD amount. Jobs without a published salary are excluded when this is set. Leave empty to ignore."
          },
          "maxSalary": {
            "title": "Maximum salary (USD)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only jobs whose published minimum salary is at or below this annual USD amount. Jobs without a published salary are excluded when this is set. Leave empty to ignore."
          },
          "salaryOnly": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "When enabled, keep only listings that publish a salary range.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Keep only jobs posted on or after this date (YYYY-MM-DD). Leave empty to ignore."
          },
          "postedWithinDays": {
            "title": "Posted within N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs posted within this many days of now. Leave empty to ignore."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "default",
              "newest",
              "oldest",
              "salary_high",
              "salary_low"
            ],
            "type": "string",
            "description": "Order of the returned jobs. 'newest'/'oldest' sort by posting date; 'salary_high'/'salary_low' sort by published salary (listings without a salary go last).",
            "default": "default"
          },
          "maxJobs": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of matching jobs to return. RemoteOK's live feed exposes roughly the 100 most recent postings, so this caps how many of those you keep. Optional."
          },
          "enrichDetails": {
            "title": "Enrich with job-page details (add-on)",
            "type": "boolean",
            "description": "Fetch each matching job's page to add employmentType, applicantRegion (hiring-region requirement), validThrough (listing expiry) and companyUrl. Slower (one request per job). Billed as a 'details' event only when a page is fetched successfully. Disabled for free accounts.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy. RemoteOK's public feed does not require a proxy; leave empty unless your network needs one.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}