{
  "openapi": "3.0.1",
  "info": {
    "title": "🌍 Remote Jobs Scraper — Work From Home Jobs, Salary USD",
    "description": "Scrape remote jobs from six public boards — WeWorkRemotely, RemoteOK, Remotive, Jobicy, Himalayas, Arbeitnow — plus 582 company career pages on Greenhouse and Ashby that no other remote-jobs scraper reads. One schema, every salary in USD per year, equity flagged. No API keys.",
    "version": "0.1",
    "x-build-id": "XSFVEDM40gWlUFUX9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/iettiu~remote-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-iettiu-remote-jobs-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/iettiu~remote-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-iettiu-remote-jobs-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/iettiu~remote-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-iettiu-remote-jobs-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": {
          "search": {
            "title": "Search term",
            "type": "string",
            "description": "Keeps jobs containing ALL of these words, in any order, across title, company, tags and description. \"senior python\" matches \"Python Senior Developer\". Leave empty for all jobs.",
            "default": ""
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on how many jobs are returned, so a run cannot produce an unexpected bill. The default of 60 returns about 10 from each board — enough to judge coverage and quality for well under a dollar. Raise it once you know what you want: the unfiltered corpus is about 500 jobs, and roughly 1,350 when filters are set.",
            "default": 60
          },
          "hasSalaryOnly": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Roughly 20–30% of postings publish pay. Enable this to keep only those — the subset usable for salary benchmarking.",
            "default": false
          },
          "worldwideOnly": {
            "title": "Worldwide only",
            "type": "boolean",
            "description": "Keep only jobs open to applicants anywhere, with no country or region restriction.",
            "default": false
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Filter by where the job accepts applicants from, e.g. \"United States\", \"Germany\", \"Europe\". Typing \"worldwide\", \"anywhere\" or \"global\" returns every job open to applicants anywhere — the same result as the Worldwide only checkbox, because most unrestricted jobs publish no location at all rather than the word.",
            "default": ""
          },
          "seniority": {
            "title": "Seniority",
            "enum": [
              "any",
              "intern",
              "junior",
              "mid",
              "senior",
              "lead",
              "executive"
            ],
            "type": "string",
            "description": "Filter by experience level, inferred from the job title where the board does not state it.",
            "default": "any"
          },
          "employmentType": {
            "title": "Employment type",
            "enum": [
              "any",
              "full_time",
              "part_time",
              "contract",
              "internship"
            ],
            "type": "string",
            "description": "Filter by contract type. Jobs whose board does not publish this field are kept — WeWorkRemotely and most of RemoteOK never state it, so excluding them would silently remove about 43% of all jobs. Check the employment_type field on each result: null means the board did not say.",
            "default": "any"
          },
          "minSalaryUsd": {
            "title": "Minimum salary (USD per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Keeps jobs whose maximum salary is at least this much, after converting every currency and pay period to USD per year. Jobs without a published salary are excluded when this is set.",
            "default": 0
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only jobs newer than this. Set to 0 to disable.",
            "default": 30
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "string",
            "description": "Drop jobs containing any of these words. Space or comma separated, e.g. \"sales recruiter crypto\".",
            "default": ""
          },
          "sources": {
            "title": "Job boards",
            "type": "array",
            "description": "Which sources to read. The first six are public remote-job boards. Greenhouse and Ashby are applicant tracking systems - the hiring software companies post into directly - covering 582 company career pages, which is roughly 95x the volume of the six boards and where the salary and equity data comes from. They also carry onsite roles, so pair them with the location filters if you only want remote.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "jobicy",
                "himalayas",
                "remotive",
                "arbeitnow",
                "weworkremotely",
                "greenhouse",
                "ashby"
              ],
              "enumTitles": [
                "RemoteOK",
                "Jobicy",
                "Himalayas",
                "Remotive",
                "Arbeitnow (DE)",
                "WeWorkRemotely",
                "Greenhouse (company boards)",
                "Ashby (company boards)"
              ]
            },
            "default": [
              "remoteok",
              "jobicy",
              "himalayas",
              "remotive",
              "arbeitnow",
              "weworkremotely",
              "greenhouse",
              "ashby"
            ]
          },
          "atsBoards": {
            "title": "Specific company boards (Greenhouse / Ashby)",
            "type": "array",
            "description": "Limit the ATS sources to these company board slugs, e.g. stripe, openai, figma. Leave empty to use the built-in registry of 582 boards. A recruiter tracking 40 target companies wants exactly those, not all 582.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerPlatform": {
            "title": "Max jobs per board",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Cap how many jobs each board may contribute, so one large board cannot dominate the results. 0 means no per-board cap. Applied after filtering, so narrowing a search still searches every board in full.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only jobs I haven't seen before",
            "type": "boolean",
            "description": "Return only jobs this Actor has not returned to you on a previous run. Turn this on when you schedule the Actor: the first run gives you everything, and every run after that gives only what appeared since. You are billed per job returned, so a daily digest costs a fraction of a full run. History is kept per account for 60 days; if it is ever unavailable the run returns everything rather than silently returning nothing.",
            "default": false
          },
          "debugMode": {
            "title": "Verbose logging",
            "type": "boolean",
            "description": "Log every URL fetched and the row count at each filtering step. Useful when a search returns fewer jobs than expected.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}