{
  "openapi": "3.0.1",
  "info": {
    "title": "Tech Jobs Search: Startup, AI & Remote Jobs",
    "description": "$1 per 1,000 matching jobs. Search the open jobs of 574 tech, AI, remote-first and European companies by title, place, remote, seniority, salary and date, read live from their career pages when you run it. No API key or login. Companies with no match cost nothing.",
    "version": "0.0",
    "x-build-id": "6dUR6tXs4WV7VbAfo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/conserving_celerytop~tech-jobs-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-conserving_celerytop-tech-jobs-search",
        "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/conserving_celerytop~tech-jobs-search/runs": {
      "post": {
        "operationId": "runs-sync-conserving_celerytop-tech-jobs-search",
        "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/conserving_celerytop~tech-jobs-search/run-sync": {
      "post": {
        "operationId": "run-sync-conserving_celerytop-tech-jobs-search",
        "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": {
          "companyLists": {
            "title": "Company lists",
            "uniqueItems": true,
            "type": "array",
            "description": "The lists of companies to search. Their career pages are read live when you run it: 574 companies in the four lists together, each read once. Pick fewer lists for a faster search. Leave empty to search all four. API value: a list such as [\"ai-companies\"].",
            "items": {
              "type": "string",
              "enum": [
                "ai-companies",
                "tech-companies",
                "remote-first",
                "europe-tech"
              ],
              "enumTitles": [
                "AI companies (179)",
                "Tech companies (311)",
                "Remote-first companies (90)",
                "Tech companies hiring in Europe (65)"
              ]
            },
            "default": [
              "ai-companies",
              "tech-companies",
              "remote-first",
              "europe-tech"
            ]
          },
          "titleIncludes": {
            "title": "Title includes",
            "maxItems": 100,
            "type": "array",
            "description": "Keep only jobs whose title contains one of these words or phrases, ignoring case, for example engineer or product manager. Whole words only, so engineer matches Software Engineer but not Engineering Manager. A list of up to 100. Leave empty for all titles.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title excludes",
            "maxItems": 100,
            "type": "array",
            "description": "Leave out jobs whose title contains any of these words or phrases, ignoring case. Whole words only, so intern does not match International. A list of up to 100, for example senior and intern. An excluded word wins over Title includes. Leave empty to keep every title.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Keep only jobs in this place, such as London, California or Germany. A country name or code (Germany, DE) keeps jobs in that country, so DE does not keep Rio de Janeiro. A US state or Canadian province keeps its region, so California keeps San Mateo, CA. Other text matches whole words, so York keeps New York, not Yorkshire. For several, put one per line. Any match keeps a job. In API input, put a line break between values. For remote jobs use Remote only. Leave empty for all."
          },
          "locationExcludes": {
            "title": "Location excludes",
            "maxItems": 100,
            "type": "array",
            "description": "Leave out jobs in any of these places, matched like Location: India or IN also leaves out jobs in Bangalore, and California leaves out San Mateo, CA. A job with several places is left out when any of them matches. Jobs with no location are kept. A list of up to 100, for example India and Brazil. Leave empty to keep every location.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "true: keep only jobs that can be done fully remote. Hybrid and on-site jobs are left out. Default false.",
            "default": false
          },
          "workplaceTypes": {
            "title": "Workplace",
            "type": "array",
            "description": "Keep only jobs with one of these workplace types: remote, hybrid or onsite (field workplaceType), from the board's own field or the location text. Jobs whose workplace type is unknown are left out, and the company's warning says how many; Greenhouse marks only remote and hybrid jobs, so its on-site jobs are unknown. Leave empty for all jobs.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "seniorities": {
            "title": "Seniority",
            "type": "array",
            "description": "Keep only jobs at one of these levels (field seniority), read from the title: Senior Engineer is senior, Head of Sales is director. A title without a level word, such as Software Engineer, has no seniority: those jobs are left out, and the company's warning says how many. Leave empty for all levels.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "entry",
                "mid",
                "senior",
                "staff_principal",
                "lead_manager",
                "director",
                "vp",
                "c_level"
              ],
              "enumTitles": [
                "Intern",
                "Entry",
                "Mid",
                "Senior",
                "Staff or principal",
                "Lead or manager",
                "Director",
                "VP",
                "C-level"
              ]
            }
          },
          "jobFunctions": {
            "title": "Job functions",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only jobs in these functions, read from each job's title, then its department and team (output field jobFunction). Pick one or more, for example Engineering and Data. English and German titles are read, and basic French, Spanish, Dutch and Swedish ones. In our tests about 9 in 10 jobs got the right function. API value: a list such as [\"engineering\", \"data\"]. Leave empty for all functions.",
            "items": {
              "type": "string",
              "enum": [
                "engineering",
                "data",
                "product",
                "design",
                "sales",
                "marketing",
                "customer_success",
                "operations",
                "finance",
                "legal",
                "people_hr",
                "it_security",
                "research_science",
                "healthcare",
                "education",
                "manufacturing_trades",
                "retail_hospitality",
                "other"
              ],
              "enumTitles": [
                "Engineering",
                "Data and analytics",
                "Product",
                "Design",
                "Sales",
                "Marketing",
                "Customer success and support",
                "Operations",
                "Finance",
                "Legal and compliance",
                "People and HR",
                "IT and security",
                "Research and science",
                "Healthcare",
                "Education",
                "Manufacturing and trades",
                "Retail, restaurants and hospitality",
                "Other"
              ]
            }
          },
          "employmentTypes": {
            "title": "Job type",
            "type": "array",
            "description": "Keep only jobs with one of these job types (field employmentTypeNormalized), from the board's job type or the title. Jobs whose type is unknown are left out, and the company's warning says how many. Teamtailor gives no job type and Greenhouse only when the company sets one, so there mostly titles like Intern or Part-time tell. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "temporary",
                "internship",
                "apprenticeship",
                "volunteer"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Apprenticeship",
                "Volunteer"
              ]
            }
          },
          "department": {
            "title": "Department",
            "type": "string",
            "description": "Keep only jobs whose department, team or department path contains this text, ignoring case, for example engineering. For several, put one per line. A job that matches any of them is kept. In API input, put a line break between values, as in \"engineering\\nsales\". Up to 100. Leave empty for all departments."
          },
          "hasSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Keep only jobs that show a salary, from the job board or written in the job description. Default false.",
            "default": false
          },
          "minAnnualSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs whose yearly salary reaches this amount, such as 120000, in the currency below. The top of the range counts, and pay written in the job description counts too. No exchange rates: jobs paid in another currency, and jobs with no yearly salary, are left out. Empty for no minimum."
          },
          "minAnnualSalaryCurrency": {
            "title": "Minimum salary currency",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "Currency of Minimum yearly salary, as a three-letter code such as USD, EUR or GBP. Only jobs whose salary is in this currency can pass. Used only with Minimum yearly salary. Default USD.",
            "default": "USD"
          },
          "postedSince": {
            "title": "Posted since",
            "pattern": "^(?:|\\s*\\d+\\s*(?:[Hh][Oo][Uu][Rr]|[Dd][Aa][Yy]|[Ww][Ee][Ee][Kk]|[Mm][Oo][Nn][Tt][Hh]|[Yy][Ee][Aa][Rr])[Ss]?(?:\\s+[Aa][Gg][Oo])?\\s*|(?!\\s*(?:[Ii][Nn]\\s+)?[+-]?\\d+\\s*(?!(?:[Jj][Aa][Nn]|[Ff][Ee][Bb]|[Mm][Aa][Rr]|[Aa][Pp][Rr]|[Mm][Aa][Yy]|[Jj][Uu][Nn]|[Jj][Uu][Ll]|[Aa][Uu][Gg]|[Ss][Ee][Pp]|[Oo][Cc][Tt]|[Nn][Oo][Vv]|[Dd][Ee][Cc])|(?:[Aa][Mm]|[Pp][Mm]|[Uu][Tt]|[Uu][Tt][Cc]|[Gg][Mm][Tt]|[Zz]|[Tt]|[Ee][Ss][Tt]|[Ee][Dd][Tt]|[Cc][Ss][Tt]|[Cc][Dd][Tt]|[Mm][Ss][Tt]|[Mm][Dd][Tt]|[Pp][Ss][Tt]|[Pp][Dd][Tt])(?![A-Za-z]))[A-Za-z]+(?:\\s+[A-Za-z]+)*\\s*$)\\D*\\d[\\s\\S]*)$",
            "type": "string",
            "description": "Keep only jobs posted on or after this date. Use a date as YYYY-MM-DD, for example 2026-09-01, or a period as a number plus hours, days, weeks, months or years, for example 24 hours or 7 days. A period counts back from the start of each run, which suits schedules. Jobs whose board gives no posting date are left out. Leave empty for all dates."
          },
          "postedBefore": {
            "title": "Posted before",
            "pattern": "^(?:|\\s*\\d+\\s*(?:[Hh][Oo][Uu][Rr]|[Dd][Aa][Yy]|[Ww][Ee][Ee][Kk]|[Mm][Oo][Nn][Tt][Hh]|[Yy][Ee][Aa][Rr])[Ss]?(?:\\s+[Aa][Gg][Oo])?\\s*|(?!\\s*(?:[Ii][Nn]\\s+)?[+-]?\\d+\\s*(?!(?:[Jj][Aa][Nn]|[Ff][Ee][Bb]|[Mm][Aa][Rr]|[Aa][Pp][Rr]|[Mm][Aa][Yy]|[Jj][Uu][Nn]|[Jj][Uu][Ll]|[Aa][Uu][Gg]|[Ss][Ee][Pp]|[Oo][Cc][Tt]|[Nn][Oo][Vv]|[Dd][Ee][Cc])|(?:[Aa][Mm]|[Pp][Mm]|[Uu][Tt]|[Uu][Tt][Cc]|[Gg][Mm][Tt]|[Zz]|[Tt]|[Ee][Ss][Tt]|[Ee][Dd][Tt]|[Cc][Ss][Tt]|[Cc][Dd][Tt]|[Mm][Ss][Tt]|[Mm][Dd][Tt]|[Pp][Ss][Tt]|[Pp][Dd][Tt])(?![A-Za-z]))[A-Za-z]+(?:\\s+[A-Za-z]+)*\\s*$)\\D*\\d[\\s\\S]*)$",
            "type": "string",
            "description": "Keep only jobs posted before this date. Use a date as YYYY-MM-DD, for example 2026-06-01, or a period such as 30 days for jobs posted more than 30 days ago. With Posted since it gives a date range. Jobs whose board gives no posting date are left out, and the company's warning says how many. Leave empty for all dates."
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "type": "integer",
            "description": "Return at most this many matching jobs per company, the newest first, for example 20, so one large company does not fill the results. Leave empty for all matching jobs."
          },
          "maxResults": {
            "title": "Max matching jobs",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most matching jobs this run returns, for example 200. Every company is searched and you get the newest matching jobs first, across all companies. You pay per matching job returned, so this caps the price of a run: 200 jobs at $1 per 1,000 cost $0.20. At most 10,000.",
            "default": 200
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}