{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Aggregator: Job Feed from 3 Boards",
    "description": "Remote jobs API and job board aggregator: Remote OK, Jobicy and We Work Remotely in one clean remote job feed with salary, seniority and filters. Schedule it and get new jobs only. Source credit on every row.",
    "version": "1.0",
    "x-build-id": "xbacgwJ0mBBKOOUOU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/atesen-software~remote-jobs-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-atesen-software-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/atesen-software~remote-jobs-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-atesen-software-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/atesen-software~remote-jobs-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-atesen-software-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": "Job boards",
            "type": "array",
            "description": "Which job feeds to read. Leave all selected for the widest coverage. A board that is down is skipped and reported in the run summary; the others still return.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "jobicy",
                "weworkremotely"
              ],
              "enumTitles": [
                "Remote OK",
                "Jobicy",
                "We Work Remotely"
              ]
            },
            "default": [
              "remoteok",
              "jobicy",
              "weworkremotely"
            ]
          },
          "keywords": {
            "title": "Keywords (match any)",
            "type": "array",
            "description": "Keep jobs where a word in the title, company, category or tags starts with at least one of these keywords, for example python, product designer, devops (engineer also finds Engineering). Keywords of three letters or fewer, such as go or ai, must match a whole word. Leave empty to return every job.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title, company, category or tags contain any of these words, for example intern, unpaid.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags or skills (match any)",
            "type": "array",
            "description": "Keep jobs that carry at least one of these tags or categories, for example react, golang, customer support. Matches part of a tag.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchDescription": {
            "title": "Also search the job description",
            "type": "boolean",
            "description": "When on, the keywords are also matched against the full job description text. Finds more matches.",
            "default": false
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep jobs whose location or candidate restriction contains one of these words, for example europe, usa, germany, latam. Leave empty for all locations.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeWorldwide": {
            "title": "Include worldwide jobs when filtering locations",
            "type": "boolean",
            "description": "Jobs open to candidates anywhere (no restriction listed) also pass the location filter.",
            "default": true
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs the board marks as remote. All boards offered today list remote jobs only, so this switch changes nothing until a board with on-site listings is added.",
            "default": true
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only these types. Empty keeps all.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "freelance",
                "internship",
                "other"
              ],
              "enumTitles": [
                "Full time",
                "Part time",
                "Contract",
                "Freelance",
                "Internship",
                "Other"
              ]
            },
            "default": []
          },
          "seniorities": {
            "title": "Seniority levels",
            "type": "array",
            "description": "Keep only these levels. The level comes from the board when given and from the job title otherwise. Empty keeps all.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead",
                "manager",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior",
                "Mid",
                "Senior",
                "Lead / Staff / Principal",
                "Manager",
                "Director / Executive"
              ]
            },
            "default": []
          },
          "onlyWithSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Keep only jobs that publish a pay range.",
            "default": false
          },
          "minAnnualSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs whose published pay range reaches at least this yearly amount. Hourly, daily, weekly and monthly pay is converted to a year (2,080 hours, 260 days, 52 weeks, 12 months). Jobs without a salary are dropped when this is set. Amounts are not converted between currencies; combine with Salary currencies."
          },
          "maxAnnualSalary": {
            "title": "Maximum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs whose published pay range starts at or below this yearly amount. Jobs without a salary are dropped when this is set."
          },
          "salaryCurrencies": {
            "title": "Salary currencies",
            "type": "array",
            "description": "Keep only jobs whose pay is published in one of these currencies, for example USD, EUR, GBP. Jobs without a salary are dropped when this is set.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Drop jobs older than this many days. 0 disables the filter.",
            "default": 30
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "none"
            ],
            "type": "string",
            "description": "Plain text is easiest to use. HTML keeps the original formatting. None returns metadata only. E-mail addresses and phone numbers are removed in every format.",
            "default": "text"
          },
          "dedupe": {
            "title": "Merge duplicate postings",
            "type": "boolean",
            "description": "The same job is often posted on several boards. When on, it is returned once (the richest copy) and alsoListedOn lists the other boards.",
            "default": true
          },
          "sortBy": {
            "title": "Order of results",
            "enum": [
              "newest",
              "balanced"
            ],
            "type": "string",
            "description": "Newest first across all boards, or balanced: boards take turns so a large board does not fill the whole result.",
            "default": "newest"
          },
          "onlyNewJobs": {
            "title": "Only new jobs (since the last run)",
            "type": "boolean",
            "description": "Return only jobs this feed has not delivered before, so a daily or weekly schedule gets just the new ones. The memory is kept in a key-value store named remote-jobs-aggregator-state in your account (up to 20,000 fingerprints, roughly 10,000 jobs, for 90 days). A run with no new jobs returns nothing and charges nothing. The first run returns everything that matches.",
            "default": false
          },
          "stateName": {
            "title": "Feed name for new-jobs memory",
            "type": "string",
            "description": "Use one name per saved search, for example python-europe, so different schedules do not share their memory. Letters, digits, dash and underscore only.",
            "default": "default"
          },
          "resetState": {
            "title": "Forget previously delivered jobs",
            "type": "boolean",
            "description": "Clears the memory of this feed name before the run, so every matching job counts as new again. Turn it off again after one run.",
            "default": false
          },
          "maxItems": {
            "title": "Max jobs to return",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Newest jobs first. You are charged per returned job, so this also caps your cost.",
            "default": 100
          },
          "maxItemsPerSource": {
            "title": "Max jobs to read per board",
            "minimum": 20,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper bound on listings fetched from the paginated board (Jobicy) before filters apply. Raise it with narrow filters to dig deeper.",
            "default": 300
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}