{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Scraper - 8 Job Boards in One Feed, API",
    "description": "Aggregates remote job listings from RemoteOK, Remotive, Himalayas, Jobicy, Arbeitnow, We Work Remotely, Working Nomads and The Muse into one normalized, deduplicated JSON feed with keyword, location, date and salary filters.",
    "version": "1.1",
    "x-build-id": "S07n6jLhIz2u7MJ7q"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/feedsmith~remote-jobs-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-feedsmith-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/feedsmith~remote-jobs-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-feedsmith-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/feedsmith~remote-jobs-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-feedsmith-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": "Which job boards to pull from. Leave empty to use all of them. Remotive is opt-in (off by default): its API terms ask users not to redistribute listings to third-party sites and to poll at most 4 times a day, and it returns only ~15 jobs per call.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "remotive",
                "himalayas",
                "jobicy",
                "arbeitnow",
                "weworkremotely",
                "workingnomads",
                "themuse"
              ],
              "enumTitles": [
                "RemoteOK",
                "Remotive",
                "Himalayas",
                "Jobicy",
                "Arbeitnow",
                "We Work Remotely",
                "Working Nomads",
                "The Muse"
              ]
            },
            "default": [
              "remoteok",
              "himalayas",
              "jobicy",
              "arbeitnow",
              "weworkremotely",
              "workingnomads",
              "themuse"
            ]
          },
          "keywords": {
            "title": "Keywords (match ANY)",
            "type": "array",
            "description": "Keep a job if ANY of these words appears in its title, company or tags (case-insensitive). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop a job if ANY of these words appears in its title, company or tags (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "titleOnly": {
            "title": "Match keywords against title only",
            "type": "boolean",
            "description": "When on, keywords/excludeKeywords only look at the job title (not company or tags).",
            "default": false
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep a job if any of these terms matches its location text, e.g. \"Europe\", \"USA\", \"Worldwide\". \"Worldwide\" also matches jobs open to anyone with no region restriction.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only jobs posted in the last N days. Jobs with an unknown post date are always kept."
          },
          "minSalaryUsd": {
            "title": "Minimum salary (USD/year)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only applied to jobs that actually publish USD salary data; jobs without salary info, or with a non-USD salary, are never dropped by this filter. Hourly/monthly/weekly figures are annualized for comparison."
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Attach the full job description. Turn off for a lighter, faster feed.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html"
            ],
            "type": "string",
            "description": "text = HTML stripped to clean, readable text (entities decoded, whitespace collapsed, paragraphs kept). html = the source's raw HTML.",
            "default": "text"
          },
          "dedupe": {
            "title": "Deduplicate across sources",
            "type": "boolean",
            "description": "Merge the same job when it appears on more than one board (matched by normalized company + title). The richest copy is kept and alsoSeenOn lists the other sources.",
            "default": true
          },
          "maxItemsPerSource": {
            "title": "Max jobs scanned per source",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on how many raw jobs are pulled from each source before filtering. Higher = more complete, more requests.",
            "default": 500
          },
          "maxItems": {
            "title": "Max jobs saved",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many jobs are saved to the dataset. You are only charged for jobs actually saved. Default 200 keeps a first test run around $0.36; raise it for full exports.",
            "default": 200
          },
          "onlyNew": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "When on, jobs already delivered by an earlier run with the same State key are skipped, and you are not charged for them. The first run with a new State key returns everything and remembers it. Ideal for daily schedules.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name of the 'already seen' list used by Only new jobs. Use one State key per search: two schedules on the same account with different keywords need different keys (e.g. \"python\" and \"design\"), otherwise they share and consume each other's new jobs. Letters, digits, dot, dash, underscore.",
            "default": "default"
          },
          "companyBoards": {
            "title": "Company career boards",
            "type": "array",
            "description": "Add specific companies' job boards (max 100 per run). Entries like greenhouse:stripe, ashby:linear, lever:spotify, or a full board URL (https://boards.greenhouse.io/stripe, https://jobs.ashbyhq.com/linear, https://jobs.lever.co/spotify). A wrong name only logs a warning. To use only company boards, remove all Sources above. The keyword, location, date and salary filters apply to them too.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Company boards: remote roles only",
            "type": "boolean",
            "description": "Company boards list every job, on-site ones included. When on (default), only roles advertised as remote are kept. Has no effect on the remote job boards above.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}