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 EnumCategoryDescription
hiringVelocityhiringAggregate hiring metrics showing company hiring pace and breakdowns

Signal Categories

Signals are organized into these categories:

CategoryDescription
hiringHiring 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

FieldTypeRequiredDescription
signal_idstring (UUID)✓Unique identifier for this signal
signal_typestring✓Always "hiring-velocity"
signal_subtypestring✓Always "hiringVelocity" (hiringVelocity)
detected_atstring (ISO 8601)✓Timestamp when signal was detected
associationstring✓Always "company"

Company Object

FieldTypeRequiredDescription
company.namestring✓Company name
company.domainstring✓Company website domain
company.linkedin_urlstring (URL)LinkedIn company URL
company.industriesarray[string]Industry classifications
company.employee_count_lowintegerLower bound of employee count
company.employee_count_highintegerUpper bound of employee count

Data Object

FieldTypeRequiredDescription
data.takeawaystringHuman-readable velocity context
data.numberOfEmployeesintegerTotal employee count
data.numberOfOpenRolesintegerTotal open positions
data.hiringVelocityPctfloatOpen roles as percentage of headcount
data.historicalComparison.rolesOpenedLast30dintegerRoles opened in last 30 days
data.historicalComparison.rolesOpenedPrev30dintegerRoles opened 30-60 days ago
data.historicalComparison.rolesOpenedPrev60dintegerRoles opened 60-90 days ago
data.historicalComparison.trendstringTrend direction based on historical comparison (accelerating, steady, decelerating)
data.velocityChangeobjectPercent change in new job openings over three windows. A window is null until enough weekly history exists
data.velocityChange.pct7dfloat | nullThis week's openings vs last week's (%)
data.velocityChange.pct30dfloat | nullAverage weekly openings over the last 4 weeks vs the 4 weeks before (%). Needs 8 weeks of history
data.velocityChange.pct90dfloat | nullAverage weekly openings over the last 13 weeks vs the 13 weeks before (%). Needs 26 weeks of history
data.netFlowRateobjectNet hiring flow (openings minus closures) as a percent of headcount
data.netFlowRate.pct7dfloat | nullNet flow this week, as % of headcount
data.netFlowRate.pct30dfloat | nullNet flow over the last 4 weeks, as % of headcount. Needs 4 weeks of history
data.netFlowRate.pct90dfloat | nullNet flow over the last 13 weeks, as % of headcount. Needs 13 weeks of history
data.netFlowRate.relevancefloat (0.0-1.0)Strength of this week's net flow: abs(pct7d) / 10, capped at 1.0
data.relevancefloat (0.1-1.0)How actionable the signal is. Based on headcount and open-role velocity, +0.10 when 30-day velocity rises more than 15%, -0.05 when it falls more than 15%, +0.05 when more than 5 departments hire. Rows are sorted by relevance, highest first
data.departmentsarray[object]Department breakdown with category, count, pct
data.departments[].categorystringDepartment category (see allowed values above)
data.departments[].countintegerNumber of open roles in this department
data.departments[].pctfloatPercentage of total open roles (may exceed 100% as roles can belong to multiple categories)
data.locationsarray[object]Location breakdown with category, count, pct
data.locations[].categorystringLocation name (city, state, country)
data.locations[].countintegerNumber of open roles in this location
data.locations[].pctfloatPercentage of total open roles (may exceed 100% as roles can be in multiple locations)
data.seniorityarray[object]Seniority breakdown with category, count, pct
data.seniority[].categorystringSeniority level category (c_level, director, founder, head, manager, non_manager, owner, partner, president, vice_president)
data.seniority[].countintegerNumber of open roles at this seniority
data.seniority[].pctfloatPercentage of total open roles (may exceed 100% as roles can span multiple seniority levels)
data.contractsarray[object]Contract type breakdown with category, count, pct
data.contracts[].categorystringContract type (full time, part time, contract, remote, etc.)
data.contracts[].countintegerNumber of open roles with this contract type
data.contracts[].pctfloatPercentage of total open roles (may exceed 100% as roles can have multiple contract attributes)

Coverage

  • Refresh: Weekly
  • Coverage: 21,000,000 companies

Did this page help you?