{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Scraper - LinkedIn Jobs, Indeed & Multi-City Job Alerts",
    "description": "Job scraper for LinkedIn Jobs and Indeed in one run. Search many keywords across up to 20 cities, filter titles, companies and salary, dedupe across boards, and schedule alerts that return only new jobs. Exports salary, company data and apply links. $2 per 1,000 jobs, no login.",
    "version": "1.1",
    "x-build-id": "aSGocFRAJhpG6bZL2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/groupoject~multi-job-board-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-groupoject-multi-job-board-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/groupoject~multi-job-board-scraper/runs": {
      "post": {
        "operationId": "runs-sync-groupoject-multi-job-board-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/groupoject~multi-job-board-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-groupoject-multi-job-board-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": {
          "searchTerm": {
            "title": "Search term",
            "type": "string",
            "description": "Job title or keyword to search for, e.g. \"software engineer\"."
          },
          "searchTerms": {
            "title": "Multiple search terms",
            "type": "array",
            "description": "Run several searches in one go (in addition to or instead of the single term above).",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state, or country, e.g. \"New York, NY\" or \"Remote\"."
          },
          "locations": {
            "title": "Multiple locations",
            "maxItems": 20,
            "type": "array",
            "description": "Search up to 20 cities or regions in one run. A non-empty list replaces the single Location field. Each term is searched in each location on every selected board (terms x locations x boards searches, run one after another). If the plan cannot finish within the run timeout, the Actor stops early and keeps the jobs already saved.",
            "items": {
              "type": "string"
            }
          },
          "jobBoards": {
            "title": "Job boards",
            "type": "array",
            "description": "Indeed and LinkedIn are the principal tested sources. Google Jobs is beta: up to 10 cards per query, possible SERP timeouts, and descriptions may be shortened. Glassdoor, ZipRecruiter, Bayt, and Naukri are optional beta sources and may require residential proxy or return no data when challenged.",
            "items": {
              "type": "string",
              "enum": [
                "indeed",
                "google",
                "linkedin",
                "glassdoor",
                "zip_recruiter",
                "bayt",
                "naukri"
              ],
              "enumTitles": [
                "Indeed",
                "Google Jobs (beta)",
                "LinkedIn",
                "Glassdoor",
                "ZipRecruiter",
                "Bayt",
                "Naukri"
              ]
            },
            "default": [
              "indeed"
            ]
          },
          "maxResultsPerSite": {
            "title": "Max results per board",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many results to request from each board per search term and location. Google Jobs returns up to 10 per query. LinkedIn pages slowly (about 10 jobs per 5-8 s), so keep LinkedIn at 100 or less per search and add locations instead.",
            "default": 50
          },
          "maxItems": {
            "title": "Max total jobs",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on total jobs across all terms, locations, and boards. Defaults to 100; set 0 for unlimited, subject to your run-charge limit.",
            "default": 100
          },
          "hoursOld": {
            "title": "Posted within (hours)",
            "minimum": 1,
            "maximum": 8760,
            "type": "integer",
            "description": "Only jobs posted within this many hours. Leave empty for no limit."
          },
          "includeTitleKeywords": {
            "title": "Include title keywords",
            "type": "array",
            "description": "Keep titles containing at least one of these phrases (case-insensitive substring match). Filtering happens after scraping, so output can be below the requested maximum.",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Remove titles containing any of these phrases, such as intern or principal. Exclusions take priority over title inclusions.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Remove exact company-name matches, ignoring case. Useful for excluding your own company or existing accounts.",
            "items": {
              "type": "string"
            }
          },
          "salaryOnly": {
            "title": "Only jobs with salary data",
            "type": "boolean",
            "description": "Only deliver jobs with a numeric minimum or maximum salary supplied or extracted by the source. This does not estimate missing salaries.",
            "default": false
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "",
              "fulltime",
              "parttime",
              "contract",
              "internship",
              "temporary"
            ],
            "type": "string",
            "description": "Filter by employment type.",
            "default": ""
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Only return remote positions.",
            "default": false
          },
          "countryIndeed": {
            "title": "Country (Indeed & Glassdoor)",
            "type": "string",
            "description": "Country for Indeed/Glassdoor, e.g. USA, UK, Canada, Germany.",
            "default": "USA"
          },
          "distance": {
            "title": "Search radius (miles)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Search radius around the location where supported.",
            "default": 50
          },
          "offset": {
            "title": "Results offset",
            "minimum": 0,
            "type": "integer",
            "description": "Skip the first N results for pagination where supported.",
            "default": 0
          },
          "easyApply": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Return quick-apply jobs where the selected board supports this filter.",
            "default": false
          },
          "linkedinFetchDescription": {
            "title": "LinkedIn full descriptions",
            "type": "boolean",
            "description": "Fetch complete LinkedIn descriptions and direct application URLs. Slower but richer.",
            "default": false
          },
          "linkedinCompanyIds": {
            "title": "LinkedIn company IDs",
            "type": "array",
            "description": "Optional LinkedIn company IDs to restrict the search.",
            "items": {
              "type": "string"
            }
          },
          "normalizeAnnualSalary": {
            "title": "Normalize salary to annual",
            "type": "boolean",
            "description": "Convert hourly, daily, weekly, and monthly salary ranges to annual estimates.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Format descriptions from JobSpy boards. Google Jobs descriptions remain plain text. Enable LinkedIn full descriptions to collect complete LinkedIn text.",
            "default": "markdown"
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "For scheduled runs, deliver only previously undelivered jobs using the same state key. Filtered and capped-out jobs are not consumed. Avoid overlapping runs sharing a state key.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor state key",
            "type": "string",
            "description": "Label separating saved history for recurring monitors (stored encrypted). Use a different value per monitor, e.g. nyc-data-jobs. Leave empty to use \"default\"."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Encrypted proxy settings. Omit for automatic Apify Proxy. Use {\"useApifyProxy\": true, \"apifyProxyGroups\": [\"RESIDENTIAL\"]} for residential proxy, or {\"useApifyProxy\": false, \"proxyUrls\": [\"http://user:password@host:port\"]} for custom proxy. Never put credentials in other fields."
          },
          "debugMode": {
            "title": "Debug mode",
            "type": "boolean",
            "description": "Verbose logging.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}