# ATS Hiring-Signal Aggregator (9 in one) (`straightforward_hydra/ats-hiring-signal-aggregator-9-in-one`) Actor

Company hiring intelligence across 9 ATS (Greenhouse, Lever, Ashby, Workable, Workday, SmartRecruiters, Recruitee, Teamtailor, Personio). Per-company signal or unified jobs. No key.

- **URL**: https://apify.com/straightforward\_hydra/ats-hiring-signal-aggregator-9-in-one.md
- **Developed by:** [Dev D](https://apify.com/straightforward_hydra) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## ATS Hiring-Signal Aggregator 📊

**One tool over 9 applicant-tracking systems. Turn any company's job board into a hiring signal — how many roles are open, in which departments and locations, how remote-friendly, and what they're hiring for. No API key, no proxy.**

Most companies run one of a handful of ATS platforms. This Actor speaks all the big public ones and normalizes them into **one schema**, so you can track a whole list of companies' hiring regardless of which system each uses:

**Greenhouse · Lever · Ashby · Workable · SmartRecruiters · Recruitee · Teamtailor · Personio · Workday**

Perfect for **sales & recruiting intelligence, competitor/market monitoring, investor due diligence, and talent CRMs** — a clean, public-data alternative to talent-insights products.

---

### Two modes

- **Hiring signal** (default) — one aggregated row **per company**: total open jobs, remote count & %, breakdown by department, employment type, country and location, a sample of current titles, and the latest posting date.
- **Unified jobs** — one row **per open job**, in a single schema across all 9 platforms (company, platform, title, department, location, remote, apply URL…).

### Input

Give each company as **`platform:identifier`**, where `identifier` is the board token / subdomain from that ATS's careers URL:

| Platform | Identifier is… | Example |
|---|---|---|
| `greenhouse` | token in `boards.greenhouse.io/<token>` | `greenhouse:stripe` |
| `lever` | company in `jobs.lever.co/<company>` | `lever:leverdemo` |
| `ashby` | board in `jobs.ashbyhq.com/<board>` | `ashby:ramp` |
| `workable` | subdomain in `apply.workable.com/<name>` | `workable:seeq` |
| `smartrecruiters` | company in `jobs.smartrecruiters.com/<Company>` (case-sensitive) | `smartrecruiters:Visa` |
| `recruitee` | subdomain in `<name>.recruitee.com` | `recruitee:bunq` |
| `teamtailor` | subdomain or full careers host | `teamtailor:career.teamtailor.com` |
| `personio` | subdomain in `<name>.jobs.personio.de` | `personio:personio` |
| `workday` | the **full** Workday careers URL | `workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite` |

Optional filters (applied before aggregation): **title keyword**, **department**, **location**, **remote only**.

#### Example — hiring signal for a set of companies

```json
{
  "companies": ["greenhouse:stripe", "lever:leverdemo", "ashby:ramp", "recruitee:bunq"],
  "mode": "signal"
}
````

#### Example — every open engineering job across companies

```json
{
  "companies": ["greenhouse:stripe", "ashby:ramp"],
  "mode": "jobs",
  "titleKeyword": "engineer"
}
```

### Output — hiring signal

```json
{
  "company": "bunq",
  "platform": "recruitee",
  "identifier": "bunq",
  "careers_url": "https://bunq.recruitee.com",
  "total_open_jobs": 19,
  "remote_jobs": 1,
  "remote_pct": 5.3,
  "departments": [
    { "name": "Support & Operations", "count": 6 },
    { "name": "Risk, Legal & Compliance", "count": 4 }
  ],
  "employment_types": [{ "name": "fulltime permanent", "count": 17 }],
  "countries": [{ "name": "Netherlands", "count": 12 }],
  "top_locations": [{ "name": "Amsterdam, Noord-Holland, Netherlands", "count": 10 }],
  "top_titles": ["Operational Risk Intern", "Backend Developer", "…"],
  "latest_posted_at": "2026-07-15T09:00:00Z"
}
```

### Run it on a schedule

Track a watchlist of companies daily/weekly to see who's ramping hiring, in which teams and geographies, and where remote roles are opening — pipe to a sheet, CRM, Slack or webhook.

### Notes & limitations

- **No API key, no proxy** — every source is a public ATS feed.
- Point it at the ATS a company actually uses; a company not on that platform (or with no open roles) is skipped gracefully, and one bad entry never fails the whole run.
- Remote is taken from the platform's own remote flag where present, otherwise inferred from the location text.
- Field coverage varies slightly by platform (e.g. some don't expose employment type); the unified schema fills what each source provides.
- Data source: each company's own public ATS job feed. Standalone single-platform scrapers are also available for each of the 9 systems.

***

#### Keywords

ATS, hiring intelligence, hiring signal, jobs aggregator, recruiting intelligence, talent intelligence, company hiring data, Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Teamtailor, Personio, job market data, competitor hiring, sales intelligence, recruitment analytics, talent sourcing, headcount growth, remote jobs.

# Actor input Schema

## `companies` (type: `array`):

One entry per company as `platform:identifier`. platform ∈ greenhouse, lever, ashby, workable, smartrecruiters, recruitee, teamtailor, personio, workday. identifier = the board token / subdomain from that ATS's careers URL — except **workday**, where identifier is the full careers URL. Examples: "greenhouse:stripe", "lever:leverdemo", "ashby:ramp", "workable:seeq", "smartrecruiters:Visa", "recruitee:bunq", "teamtailor:career.teamtailor.com", "personio:personio", "workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite".

## `mode` (type: `string`):

signal = one aggregated hiring-signal row per company (roles open, departments, locations, remote %). jobs = one unified row per open job.

## `titleKeyword` (type: `string`):

Only count/return jobs whose title contains this text, e.g. "engineer", "sales".

## `department` (type: `string`):

Only jobs whose department contains this text.

## `location` (type: `string`):

Only jobs whose location contains this text, e.g. "London", "United States".

## `remoteOnly` (type: `boolean`):

Only count/return remote jobs.

## `includeDescription` (type: `boolean`):

Include the full job description text in jobs mode (larger output).

## `maxJobsPerCompany` (type: `integer`):

Cap on jobs fetched per company (protects against very large boards).

## Actor input object example

```json
{
  "companies": [
    "greenhouse:stripe",
    "lever:leverdemo",
    "ashby:ramp",
    "workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
  ],
  "mode": "signal",
  "remoteOnly": false,
  "includeDescription": false,
  "maxJobsPerCompany": 2000
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companies": [
        "greenhouse:stripe",
        "lever:leverdemo",
        "ashby:ramp",
        "workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("straightforward_hydra/ats-hiring-signal-aggregator-9-in-one").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "companies": [
        "greenhouse:stripe",
        "lever:leverdemo",
        "ashby:ramp",
        "workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("straightforward_hydra/ats-hiring-signal-aggregator-9-in-one").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companies": [
    "greenhouse:stripe",
    "lever:leverdemo",
    "ashby:ramp",
    "workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
  ]
}' |
apify call straightforward_hydra/ats-hiring-signal-aggregator-9-in-one --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=straightforward_hydra/ats-hiring-signal-aggregator-9-in-one",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ATS Hiring-Signal Aggregator (9 in one)",
        "description": "Company hiring intelligence across 9 ATS (Greenhouse, Lever, Ashby, Workable, Workday, SmartRecruiters, Recruitee, Teamtailor, Personio). Per-company signal or unified jobs. No key.",
        "version": "0.1",
        "x-build-id": "2EkSiDIkfI6N3uCVS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/straightforward_hydra~ats-hiring-signal-aggregator-9-in-one/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-straightforward_hydra-ats-hiring-signal-aggregator-9-in-one",
                "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/straightforward_hydra~ats-hiring-signal-aggregator-9-in-one/runs": {
            "post": {
                "operationId": "runs-sync-straightforward_hydra-ats-hiring-signal-aggregator-9-in-one",
                "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/straightforward_hydra~ats-hiring-signal-aggregator-9-in-one/run-sync": {
            "post": {
                "operationId": "run-sync-straightforward_hydra-ats-hiring-signal-aggregator-9-in-one",
                "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": [
                    "companies"
                ],
                "properties": {
                    "companies": {
                        "title": "Companies (platform:identifier)",
                        "type": "array",
                        "description": "One entry per company as `platform:identifier`. platform ∈ greenhouse, lever, ashby, workable, smartrecruiters, recruitee, teamtailor, personio, workday. identifier = the board token / subdomain from that ATS's careers URL — except **workday**, where identifier is the full careers URL. Examples: \"greenhouse:stripe\", \"lever:leverdemo\", \"ashby:ramp\", \"workable:seeq\", \"smartrecruiters:Visa\", \"recruitee:bunq\", \"teamtailor:career.teamtailor.com\", \"personio:personio\", \"workday:https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "signal",
                            "jobs"
                        ],
                        "type": "string",
                        "description": "signal = one aggregated hiring-signal row per company (roles open, departments, locations, remote %). jobs = one unified row per open job.",
                        "default": "signal"
                    },
                    "titleKeyword": {
                        "title": "Title keyword",
                        "type": "string",
                        "description": "Only count/return jobs whose title contains this text, e.g. \"engineer\", \"sales\"."
                    },
                    "department": {
                        "title": "Department",
                        "type": "string",
                        "description": "Only jobs whose department contains this text."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Only jobs whose location contains this text, e.g. \"London\", \"United States\"."
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Only count/return remote jobs.",
                        "default": false
                    },
                    "includeDescription": {
                        "title": "Include description (jobs mode)",
                        "type": "boolean",
                        "description": "Include the full job description text in jobs mode (larger output).",
                        "default": false
                    },
                    "maxJobsPerCompany": {
                        "title": "Max jobs per company",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Cap on jobs fetched per company (protects against very large boards).",
                        "default": 2000
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
