{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Job Listings Scraper",
    "description": "Scrape public remote job feeds from Remotive, Himalayas, Arbeitnow and Jobicy. Get normalized job titles, companies, apply links, posting dates, locations, salary details, tags and descriptions. Choose sources, filter results and set a total item limit; jobs are selected round-robin across sources.",
    "version": "0.1",
    "x-build-id": "96123ZGut7gwhaibD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/axiomworks~remote-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-axiomworks-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/axiomworks~remote-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-axiomworks-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/axiomworks~remote-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-axiomworks-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": {
          "sources": {
            "title": "Job boards (array of source names)",
            "type": "array",
            "description": "Job boards as an array, e.g. [\"himalayas\", \"jobicy\"]. Allowed: remotive, himalayas, arbeitnow, jobicy, remoteok. Default: the first four. RemoteOK is opt-in. Results rotate through selected sources with available matches; maxItems is shared. With maxItems: 1, only the first source is fetched unless it yields no jobs.",
            "items": {
              "type": "string",
              "enum": [
                "remotive",
                "himalayas",
                "arbeitnow",
                "jobicy",
                "remoteok"
              ],
              "enumTitles": [
                "Remotive",
                "Himalayas",
                "Arbeitnow",
                "Jobicy",
                "RemoteOK"
              ]
            },
            "default": [
              "remotive",
              "himalayas",
              "arbeitnow",
              "jobicy"
            ]
          },
          "searchQuery": {
            "title": "Job keywords (optional text)",
            "type": "string",
            "description": "Job keywords, e.g. \"python developer\"; empty means no keyword filter. Remotive, Himalayas and Jobicy use their own search matching. Arbeitnow and RemoteOK require every word in title, company, tags, category or the first 3000 description characters. Combined with category and locationFilter; text is trimmed to 200 characters.",
            "default": ""
          },
          "category": {
            "title": "Category title or tag (optional text)",
            "type": "string",
            "description": "Category text, e.g. \"software\" or \"marketing\"; empty means any category. Case-insensitive substring matching across category, title and tags, with hyphens and underscores treated as spaces. Combines with searchQuery and locationFilter; text is trimmed to 200 characters.",
            "default": ""
          },
          "locationFilter": {
            "title": "Location restriction (optional text)",
            "type": "string",
            "description": "Location text, e.g. \"USA\", \"Europe\" or \"Worldwide\"; empty means any location. Case-insensitive substring match in location and locationRestrictions, not a geographic lookup or eligibility guarantee. Combines with other filters; text is trimmed to 200 characters.",
            "default": ""
          },
          "maxItems": {
            "title": "Total job limit (integer 1–10000)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum jobs saved across all selected sources, e.g. 7. Integer 1-10000, default 50. Not a limit per source. Narrow filters, exhausted feeds or source errors can return fewer jobs. Only saved results are charged.",
            "default": 50
          },
          "includeDescription": {
            "title": "Include job text and HTML (boolean)",
            "type": "boolean",
            "description": "Whether to include description and descriptionHtml, e.g. false for compact rows. Default true. When false both fields are null; keyword filtering still uses available description text. This reduces dataset size, not the number of feed requests.",
            "default": true
          },
          "dedupe": {
            "title": "Collapse matching jobs (boolean)",
            "type": "boolean",
            "description": "Whether to collapse jobs with the same company, title and apply-link hostname, e.g. false to retain cross-source listings. Default true. Stable duplicate ids are always suppressed even when false; the shared maxItems counts saved rows.",
            "default": true
          },
          "salaryOnly": {
            "title": "Require published salary (boolean)",
            "type": "boolean",
            "description": "Whether to keep only jobs with salaryMin, salaryMax or nonempty salaryText, e.g. true for salary research. Default false. Does not estimate missing salaries or compare currencies. Combines with all other filters; set false if too few jobs match.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Maximum posting age (integer 0–3650)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Posting age in days, e.g. 7 for the past week. Integer 0-3650; default 0 disables the filter. Jobs with missing or future dates are excluded when enabled. Uses postedAt, not verified vacancy status. Combines with all other filters; set 0 to broaden results.",
            "default": 0
          },
          "excludeKeywords": {
            "title": "Excluded phrases (array of strings)",
            "type": "array",
            "description": "Phrases to exclude, e.g. [\"unpaid\", \"commission only\"]. Drop jobs containing any phrase in title, company, category, tags or the full available description. Case-insensitive substring matching; each phrase is trimmed to 200 characters. Default [] excludes nothing. Combines with all other filters.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "proxyConfiguration": {
            "title": "Request proxy settings (object)",
            "type": "object",
            "description": "Proxy settings, e.g. {\"useApifyProxy\": false}. Default: no proxy for public feeds. Enable Apify Proxy on the platform if a source blocks requests. Failed sources are logged and skipped; if none produce jobs the run succeeds with zero rows and guidance to change sources or retry.",
            "default": {
              "useApifyProxy": false
            }
          },
          "jobTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Employment types to keep, e.g. [\"full_time\", \"contract\"]. Default [] accepts every type, including unknown. When selected, match the normalized jobType exactly and exclude jobs without a type. OR within this list, AND with other filters; RemoteOK does not publish jobType.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "freelance",
                "internship",
                "working_student"
              ]
            },
            "default": []
          },
          "companyKeywords": {
            "title": "Company name keywords",
            "type": "array",
            "description": "Company name phrases to keep, e.g. [\"GitLab\", \"Automattic\"]. Default [] accepts every company. Case-insensitive substring matching against company only; any phrase may match. AND with other filters. Each phrase is trimmed to 200 characters; empty phrases are ignored.",
            "items": {
              "type": "string"
            },
            "default": []
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}