{
  "openapi": "3.0.1",
  "info": {
    "title": "Wellfound Jobs Scraper - Fast & Cheap, With Monitor Alerts",
    "description": "Extract Wellfound (formerly AngelList) startup jobs as JSON, CSV or Excel: salary and equity ranges, company size, stage, YC and investor badges, Glassdoor ratings, full descriptions. Search and job URLs. Monitor mode returns only new jobs. $3 per 1,000 jobs, $2 on paid plans.",
    "version": "0.2",
    "x-build-id": "jkxsPuIzDX4YvObHw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~wellfound-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-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/scrapersdelight~wellfound-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-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/scrapersdelight~wellfound-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-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": {
          "urls": {
            "title": "Wellfound URLs to scrape (test if they work in your Browser!)",
            "maxItems": 100,
            "type": "array",
            "description": "Wellfound URLs to scrape. Supported: role searches (/role/<role>, /role/r/<role> for remote), location searches (/location/<location>), role + location searches (/role/l/<role>/<location>), direct job URLs (/jobs/<id>-<slug>, or /company/<company>/jobs/<id>-<slug>), and company URLs (/company/<company>, /company/<company>/jobs — Wellfound puts these behind a Cloudflare security check; the run reports it and charges nothing). Any ?page= is ignored: pagination follows Page Limit. Leave empty to run the sample search below.",
            "items": {
              "type": "string",
              "pattern": "^https?://(www\\.)?wellfound\\.com/(location/[^/?#]+|role/l/[^/?#]+/[^/?#]+|role/r/[^/?#]+|role/[^/?#]+|company/[^/?#]+/jobs(/[^/?#]+)?|company/[^/?#]+|jobs/\\d+(-[^/?#]*)?)/?(\\?[^#]*)?(#.*)?$"
            }
          },
          "pageLimit": {
            "title": "Page Limit",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of pages to scrape per search URL (0 = unlimited, i.e. to the search's own last page). Each Wellfound page lists 20 startups with their open roles — measured 31 to 53 jobs per page on 2026-09-29.",
            "default": 1
          },
          "onlyRemoteJobs": {
            "title": "Only Remote Jobs",
            "type": "boolean",
            "description": "Search only for remote job opportunities. A role URL switches to Wellfound's own remote-only search (/role/r/<role>); on other URLs, jobs that are not remote are dropped before delivery and never charged.",
            "default": false
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "LAST_POSTED"
            ],
            "type": "string",
            "description": "Sort jobs by criteria. Currently only 'Most recent': each page's jobs are returned newest first (Wellfound's own search page has no sort parameter).",
            "default": "LAST_POSTED"
          },
          "monitorMode": {
            "title": "Monitor Mode",
            "type": "boolean",
            "description": "Enable monitor mode to only return new listings since last run. Only one URL allowed in monitor mode. The first run returns what it finds and stores it as the baseline; each later run returns only jobs not seen before. Use a low pageLimit (1-3) for efficient monitoring.",
            "default": false
          },
          "resetMonitorState": {
            "title": "Reset Monitor State",
            "type": "boolean",
            "description": "Reset stored monitoring state for all URLs (forces re-initialization: the next monitor run is a new baseline).",
            "default": false
          },
          "telegramUserId": {
            "title": "Telegram User ID",
            "type": "string",
            "description": "Optional: Your Telegram user ID for notifications (only used in monitor mode, only for new jobs). Get it from @userinfobot."
          },
          "telegramNotificationLimit": {
            "title": "Telegram Notification Limit",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of Telegram notifications per run (prevents spam). When there are more new jobs than this, the last message summarises how many more there are.",
            "default": 10
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many unique jobs across all URLs (0 = no cap; Page Limit still applies). Duplicates across pages are never counted or charged.",
            "default": 0
          },
          "fetchJobDetails": {
            "title": "Open each job page (adds website, funding, skills, visa, founders)",
            "type": "boolean",
            "description": "Adds one request per job to open its page on Wellfound, which carries the startup's own website, its funding card (amount raised, rounds, latest round), skills, visa sponsorship, relocation, perks, founders, the pay period and geo coordinates. Included in the per-job price. Slower, so off by default.",
            "default": false
          },
          "includeDescription": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "Wellfound ships the complete markdown job description on the search page at no extra request, typically 2-4 KB per job. Switch off for a lean dataset.",
            "default": true
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs that went live in the last N days. 0 = any age.",
            "default": 0
          },
          "onlyRecentlyFunded": {
            "title": "Only recently funded startups",
            "type": "boolean",
            "description": "Keep only jobs at startups carrying Wellfound's 'Recently funded' badge.",
            "default": false
          },
          "onlyYcFunded": {
            "title": "Only Y Combinator startups",
            "type": "boolean",
            "description": "Keep only jobs at startups carrying Wellfound's 'YC Funded' badge.",
            "default": false
          },
          "detailConcurrency": {
            "title": "Job page concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel job-page requests (job URLs and 'Open each job page'). Higher is faster but more likely to be rate-limited.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave empty to use Apify RESIDENTIAL proxies (US), which is what Wellfound needs. Supply your own proxy URLs or groups here to override."
          },
          "feedback": {
            "title": "Feedback to the maintainers",
            "type": "string",
            "description": "For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note is kept in the run's FEEDBACK record and relayed to the maintainers when relaying is switched on; it cannot change what this run returns."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}