{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Aggregator",
    "description": "Remote Jobs Aggregator is a Python tool designed to scrape and collect job listings across multiple remote job boards and company ATS portals. It extracts titles, companies, locations, salary ranges, and apply links into clean CSV or JSON formats.",
    "version": "0.0",
    "x-build-id": "loknuNLaHaQzOw6vw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/real-estate-api~Remote-Jobs-Aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-real-estate-api-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/real-estate-api~Remote-Jobs-Aggregator/runs": {
      "post": {
        "operationId": "runs-sync-real-estate-api-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/real-estate-api~Remote-Jobs-Aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-real-estate-api-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": "Job boards to fetch, in priority order. The first source wins when the same company and job title show up on more than one board.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "himalayas",
                "remotive",
                "weworkremotely"
              ],
              "enumTitles": [
                "Remote OK",
                "Himalayas",
                "Remotive",
                "We Work Remotely"
              ]
            },
            "default": [
              "remoteok",
              "himalayas",
              "remotive",
              "weworkremotely"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Remote OK uses each keyword as a tag. Himalayas sends it as q on the search endpoint. Remotive sends it as search. We Work Remotely is filtered on the actor after the RSS download.",
            "items": {
              "type": "string"
            }
          },
          "remotiveCategory": {
            "title": "Remotive category slug",
            "type": "string",
            "description": "Remotive category slug, for example software-dev. The categories endpoint is blocked, so type the slug yourself. Remotive's own filter is loose, and the actor checks keywords again locally."
          },
          "wwrCategories": {
            "title": "We Work Remotely categories",
            "type": "array",
            "description": "We Work Remotely category RSS feeds. One request is made per selected feed.",
            "items": {
              "type": "string",
              "enum": [
                "remote-programming-jobs",
                "remote-back-end-programming-jobs",
                "remote-front-end-programming-jobs",
                "remote-full-stack-programming-jobs",
                "remote-devops-sysadmin-jobs",
                "remote-design-jobs",
                "remote-product-jobs",
                "remote-customer-support-jobs",
                "remote-sales-and-marketing-jobs",
                "remote-management-and-finance-jobs",
                "all-other-remote-jobs"
              ]
            },
            "default": [
              "remote-programming-jobs"
            ]
          },
          "country": {
            "title": "Country (Himalayas search)",
            "type": "string",
            "description": "Himalayas search country as ISO-2, a country name, or a slug, for example US. When this or keywords are set, Himalayas uses the search endpoint instead of the cursor browse feed."
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Drop jobs whose posted time is older than this many days. Jobs with no posted time are kept.",
            "default": 30
          },
          "onlyWithSalary": {
            "title": "Only jobs with salary",
            "type": "boolean",
            "description": "Keep a job only when it has a salary number or Remotive salary text.",
            "default": false
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Store the job description. Turn this off to leave jobDescription empty and keep the dataset smaller.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "How jobDescription is stored when descriptions are included: plain text, markdown, or the original HTML.",
            "default": "text"
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "normalized",
              "raw"
            ],
            "type": "string",
            "description": "Normalized rows use the shared job fields. Raw rows add the source payload under rawJob and still include sourceName and sourceUrl.",
            "default": "normalized"
          },
          "dedupeAcrossSources": {
            "title": "Deduplicate across sources",
            "type": "boolean",
            "description": "Merge rows that share a company and job title. The earliest source in Sources is kept, and the other listings go into alsoListedOn.",
            "default": true
          },
          "maxItems": {
            "title": "Max jobs (total)",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Stop after this many job rows. The free cap is 2,000 jobs per run. Himalayas returns at most 20 jobs per request.",
            "default": 200
          },
          "maxItemsPerSource": {
            "title": "Max jobs per source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop each board after this many jobs that pass the filters. The hard maximum is 1,000 per source.",
            "default": 100
          },
          "timeoutSecs": {
            "title": "Timeout (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Stop the run after this many seconds and keep the rows already collected.",
            "default": 300
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one HTTP response before recording an error for that request.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional proxy for requests. Leave useApifyProxy off unless a source blocks the default IP. Datacenter and residential proxies are available when you turn Apify Proxy on.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}