Hiring Velocity
Track company hiring pace with department breakdowns, location distribution, and historical trend analysis to identify growth signals.
Overview
Hiring Velocity measures how aggressively a company is hiring—and where that growth is focused.
We track open roles across 21M+ companies, computing hiring velocity as a percentage of current headcount and breaking it down by department, location, seniority, and contract type. Historical comparisons show whether hiring is accelerating, steady, or decelerating over 30/60/90 day windows.
The result: you can identify companies in growth mode, understand which departments have budget, and time outreach to moments when teams are actively building—not just maintaining.
Available Subtypes
| Subtype Enum | Category | Description |
|---|---|---|
hiringVelocity | hiring | Aggregate hiring metrics showing company hiring pace and breakdowns |
Signal Categories
Signals are organized into these categories:
| Category | Description |
|---|---|
hiring | Hiring activity metrics |
Schema
{
"signal_id": "28748077-b474-4365-8af6-0d7fbfc04d18",
"signal_type": "hiring-velocity",
"signal_subtype": "hiringVelocity",
"detected_at": "2025-12-21T11:00:06Z",
"association": "company",
"company": {
"name": "Hill's Pet Nutrition, Inc.",
"domain": "hillspet.com",
"linkedin_url": "linkedin.com/company/hill%27s-pet-nutrition",
"industries": [
"Pet Food Manufacturing"
],
"employee_count_low": 2,
"employee_count_high": 10
},
"data": {
"takeaway": "Hiring velocity: Very aggressive for a small company. When companies with < 100 employees have open roles exceeding 20% of current headcount, that's considered hyper-growth.",
"numberOfEmployees": 6,
"numberOfOpenRoles": 6,
"hiringVelocityPct": 100,
"historicalComparison": {
"rolesOpenedLast30d": 6,
"rolesOpenedPrev30d": 13,
"rolesOpenedPrev60d": 6,
"trend": "decelerating"
},
"departments": [
{
"category": "management",
"count": 15,
"pct": 250
},
{
"category": "sales",
"count": 14,
"pct": 233.3
},
{
"category": "finance",
"count": 5,
"pct": 83.3
},
{
"category": "operations",
"count": 4,
"pct": 66.7
},
{
"category": "engineering",
"count": 3,
"pct": 50
}
],
"locations": [
{
"category": "Tokyo, Japan",
"count": 4,
"pct": 66.7
},
{
"category": "Prague, Czechia",
"count": 3,
"pct": 50
},
{
"category": "Topeka, Kansas, United States",
"count": 2,
"pct": 33.3
}
],
"seniority": [
{
"category": "manager",
"count": 15,
"pct": 250
},
{
"category": "non_manager",
"count": 12,
"pct": 200
},
{
"category": "director",
"count": 1,
"pct": 16.7
}
]
}
}Field Reference
Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
signal_id | string (UUID) | ✓ | Unique identifier for this signal |
signal_type | string | ✓ | Always "hiring-velocity" |
signal_subtype | string | ✓ | Always "hiringVelocity" (hiringVelocity) |
detected_at | string (ISO 8601) | ✓ | Timestamp when signal was detected |
association | string | ✓ | Always "company" |
Company Object
| Field | Type | Required | Description |
|---|---|---|---|
company.name | string | ✓ | Company name |
company.domain | string | ✓ | Company website domain |
company.linkedin_url | string (URL) | LinkedIn company URL | |
company.industries | array[string] | Industry classifications | |
company.employee_count_low | integer | Lower bound of employee count | |
company.employee_count_high | integer | Upper bound of employee count |
Data Object
| Field | Type | Required | Description |
|---|---|---|---|
data.takeaway | string | Human-readable velocity context | |
data.numberOfEmployees | integer | Total employee count | |
data.numberOfOpenRoles | integer | Total open positions | |
data.hiringVelocityPct | float | Open roles as percentage of headcount | |
data.historicalComparison.rolesOpenedLast30d | integer | Roles opened in last 30 days | |
data.historicalComparison.rolesOpenedPrev30d | integer | Roles opened 30-60 days ago | |
data.historicalComparison.rolesOpenedPrev60d | integer | Roles opened 60-90 days ago | |
data.historicalComparison.trend | string | Trend direction based on historical comparison (accelerating, steady, decelerating) | |
data.departments | array[object] | Department breakdown with category, count, pct | |
data.departments[].category | string | Department category (see allowed values above) | |
data.departments[].count | integer | Number of open roles in this department | |
data.departments[].pct | float | Percentage of total open roles (may exceed 100% as roles can belong to multiple categories) | |
data.locations | array[object] | Location breakdown with category, count, pct | |
data.locations[].category | string | Location name (city, state, country) | |
data.locations[].count | integer | Number of open roles in this location | |
data.locations[].pct | float | Percentage of total open roles (may exceed 100% as roles can be in multiple locations) | |
data.seniority | array[object] | Seniority breakdown with category, count, pct | |
data.seniority[].category | string | Seniority level category (c_level, director, founder, head, manager, non_manager, owner, partner, president, vice_president) | |
data.seniority[].count | integer | Number of open roles at this seniority | |
data.seniority[].pct | float | Percentage of total open roles (may exceed 100% as roles can span multiple seniority levels) | |
data.contracts | array[object] | Contract type breakdown with category, count, pct | |
data.contracts[].category | string | Contract type (full time, part time, contract, remote, etc.) | |
data.contracts[].count | integer | Number of open roles with this contract type | |
data.contracts[].pct | float | Percentage of total open roles (may exceed 100% as roles can have multiple contract attributes) |
Coverage
- Refresh: Weekly
- Coverage: 21,000,000 companies
Updated 6 days ago
