{
  "openapi": "3.0.1",
  "info": {
    "title": "Wellfound Jobs Scraper",
    "description": "Startup jobs from Wellfound (ex-AngelList Talent) by role and location: full description, compensation, remote flag, ATS source, plus the hiring company's size, funding badges and one-liner on every row. Refuses a search Wellfound silently widened instead of returning the wrong rows.",
    "version": "0.1",
    "x-build-id": "0fBp5MnuwDodCokIZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~wellfound-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-wellfound-jobs-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/scrapyx~wellfound-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-wellfound-jobs-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/scrapyx~wellfound-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-wellfound-jobs-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": {
          "roles": {
            "title": "Role slugs",
            "type": "array",
            "description": "Job roles, as the lowercase kebab-case slug Wellfound uses in its own URL path — e.g. 'software-engineer' from wellfound.com/role/software-engineer. Roughly 515 role slugs exist; browse them at wellfound.com/browse/tech-jobs. Combined with 'locations' as a cross-product. A slug Wellfound does not recognise is refused with an ERROR row rather than silently widened (the site answers 200 and drops the unknown half instead of 404ing).",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location slugs",
            "type": "array",
            "description": "Locations, as the lowercase kebab-case slug in Wellfound's URL path — e.g. 'san-francisco', 'new-york', 'london', 'berlin', 'bangalore', 'united-states'. Coverage is a closed set and Wellfound publishes no index, so an unsupported location returns an ERROR row explaining that. 'remote' is not a location — use the Remote only toggle instead.",
            "items": {
              "type": "string"
            }
          },
          "remote": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Search Wellfound's remote route for each role instead of the general one. Applies only when 'locations' is empty: Wellfound has no URL for 'remote jobs in a specific city', so combining this with a location is refused rather than quietly ignored.",
            "default": false
          },
          "searchUrls": {
            "title": "Wellfound search URLs",
            "type": "array",
            "description": "Paste Wellfound search URLs directly instead of (or alongside) role and location slugs. Supported shapes: /role/<role>, /role/r/<role>, /role/l/<role>/<location>, /location/<location>. Company profile pages and the live /jobs feed are not supported — Cloudflare blocks both for every HTTP client.",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerSearch": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop a search once this many unique jobs have been collected. 0 means no cap (still bounded by Max pages per search). Counted after deduplication — Wellfound's pages overlap, re-serving rows already returned on an earlier page.",
            "default": 100
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Hard ceiling on page requests per search. Each page is a 500–700 KB document returning 20 companies and the up-to-3 jobs each of them highlights (~12–56 jobs). Paging also stops on Wellfound's own pageCount, and when a page returns nothing new.",
            "default": 5
          },
          "includeStartups": {
            "title": "Also emit company rows",
            "type": "boolean",
            "description": "Emit one deduplicated STARTUP record per company in addition to the job records. Company facts (name, slug, size, one-liner, logo, badges such as Actively Hiring / YC / funding stage) are ALREADY nested on every job row at no extra cost — turn this on only when you want companies as their own table.",
            "default": false
          },
          "includeJobDetails": {
            "title": "Fetch each job's detail page",
            "type": "boolean",
            "description": "Adds the employer's own website URL, geocoded job locations, structured salary and industry from each posting's detail page. Costs one extra request PER JOB (~45 per page), so it multiplies run time and proxy traffic roughly 45×. The full job description, compensation text, ATS source and posting date are already in the search response without it.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Upper bound on requests in flight. Once the minimum request interval binds, raising this buys nothing — that interval, not this number, is the honest speed control.",
            "default": 3
          },
          "minRequestInterval": {
            "title": "Minimum interval between requests (seconds)",
            "minimum": 0.05,
            "maximum": 10,
            "type": "number",
            "description": "The actual speed control: the shortest gap between two request starts, across all workers. No rate limiting was observed during testing, so this is routine pacing rather than a defensive measure — raise it if you see 429s.",
            "default": 0.8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. Residential is the default because it was measured to be both more reliable and faster here: on identical cloud runs, datacenter exits drew 7 challenges and lost one search outright (18.5s), while residential drew none and finished all three (10.3s). Datacenter still works often enough to be worth trying if you are optimising for proxy cost.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}