{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs API & Scraper: Remote Jobs by Region, Hourly",
    "description": "Remote-only jobs straight from 17,000+ company career sites (Greenhouse, Lever, Workday, Ashby...), refreshed hourly. Filter by where you can work from (US, Canada, Europe, UK, LATAM, APAC, anywhere), function, seniority and minimum salary. Aggregators removed, duplicates merged.",
    "version": "0.1",
    "x-build-id": "H4EVZk0jKvzpVXbI6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cleanrowdata~remote-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cleanrowdata-remote-jobs-api",
        "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/cleanrowdata~remote-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-cleanrowdata-remote-jobs-api",
        "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/cleanrowdata~remote-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-cleanrowdata-remote-jobs-api",
        "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": {
          "eligibleFrom": {
            "title": "Remote from (where you live)",
            "type": "array",
            "description": "Return remote jobs open to people in any of these regions, parsed from each job's location text ('Remote - US', 'Remote, EMEA', 'Anywhere', 'Remote - Canada'...). Worldwide/anywhere jobs always match. Empty = all remote jobs.",
            "items": {
              "type": "string",
              "enum": [
                "us",
                "canada",
                "north_america",
                "latam",
                "uk",
                "europe",
                "india",
                "apac",
                "middle_east",
                "africa",
                "anywhere"
              ],
              "enumTitles": [
                "United States",
                "Canada",
                "North America",
                "Latin America",
                "United Kingdom",
                "Europe (incl. UK)",
                "India",
                "Asia-Pacific",
                "Middle East",
                "Africa",
                "Anywhere / worldwide only"
              ]
            }
          },
          "includeUnspecifiedRegion": {
            "title": "Include remote jobs with no region stated",
            "type": "boolean",
            "description": "Some jobs just say 'Remote'. Keep them (on) or only return jobs whose region explicitly matches (off).",
            "default": true
          },
          "timeRange": {
            "title": "Posted in the last",
            "enum": [
              "1h",
              "24h",
              "7d",
              "30d",
              "all"
            ],
            "type": "string",
            "description": "Only jobs posted (or first seen) in this window. 1h/24h/7d answer in seconds; 30d and all scan the full 1.17M-job index (1-2 minutes).",
            "default": "7d"
          },
          "titleSearch": {
            "title": "Job title contains",
            "type": "array",
            "description": "Only jobs whose title contains any of these. E.g. 'python', 'product designer', 'account executive'.",
            "items": {
              "type": "string"
            }
          },
          "titleExclusionSearch": {
            "title": "Exclude job titles containing",
            "type": "array",
            "description": "Skip jobs whose title contains any of these. E.g. 'senior', 'manager'.",
            "items": {
              "type": "string"
            }
          },
          "jobFunctions": {
            "title": "Job functions",
            "type": "array",
            "description": "Only these kinds of roles (classified from title and department). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "sales",
                "security",
                "ai_ml",
                "data",
                "customer_success",
                "engineering",
                "product",
                "design",
                "marketing",
                "finance",
                "people_hr",
                "legal",
                "healthcare",
                "operations",
                "other"
              ],
              "enumTitles": [
                "Sales",
                "Security",
                "AI / Machine learning",
                "Data & analytics",
                "Customer success & support",
                "Engineering",
                "Product",
                "Design",
                "Marketing",
                "Finance & accounting",
                "People / HR / Recruiting",
                "Legal",
                "Healthcare & clinical",
                "Operations",
                "Other"
              ]
            }
          },
          "seniority": {
            "title": "Seniority",
            "type": "array",
            "description": "Only these levels (parsed from the title). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "entry",
                "mid",
                "senior",
                "lead",
                "staff_principal",
                "manager",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Entry level",
                "Mid level",
                "Senior",
                "Lead",
                "Staff / Principal",
                "Manager",
                "Director / VP / C-level"
              ]
            }
          },
          "minSalaryUsd": {
            "title": "Minimum annual salary (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose ATS publishes a USD salary whose annualized top of range is at least this (hourly/monthly pay is annualized). Leave empty to include jobs without salary. (Rows without an ATS salary still get one parsed from the description when it states a pay range, but this filter uses the ATS salary.)"
          },
          "hasSalary": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Only jobs that show a pay range: from the ATS, or (since Oct 2026) parsed from the job description, e.g. US pay-transparency ranges. Jobs without an ATS salary have their description checked, so this returns more jobs than before and can take a little longer on broad searches.",
            "default": false
          },
          "visaSponsorship": {
            "title": "Visa sponsorship",
            "enum": [
              "any",
              "yes",
              "not_no"
            ],
            "type": "string",
            "description": "Read from the job description. Every row also gets a <code>visa_sponsorship</code> field: <code>yes</code> (the posting says it sponsors), <code>no</code> (says it does not, or requires work authorization without sponsorship) or empty (not stated). Most postings don't say, so <b>Only jobs that say they sponsor</b> returns far fewer jobs; <b>Drop jobs that say they do NOT</b> keeps jobs that don't mention it.",
            "default": "any"
          },
          "keywords": {
            "title": "Keywords (title, department, company)",
            "type": "array",
            "description": "Only jobs mentioning any of these in title, department, team or company.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Skip jobs mentioning any of these.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Only these employment types (when the ATS states them).",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "CONTRACTOR",
                "INTERN",
                "TEMPORARY"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Internship",
                "Temporary"
              ]
            }
          },
          "companies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Only companies whose name or board contains any of these.",
            "items": {
              "type": "string"
            }
          },
          "companyExclusion": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Skip companies whose name or board contains any of these.",
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "ATS platforms",
            "type": "array",
            "description": "Only companies on these applicant tracking systems. Leave empty for all 9.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workday",
                "workable",
                "smartrecruiters",
                "recruitee",
                "personio",
                "rippling"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workday",
                "Workable",
                "SmartRecruiters",
                "Recruitee",
                "Personio",
                "Rippling"
              ]
            }
          },
          "excludeAggregators": {
            "title": "Exclude job aggregators",
            "type": "boolean",
            "description": "Skip aggregators and recruiting marketplaces (e.g. Jobgether) that repost thousands of other companies' 'remote' jobs. Every row is then a direct employer posting.",
            "default": true
          },
          "excludeStaffingAgencies": {
            "title": "Exclude staffing agencies",
            "type": "boolean",
            "description": "Skip jobs posted by staffing and recruitment agencies (Randstad, Robert Half, Aya Healthcare, '... Recruitment', '... Staffing' and similar), detected from the company name. Every row also gets an <code>is_staffing_agency</code> field. Off by default.",
            "default": false
          },
          "excludeReposts": {
            "title": "Exclude re-posted jobs",
            "type": "boolean",
            "description": "Skip re-posted jobs: jobs that just (re)appeared on a company's board but whose ATS posted date is more than 7 days older (reopened or re-listed requisitions). On by default, so the time window means newly posted.",
            "default": true
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Add the full job description (plain text, up to 10,000 characters) to each row. On by default; turn off for smaller, slightly faster results. Very new jobs may have description = null for 1-2 hours.",
            "default": true
          },
          "limit": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum jobs to return, newest first. You pay per job.",
            "default": 100
          },
          "onlyNewSinceLastRun": {
            "title": "Only new jobs since last run",
            "type": "boolean",
            "description": "For scheduled runs: skip jobs that an earlier run with the same search already returned, so you only get (and pay for) new ones. The list of returned job ids is kept in a key-value store named <code>cleanrowdata-remote-jobs-api-seen</code> in your own Apify account (90 days). The first run returns everything that matches.",
            "default": false
          },
          "stateKey": {
            "title": "Saved-search name (optional)",
            "type": "string",
            "description": "Used with \"Only new jobs since last run\". By default each different search keeps its own memory; give a name (e.g. <code>daily-data-jobs</code>) to keep the memory while you edit the filters, or a new name to start fresh."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}