{
  "openapi": "3.0.1",
  "info": {
    "title": "Wellfound Jobs Scraper",
    "description": "Scrape Wellfound startup jobs by role and location: salary and equity ranges, experience, remote setup, full descriptions and company size, stage and funding. Optional visa, relocation and Glassdoor details. Monitoring mode emits only new jobs.",
    "version": "1.0",
    "x-build-id": "jpVxgUHX2RavQJh2Y"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trev0n~wellfound-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trev0n-wellfound-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/trev0n~wellfound-scraper/runs": {
      "post": {
        "operationId": "runs-sync-trev0n-wellfound-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/trev0n~wellfound-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-trev0n-wellfound-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": "Roles",
            "type": "array",
            "description": "Job roles to search, as you would type them: \"Software Engineer\", \"Product Manager\", \"Data Scientist\", \"Account Executive\". Wellfound has 500+ role pages. Each role is combined with every location below.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, countries or regions: \"San Francisco\", \"New York\", \"London\", \"Berlin\", \"United Kingdom\", \"Europe\", \"India\". Type \"Remote\" for remote jobs. Leave empty to search a role everywhere.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Search only remote jobs. The locations list is ignored when this is on.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Paste wellfound.com search URLs (/role/…, /role/l/…/…, /role/r/…, /location/…, /remote) or job URLs (/jobs/123-title). Search URLs are paged through; job URLs are fetched in full.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many jobs (counted after the filters below). Set 0 for every job the searches return.",
            "default": 100
          },
          "maxPagesPerSearch": {
            "title": "Maximum pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Extra safety cap. Each page holds 20 companies with up to 3 jobs each. 0 means no page cap.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Searches in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many role × location searches run at the same time.",
            "default": 3
          },
          "jobTypes": {
            "title": "Job types",
            "type": "array",
            "description": "Keep only these job types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "internship",
                "cofounder"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Internship",
                "Co-founder"
              ]
            },
            "default": []
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Keep only remote, flexible (on-site or remote) or on-site jobs.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "onsite_or_remote",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "On-site or remote",
                "On-site"
              ]
            },
            "default": []
          },
          "minSalary": {
            "title": "Minimum salary (per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop jobs whose top-of-range salary is below this yearly amount. Hourly pay is converted at 2 080 hours a year.",
            "default": 0
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "enum": [
              "",
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "INR",
              "AUD"
            ],
            "type": "string",
            "description": "With a minimum salary set, also require this currency, so €100k and $100k are not compared as equal.",
            "default": ""
          },
          "includeNoSalary": {
            "title": "Keep jobs without a salary",
            "type": "boolean",
            "description": "Turn off to keep only jobs that show a salary range.",
            "default": true
          },
          "equityOnly": {
            "title": "Jobs with equity only",
            "type": "boolean",
            "description": "Keep only jobs that offer equity (stock options).",
            "default": false
          },
          "maxYearsExperience": {
            "title": "Asks for at most (years of experience)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop jobs that require more experience than this, e.g. 2 for junior roles. 0 means no limit.",
            "default": 0
          },
          "minYearsExperience": {
            "title": "Asks for at least (years of experience)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop jobs aimed at people with less experience than this, e.g. 5 for senior roles. 0 means no limit.",
            "default": 0
          },
          "includeKeywords": {
            "title": "Must contain any of these words",
            "type": "array",
            "description": "Keep only jobs whose title, role, company or description mentions at least one of these.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Must not contain any of these words",
            "type": "array",
            "description": "Drop jobs whose title, role, company or description mentions any of these.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeCompanies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Company names or Wellfound company slugs to keep.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Skip these companies",
            "type": "array",
            "description": "Company names or Wellfound company slugs to drop.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companySizes": {
            "title": "Company sizes",
            "type": "array",
            "description": "Keep only companies of these sizes (employees).",
            "items": {
              "type": "string",
              "enum": [
                "1-10",
                "11-50",
                "51-200",
                "201-500",
                "501-1000",
                "1001-5000",
                "5000+"
              ],
              "enumTitles": [
                "1-10",
                "11-50",
                "51-200",
                "201-500",
                "501-1,000",
                "1,001-5,000",
                "5,000+"
              ]
            },
            "default": []
          },
          "companyStages": {
            "title": "Company stages",
            "type": "array",
            "description": "Keep only companies at these stages, as Wellfound labels them.",
            "items": {
              "type": "string",
              "enum": [
                "early",
                "growth",
                "scale"
              ],
              "enumTitles": [
                "Early stage",
                "Growth stage",
                "Scale stage"
              ]
            },
            "default": []
          },
          "ycFundedOnly": {
            "title": "Y Combinator companies only",
            "type": "boolean",
            "description": "Keep only jobs at companies funded by Y Combinator.",
            "default": false
          },
          "maxAgeMinutes": {
            "title": "Maximum age (minutes)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs posted within this many minutes (1440 = one day). 0 means no limit.",
            "default": 0
          },
          "includeDetails": {
            "title": "Open every job page",
            "type": "boolean",
            "description": "Adds visa sponsorship, relocation, geo-coded office locations, company website, industries, benefits, exact posting date and Glassdoor ratings. One extra request per job.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "markdown",
              "text",
              "html",
              "none"
            ],
            "type": "string",
            "description": "The full description is included by default. HTML comes from the job page, so it switches on job-page fetching.",
            "default": "markdown"
          },
          "descriptionMaxLength": {
            "title": "Truncate descriptions to (characters)",
            "minimum": 0,
            "type": "integer",
            "description": "0 keeps the full description.",
            "default": 0
          },
          "detailConcurrency": {
            "title": "Job-page concurrency",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How many job pages to open at once when job pages are switched on.",
            "default": 5
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Thirteen essential fields per job instead of the full record.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Drop empty fields",
            "type": "boolean",
            "description": "Removes fields that came back empty, for a leaner dataset.",
            "default": false
          },
          "incrementalMode": {
            "title": "Incremental monitoring",
            "type": "boolean",
            "description": "Remember what previous runs saw and emit only new, updated or reappeared jobs. The first run stores a baseline; later runs typically emit 80-95% fewer records, and you pay only for those.",
            "default": false
          },
          "stateKey": {
            "title": "Monitoring state key",
            "type": "string",
            "description": "Name the baseline this run compares against. Leave empty to derive one from the searches and filters.",
            "default": ""
          },
          "emitUnchanged": {
            "title": "Also emit unchanged jobs",
            "type": "boolean",
            "description": "Also emit jobs that have not changed since the previous run.",
            "default": false
          },
          "emitExpired": {
            "title": "Also emit jobs that disappeared",
            "type": "boolean",
            "description": "Emit a record for every job that was in the baseline but is gone from this run's results.",
            "default": false
          },
          "skipReposts": {
            "title": "Skip reposts",
            "type": "boolean",
            "description": "Drop jobs that are an expired listing re-posted under a new ID.",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "POSTs the run summary and emitted jobs as JSON.",
            "default": ""
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Bot token from @BotFather. Stored encrypted."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "The chat or channel the Telegram bot should post into.",
            "default": ""
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "Discord channel webhook. Stored encrypted."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Slack incoming webhook. Stored encrypted."
          },
          "notifyOnlyChanges": {
            "title": "Only notify when something changed",
            "type": "boolean",
            "description": "Stay silent when a monitoring run finds nothing new.",
            "default": true
          },
          "notificationLimit": {
            "title": "Jobs listed per notification",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many jobs each notification lists before it summarises the rest.",
            "default": 10
          },
          "includeRunSummary": {
            "title": "Include the run summary in webhooks",
            "type": "boolean",
            "description": "Attach the run statistics (new, updated, expired counts) to the webhook payload.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxies are the default and the setting that works: measured on the platform, they delivered every search page and every job page without a block. Without a proxy, or on Apify's shared datacenter pool, Wellfound's bot protection blocks many job pages.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}