{
  "openapi": "3.0.1",
  "info": {
    "title": "Hacker News Who is Hiring Scraper: Jobs, Emails & Salary",
    "description": "Scrape Hacker News \"Who is hiring?\" threads into clean rows: company, domain, roles, tech stack, remote, Latin America eligibility, salary, visa, contact emails and apply links. One row per post or per company. Optional email pattern with MX check.",
    "version": "0.1",
    "x-build-id": "PYoilZcs4SJVHW35r"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/oswaldocarabano~hn-who-is-hiring-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-oswaldocarabano-hn-who-is-hiring-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/oswaldocarabano~hn-who-is-hiring-scraper/runs": {
      "post": {
        "operationId": "runs-sync-oswaldocarabano-hn-who-is-hiring-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/oswaldocarabano~hn-who-is-hiring-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-oswaldocarabano-hn-who-is-hiring-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": {
          "outputType": {
            "title": "Output",
            "enum": [
              "posts",
              "companies"
            ],
            "type": "string",
            "description": "posts = one row per Hacker News post (charged per post). companies = one row per hiring company (by domain, or by name when no domain is found) that aggregates all its posts in the chosen months and filters: months it hired, number of posts, roles, stack, locations, remote and Latin America eligibility, salary range, contact emails, apply links, ATS, funding stage, YC batch and its latest post (charged per company). Filters apply to the posts before they are grouped.",
            "default": "posts"
          },
          "months": {
            "title": "Months",
            "type": "array",
            "description": "Monthly threads to read, as 2026-10, \"October 2026\", \"latest\" or \"latest-1\" (the month before the latest; handy for scheduled runs). Empty = the latest month only. Threads exist from 2011-04; recent months have 100–410 company posts each (measured on 1 Oct 2026).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeWhoWantsToBeHired": {
            "title": "Also read \"Who wants to be hired?\"",
            "type": "boolean",
            "description": "Adds the job-seeker thread of the same months (rows with postIntent = seeking-work). These are individuals: their emails, phone numbers and CV link are hidden unless you also enable \"Include personal emails\". Not read when Output is \"companies\" (job seekers are not companies).",
            "default": false
          },
          "includeFreelancer": {
            "title": "Also read \"Freelancer? Seeking freelancer?\"",
            "type": "boolean",
            "description": "Adds the freelancer thread of the same months. Its \"SEEKING WORK\" posts are individuals: their emails, phone numbers and CV link are hidden unless you also enable \"Include personal emails\". Note: the last freelancer thread was posted in October 2025 (measured on 1 Oct 2026), so recent months have none.",
            "default": false
          },
          "roleKeywords": {
            "title": "Role keywords",
            "type": "array",
            "description": "Keep posts whose role titles or first line contain any of these words (whole-word, case-insensitive), e.g. \"backend\", \"data engineer\", \"founding\". Empty = all roles.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "stack": {
            "title": "Tech stack",
            "type": "array",
            "description": "Keep posts that mention any of these technologies. Empty = any stack.",
            "items": {
              "type": "string",
              "enum": [
                "JavaScript",
                "TypeScript",
                "Python",
                "Go",
                "Rust",
                "Java",
                "Kotlin",
                "Scala",
                "Ruby",
                "Ruby on Rails",
                "PHP",
                "Laravel",
                "Elixir",
                "Phoenix",
                "Erlang",
                "Haskell",
                "OCaml",
                "Clojure",
                "F#",
                "C#",
                ".NET",
                "C++",
                "C",
                "Zig",
                "Julia",
                "Lua",
                "Perl",
                "R",
                "Swift",
                "Objective-C",
                "Dart",
                "Flutter",
                "React",
                "React Native",
                "Next.js",
                "Vue",
                "Nuxt",
                "Angular",
                "Svelte",
                "Remix",
                "htmx",
                "Tailwind",
                "Node.js",
                "Deno",
                "Bun",
                "Django",
                "Flask",
                "FastAPI",
                "Spring",
                "Express",
                "NestJS",
                "GraphQL",
                "gRPC",
                "PostgreSQL",
                "MySQL",
                "SQLite",
                "MongoDB",
                "Redis",
                "Kafka",
                "RabbitMQ",
                "Elasticsearch",
                "ClickHouse",
                "Snowflake",
                "BigQuery",
                "DuckDB",
                "Spark",
                "Airflow",
                "dbt",
                "Databricks",
                "Pandas",
                "NumPy",
                "PyTorch",
                "TensorFlow",
                "JAX",
                "CUDA",
                "LLMs",
                "Ray",
                "vLLM",
                "Triton",
                "AWS",
                "GCP",
                "Azure",
                "Kubernetes",
                "Docker",
                "Terraform",
                "Ansible",
                "Linux",
                "Nix",
                "Bazel",
                "Temporal",
                "Supabase",
                "Firebase",
                "Cloudflare",
                "Vercel",
                "Prisma",
                "Electron",
                "WebAssembly",
                "WebRTC",
                "Unity",
                "Unreal",
                "ROS",
                "Verilog",
                "FPGA",
                "Solidity",
                "Ethereum",
                "Salesforce",
                "Figma",
                "iOS",
                "Android",
                "OpenTelemetry",
                "Postman"
              ]
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only posts that offer remote work (remote = true).",
            "default": false
          },
          "latamOnly": {
            "title": "Latin America eligible only",
            "type": "boolean",
            "description": "Keep only posts with a positive signal that someone in Latin America can apply: LATAM or a Latin American country/city in the location, or remote worldwide / Americas. See latamSignals for the evidence of each row.",
            "default": false
          },
          "withEmailOnly": {
            "title": "With a contact email only",
            "type": "boolean",
            "description": "Keep only posts that publish a contact email (after the privacy rules below).",
            "default": false
          },
          "inferEmailPattern": {
            "title": "Find the company email pattern (paid add-on)",
            "type": "boolean",
            "description": "For each company domain: email pattern (e.g. first.last@), confidence and evidence from the addresses posted on Hacker News, plus MX records and email provider checked by DNS. Charged once per domain and only when the pattern is backed by an observed address; guesses without evidence are delivered free and marked inferred = true. No email is ever sent and no mail server is probed (SMTP).",
            "default": false
          },
          "includePersonalEmails": {
            "title": "Include personal emails",
            "type": "boolean",
            "description": "Off by default. When off, emails on personal domains (gmail, outlook, yahoo, proton, icloud…) are removed from contactEmails and hidden in rawText/rawHtml, and job-seeker posts lose all their contact details. Turn on only if you have a lawful basis to process them.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many rows of the chosen output: posts, or companies. Each row is charged as one post or one company.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}