{
  "openapi": "3.0.1",
  "info": {
    "title": "BioSpace Scraper - Biotech & Pharma Jobs",
    "description": "Extract job listings from BioSpace, a US biotech and pharma job board. Returns title, company, location, salary, discipline, career level, therapy area, full description, apply URL and posting dates. From $3 per 1,000 jobs, about $8 with full job details.",
    "version": "0.6",
    "x-build-id": "envyRHAfevLT17nXH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~biospace-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-biospace-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/santamaria-automations~biospace-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-biospace-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/santamaria-automations~biospace-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-biospace-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": {
          "searchQueries": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Biotech job titles or skills (e.g. 'clinical research associate', 'medical writer'). Each keyword runs as a separate search and is matched on BioSpace against job title, employer and description text. Leave empty to list the newest jobs. A job matched by several keywords appears once, under the first keyword.",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Pre-built BioSpace search URLs, for example https://jobs.biospace.com/search-jobs?q=clinical&discipline=clinical&sort=Date. Keyword, discipline, education, position type, remote, location and sort are read from each URL and applied as is. Pagination, maxResultsPerQuery and the other limits still apply.",
            "items": {
              "type": "string"
            }
          },
          "directUrls": {
            "title": "Job URLs",
            "type": "array",
            "description": "BioSpace job page URLs (https://jobs.biospace.com/job/<id>/...). Each page is fetched directly, no search is run, and the row includes the full description. Billed with the same events as search results.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "US city or state, e.g. 'Boston', 'San Diego', 'Cambridge, MA'. Resolved with BioSpace's own location search and combined with the radius below. Known biotech hubs work without a state. BioSpace's location index is US-centric."
          },
          "radiusKm": {
            "title": "Location radius (km)",
            "minimum": 1,
            "maximum": 800,
            "type": "integer",
            "description": "Search radius around the location. Ignored when no location is set. Default 80 km (about 50 miles).",
            "default": 80
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "'newest' returns the most recently posted jobs first (BioSpace 'Date' sort). 'relevance' uses BioSpace's keyword relevance ranking. Both are applied by BioSpace itself.",
            "default": "newest"
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only return jobs posted in the last N days. Leave empty for no limit. With newest-first sorting the scrape stops at the first older job, so recent-only runs are fast and cheap."
          },
          "maxResults": {
            "title": "Max Total Results",
            "minimum": 1,
            "type": "integer",
            "description": "Total cap across all queries.",
            "default": 20
          },
          "maxResultsPerQuery": {
            "title": "Max Results per Query",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum results per search keyword.",
            "default": 200
          },
          "includeJobDetails": {
            "title": "Include Full Job Details",
            "type": "boolean",
            "description": "When ON, each job page is fetched for the full description (text, HTML, Markdown), apply URL, employer address and phone, discipline tags and hotbed. Adds one request per job and one 'detail' charge per job whose description was parsed. When OFF you get the search-result fields and a short description snippet only.",
            "default": true
          },
          "includeCompanyDetails": {
            "title": "Include Company Details",
            "type": "boolean",
            "description": "Fetch each employer's BioSpace page once per run and add the company website, careers site, About text, headquarters address, phone and social links to every job of that employer. Every unique employer costs an extra $0.005 (company-detail-result), no matter how many of its jobs are returned. Off by default.",
            "default": false
          },
          "discipline": {
            "title": "Discipline",
            "enum": [
              "",
              "administration",
              "clinical",
              "engineering",
              "information-technology",
              "manufacturing-and-production",
              "marketing",
              "quality",
              "regulatory",
              "sales-and-service",
              "science-r-and-d"
            ],
            "type": "string",
            "description": "Filter by BioSpace discipline.",
            "default": ""
          },
          "requiredEducation": {
            "title": "Required Education",
            "enum": [
              "",
              "high-school-or-equivalent",
              "associate-degree",
              "bachelors-degree",
              "masters-degree-mba",
              "doctorate-phd-md",
              "other"
            ],
            "type": "string",
            "description": "Filter by the education level the job requires.",
            "default": ""
          },
          "positionType": {
            "title": "Position Type",
            "enum": [
              "",
              "full-time",
              "part-time",
              "contract",
              "consultant"
            ],
            "type": "string",
            "description": "Filter by employment type.",
            "default": ""
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Only return jobs marked remote.",
            "default": false
          },
          "titleFilter": {
            "title": "Filter by Job Title",
            "type": "string",
            "description": "Comma-separated list of terms to match against job titles (case-insensitive OR-match). Only jobs whose title contains one of the terms are emitted. Non-matching rows are dropped before the detail fetch, so you don't pay for detail on filtered-out jobs. Leave empty to disable.",
            "default": ""
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of concurrent detail page requests (only used when Include Full Job Details is on).",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}