{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Scraper - Himalayas, Remote OK, Jobicy, Arbeitnow",
    "description": "Remote jobs from four public job feeds (Himalayas, Remote OK, Jobicy, Arbeitnow) in one format: title, company, location, salary, tags, date and source links. The same job on several sites is returned once. Monitor the feeds and get only new jobs.",
    "version": "0.1",
    "x-build-id": "ngleMg2RdGRQKAQBi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~remote-jobs-feed-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-remote-jobs-feed-monitor",
        "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/neverempty~remote-jobs-feed-monitor/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-remote-jobs-feed-monitor",
        "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/neverempty~remote-jobs-feed-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-remote-jobs-feed-monitor",
        "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",
            "uniqueItems": true,
            "type": "array",
            "description": "The job feeds to read. Leave empty to read all four: Himalayas, Remote OK, Jobicy and Arbeitnow. The log and the sourcesQueried column of every row say which feeds were read. In one run the Actor sends at most 10 requests to Himalayas (20 jobs each), 1 to Remote OK, 1 to Jobicy and 3 to Arbeitnow, so a run covers the newest postings of each feed, not every job the sites hold.",
            "items": {
              "type": "string",
              "enum": [
                "himalayas",
                "remoteok",
                "jobicy",
                "arbeitnow"
              ],
              "enumTitles": [
                "Himalayas",
                "Remote OK",
                "Jobicy",
                "Arbeitnow"
              ]
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only jobs where at least one of these appears in the job title, company name, tags or categories, as a word or the start of a word (ai matches \"AI Engineer\" but not \"Retail\"). Not case-sensitive. One per line. Filters are applied to the newest postings each feed returns; they are not sent to the sites as a search.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories or tags",
            "type": "array",
            "description": "Keep only jobs where at least one of these appears in the tags or categories the feed gives (for example: marketing, design, customer support, devops). Not case-sensitive. One per line.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location or region",
            "type": "array",
            "description": "Keep only jobs whose location text or list of allowed countries/regions contains at least one of these (for example: USA, United States, Europe, Germany, Anywhere). The sites write locations in their own words, so give the spellings you want to catch. A job with no location in the feed does not match.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment type",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only jobs of these types. The type is read from the feed (Himalayas, Jobicy and Arbeitnow give one; Remote OK does not). A job whose type is missing or written in a way that is not recognised does not match.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "freelance",
                "internship",
                "temporary"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Freelance",
                "Internship",
                "Temporary"
              ]
            }
          },
          "withSalaryOnly": {
            "title": "With a salary only",
            "type": "boolean",
            "description": "Keep only jobs for which the feed gives a minimum or maximum salary. Amounts are returned as given by the feed, with its currency and period when it states them; nothing is converted.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Keep only jobs posted on or after this date (for example 2026-10-01). A job with no posting date in the feed does not match."
          },
          "maxJobs": {
            "title": "Maximum jobs to return",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "With monitoring off, at most this many job rows are returned, newest first. The feeds are read in rounds (one request to each feed per round) until enough matching jobs have been read or the per-run request limits are reached. Not applied in monitoring mode, where every new job that was read is returned.",
            "default": 200
          },
          "includeFullDescription": {
            "title": "Full description text",
            "type": "boolean",
            "description": "Off: the description column holds a short excerpt (up to 500 characters). On: it holds the full description text from the feed, with HTML tags removed.",
            "default": false
          },
          "monitoringMode": {
            "title": "Monitoring mode: return only new jobs",
            "type": "boolean",
            "description": "Remembers jobs between runs. The first time a feed is read with a given set of filters, its newest jobs are only remembered: nothing is returned and nothing is charged for that feed. On later runs each feed that is read (with at least one remote job in its first answer) and compared is charged one monitoring check (source-checked), and only jobs that have not been seen before are returned (job-returned). A job counts as seen when its id on that site is remembered, or when a job with the same company and title is remembered (from any of the four sites). A job that did not match your filters when first seen is remembered and not returned later. Jobs are remembered per set of filters. Do not run two schedules with the same filters at the same moment.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Forget the remembered jobs and start over",
            "type": "boolean",
            "description": "Clears everything remembered for this Actor on your account (for every set of filters) before this run reads anything, so with monitoring on every feed is a first read again: its jobs are remembered and nothing is returned. Use it for one run and turn it off again.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}