{
  "openapi": "3.0.1",
  "info": {
    "title": "Hiring Intent Scraper – Companies Hiring & Hiring Signals",
    "description": "Companies hiring by role as company-level buying signals: open-role counts, momentum vs your last run, departments, seniority mix and role→intent tags (scaling outbound, building data team…). Multi-board coverage merged and deduped per company. Dataset-only, MCP-ready.",
    "version": "0.1",
    "x-build-id": "EGxQeGlW0l323vw6e"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/inovaflow~hiring-intent-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-inovaflow-hiring-intent-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/inovaflow~hiring-intent-scraper/runs": {
      "post": {
        "operationId": "runs-sync-inovaflow-hiring-intent-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/inovaflow~hiring-intent-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-inovaflow-hiring-intent-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",
        "required": [
          "roles"
        ],
        "properties": {
          "roles": {
            "title": "Roles that signal intent",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "description": "Job titles or keywords, one per line. Abbreviations are understood (SDR, BDR, AE, SRE, CSM…) and matched to their role family, so `SDR` also catches \"Sales Development Representative\". Boards return loosely related roles too — only postings whose TITLE matches the role family are counted.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "maxItems": 20,
            "type": "array",
            "description": "Cities, regions or countries to search in, one per line — e.g. `United States`, `Berlin, Germany`, `London`, `Sydney`. Each role is searched in each location. Leave empty with Remote only for a location-free search.",
            "items": {
              "type": "string"
            }
          },
          "postedWithin": {
            "title": "Posting window",
            "enum": [
              "day",
              "3days",
              "week",
              "2weeks",
              "month"
            ],
            "type": "string",
            "description": "Only count postings published inside this window. A shorter window = a sharper \"hiring right now\" signal; a longer one = fuller coverage of every company hiring the role.",
            "default": "month"
          },
          "seniority": {
            "title": "Seniority",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only postings at these levels (derived from the title). Empty = any level. Executive-level hires (VP, Head of, Director, Chief) are the strongest \"new function is being built\" signal.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior / entry",
                "Mid-level",
                "Senior",
                "Lead / Staff / Manager",
                "Executive (VP, Head of, Director, C-level)"
              ]
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote roles only",
            "type": "boolean",
            "description": "Count only remote postings.",
            "default": false
          },
          "companies": {
            "title": "Company watchlist (optional)",
            "maxItems": 500,
            "type": "array",
            "description": "Target accounts, one per line: company names (`Gong`), domains (`gong.io`), LinkedIn company URLs, or career-board handles (`greenhouse:stripe`, `lever:palantir`, `ashby:ramp`). When set, only these companies are reported, and their career pages are read directly for the full open-role picture. Leave empty to discover companies from the role searches.",
            "items": {
              "type": "string"
            }
          },
          "industries": {
            "title": "Industries (discovery filter)",
            "type": "array",
            "description": "Keep only companies whose reported industry contains one of these words, e.g. `software`, `saas`, `financial`, `health`. Companies with no reported industry are kept. Applies to discovery runs only.",
            "items": {
              "type": "string"
            }
          },
          "companySizes": {
            "title": "Company sizes (discovery filter)",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only companies in these headcount bands when a board reports the size. Companies with an unknown size are kept. Applies to discovery runs only.",
            "items": {
              "type": "string",
              "enum": [
                "1-10",
                "11-50",
                "51-200",
                "201-500",
                "501-1000",
                "1001-5000",
                "5001-10000",
                "10000+"
              ],
              "enumTitles": [
                "1–10",
                "11–50",
                "51–200",
                "201–500",
                "501–1,000",
                "1,001–5,000",
                "5,001–10,000",
                "10,000+"
              ]
            },
            "default": []
          },
          "hideStaffingAgencies": {
            "title": "Hide staffing agencies",
            "type": "boolean",
            "description": "Drop recruiting / staffing agencies — an agency posting a role for a client is not the client's buying signal. Turn off if agencies ARE your buyers.",
            "default": true
          },
          "useLinkedIn": {
            "title": "LinkedIn (public listings)",
            "type": "boolean",
            "description": "Public LinkedIn job listings — no login, no cookies. Uses residential proxy (included in Apify Proxy) for reliability.",
            "default": true
          },
          "useIndeed": {
            "title": "Indeed",
            "type": "boolean",
            "description": "Indeed job search in 60+ countries — also the source of company industry, headcount and website for the discovery filters and domain matching.",
            "default": true
          },
          "useCareerPages": {
            "title": "Company career pages",
            "type": "boolean",
            "description": "Read employer career pages directly (free, no proxy). For watchlisted companies this gives the complete open-role picture; for discovered companies the top ones are probed automatically to add the careers URL and total open roles.",
            "default": true
          },
          "useGoogleJobs": {
            "title": "Google for Jobs (20+ boards in one sweep)",
            "type": "boolean",
            "description": "Adds Google for Jobs, which aggregates 20+ boards and employer sites. Off by default because each result page uses Apify's Google SERP proxy (a few cents per role × location). Turn on for maximum coverage of smaller boards.",
            "default": false
          },
          "minMatchingRoles": {
            "title": "Minimum matching open roles per company",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Companies with fewer matching open roles than this are not reported (they are still remembered for momentum). Raise to 2–3 to keep only companies hiring the role in volume.",
            "default": 1
          },
          "maxCompanies": {
            "title": "Maximum companies to report",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on delivered company rows (highest signal score first). Also caps what you pay.",
            "default": 200
          },
          "includePostings": {
            "title": "Also export the underlying postings",
            "type": "boolean",
            "description": "Write every underlying job posting (title, company, location, posted date, board, URL) to a separate named dataset for drill-down. Its ID and URL are in the run's OUTPUT record. Off by default — company rows already carry up to 25 matching roles each.",
            "default": false
          },
          "watchId": {
            "title": "Watch ID (for momentum across runs)",
            "type": "string",
            "description": "Optional name for this watch, e.g. `outbound-us-q4`. Runs sharing a Watch ID share momentum state, so an agent can poll one watch with slightly different inputs. Leave empty to derive it from roles + locations + watchlist."
          },
          "maxJobsPerSearch": {
            "title": "Max postings per role × location × board",
            "minimum": 10,
            "maximum": 1000,
            "type": "integer",
            "description": "How many postings to read per role × location on each board before aggregating (newest first). Broad roles in big markets have 300+ postings a month, so a bigger budget = more companies and steadier momentum; the run reports the date its coverage stopped at. Board pages hold 10 (LinkedIn), 100 (Indeed) or 10 (Google) postings.",
            "default": 200
          },
          "maxCareerPageProbes": {
            "title": "Career pages to probe (discovery)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "In discovery runs, how many of the top companies get their Greenhouse / Lever / Ashby board probed for the careers URL and total open roles. Free, but each probe is up to three requests.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Concurrent board requests. Lower it if a board starts rate-limiting.",
            "default": 6
          },
          "proxyConfiguration": {
            "title": "Proxy for LinkedIn",
            "type": "object",
            "description": "Proxy used for the LinkedIn source (Indeed and career pages use Apify's datacenter proxy / direct requests). Apify residential proxy is recommended — LinkedIn rate-limits datacenter IPs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "apifyMcpConnector": {
            "title": "Run the board searches under another Apify account (MCP connector)",
            "type": "string",
            "description": "Optional. Connect an Apify MCP connector (Console → Settings → Integrations → MCP Connectors, server URL https://mcp.apify.com) and the board searches run as our published Actors under THAT account — for agencies billing a client, or to keep this run's own footprint minimal. Leave empty (the default) to run everything built in, on this run, with no nested Actor."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}