{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Scraper: Jobicy, Remote OK, Arbeitnow & ATS",
    "description": "Remote jobs from Jobicy, Remote OK and Arbeitnow APIs plus remote roles straight from company career pages (Greenhouse, Lever, Ashby, Workday & 5 more). One clean schema, salary, dedupe, source attribution and an only-new-jobs monitor.",
    "version": "1.0",
    "x-build-id": "cmv0c5Yc80GLThyVS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sysco32~remote-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sysco32-remote-jobs-feed",
        "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/sysco32~remote-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-sysco32-remote-jobs-feed",
        "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/sysco32~remote-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-sysco32-remote-jobs-feed",
        "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": "Remote job feeds",
            "type": "array",
            "description": "Public remote-job APIs to include. All of them allow reuse with attribution, so every job keeps its source and canonical job URL. <b>Jobicy</b>: about 1,000 remote jobs from the last 7 days, with salary, seniority and category. <b>Remote OK</b>: the latest ~100 remote jobs. <b>Arbeitnow</b>: jobs from European ATS systems, remote ones only. <b>Arbeitnow UK</b>: UK edition, remote ones only.",
            "items": {
              "type": "string",
              "enum": [
                "jobicy",
                "remoteok",
                "arbeitnow",
                "arbeitnow-uk"
              ],
              "enumTitles": [
                "Jobicy",
                "Remote OK",
                "Arbeitnow (EU)",
                "Arbeitnow UK"
              ]
            },
            "default": [
              "jobicy",
              "remoteok",
              "arbeitnow"
            ]
          },
          "companies": {
            "title": "Company career pages (remote roles only)",
            "type": "array",
            "description": "Optional. Add companies to pull their <b>remote</b> openings straight from the employer's ATS (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Personio, Teamtailor). Accepted: ATS board URLs such as <code>https://boards.greenhouse.io/gitlab</code> or <code>https://jobs.ashbyhq.com/zapier</code>, a company careers page with an embedded board, a bare slug, or <code>ats:slug</code>. Workday needs the full careers URL. Career-page jobs come first and win the cross-source deduplication.",
            "default": [
              "https://boards.greenhouse.io/gitlab",
              "https://jobs.ashbyhq.com/zapier"
            ],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (any of)",
            "type": "array",
            "description": "Keep only jobs whose title, category or tags contain at least one of these words or phrases (case-insensitive, whole words), e.g. <code>python</code>, <code>product manager</code>, <code>customer support</code>. Leave empty for all jobs.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, e.g. <code>senior</code>, <code>intern</code>, <code>sales</code>.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location eligibility (any of)",
            "type": "array",
            "description": "Keep only jobs whose location or eligibility text contains one of these strings, e.g. <code>Europe</code>, <code>USA</code>, <code>Germany</code>, <code>EMEA</code>. Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "includeWorldwide": {
            "title": "Also keep 'Anywhere / Worldwide' jobs",
            "type": "boolean",
            "description": "When a location filter is set, also keep jobs open worldwide (Anywhere, Worldwide, Global, or no location given).",
            "default": true
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no date filter.",
            "default": 0
          },
          "onlyWithSalary": {
            "title": "Only jobs with salary",
            "type": "boolean",
            "description": "Keep only jobs that publish a salary range.",
            "default": false
          },
          "maxJobsPerSource": {
            "title": "Max jobs per source",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many matching jobs per feed or per company. 0 = no limit. Jobicy alone has about 1,000 jobs in its 7-day window.",
            "default": 100
          },
          "dedupeAcrossSources": {
            "title": "Remove duplicates across sources",
            "type": "boolean",
            "description": "The same role is often listed on several boards. Keep only the first copy, matched on company and title (career pages first, then Jobicy, Remote OK, Arbeitnow).",
            "default": true
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Add the full job description as plain text.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Also include description HTML",
            "type": "boolean",
            "description": "Add the original description HTML next to the plain text.",
            "default": false
          },
          "jobicyGeo": {
            "title": "Jobicy region (optional)",
            "type": "string",
            "description": "Server-side Jobicy region slug, e.g. <code>usa</code>, <code>europe</code>, <code>canada</code>, <code>uk</code>, <code>apac</code>, <code>latam</code>. Leave empty for all regions."
          },
          "jobicyIndustry": {
            "title": "Jobicy category (optional)",
            "type": "string",
            "description": "Server-side Jobicy category slug, e.g. <code>engineering</code>, <code>marketing</code>, <code>data-science</code>, <code>supporting</code>, <code>design-multimedia</code>. Leave empty for all."
          },
          "arbeitnowMaxPages": {
            "title": "Arbeitnow pages to scan",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Arbeitnow returns 300 jobs per page (newest first), and about 5–10% of them are remote. Each page is one request.",
            "default": 5
          },
          "onlyNewJobs": {
            "title": "Only new jobs (monitoring mode)",
            "type": "boolean",
            "description": "Remember the job IDs already delivered and output only jobs you haven't seen before. The first run outputs everything that matches. Schedule it hourly or daily for alerts, webhooks, Slack or Google Sheets, and pay only for new jobs.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that keeps the seen job IDs. Use a different name for each independent monitor.",
            "default": "remote-jobs-feed-seen"
          },
          "maxConcurrency": {
            "title": "Career pages in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many companies to fetch at the same time.",
            "default": 4
          },
          "requestIntervalSecs": {
            "title": "Minimum delay between requests to one job feed (seconds)",
            "minimum": 0.2,
            "maximum": 10,
            "type": "number",
            "description": "Politeness delay between requests to Jobicy, Remote OK and Arbeitnow. ATS career-page APIs use a fixed 0.25 s per host.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}