Jobs & Hiring Activity Integration¶
Understand company hiring activity to prioritize leads and personalize outreach.
Overview¶
The Jobs API provides insights into a company's hiring activity, helping you:
- Prioritize leads based on hiring velocity (actively recruiting companies are more likely to be in growth mode)
- Identify buyer signals (hiring for roles that use your product)
- Personalize outreach with references to specific job postings
- Track market trends across your target accounts
How It Works¶
graph LR
A[Company ID] --> B{Jobs API}
B --> C[Job Listings]
B --> D[Activity Metrics]
C --> E[Title, Location, Platform]
D --> F[Velocity, Strength]
- Get a Company ID from the delivered companies endpoint
- Query Jobs API with optional filters (days_back, platform)
- Receive hiring metrics including activity strength and job listings
Endpoints¶
| Endpoint | Description | Use Case |
|---|---|---|
GET /companies/{id}/jobs |
Full job listings with pagination | Detailed analysis, CRM enrichment |
GET /companies/{id}/jobs/summary |
Lightweight metrics + latest job | Quick overview, activity widgets |
Activity Strength Levels¶
OpenProspect calculates hiring activity strength based on posting velocity (jobs per month):
| Level | Threshold | Description |
|---|---|---|
STRONG |
>= 3.0 jobs/month | Actively recruiting - high growth signal |
MODERATE |
>= 1.5 jobs/month | Steady hiring - stable growth |
LIGHT |
>= 0.5 jobs/month | Occasional hiring |
NONE |
< 0.5 jobs/month | Minimal activity |
Get Job Listings¶
Retrieve job postings for a company with activity metrics and pagination.
Request¶
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
days_back |
integer | 30 | Days to look back (1-365) |
platform |
string | null | Filter by platform (linkedin, indeed, stepstone) |
limit |
integer | 50 | Results per page (1-200) |
offset |
integer | 0 | Results to skip |
Code Examples¶
import httpx
API_KEY = "lnc_live_your_api_key_here"
BASE_URL = "https://api.openprospect.io/api/v1"
company_id = "a45e6452-496e-4bb3-86a0-3c99475c0fc3"
response = httpx.get(
f"{BASE_URL}/companies/{company_id}/jobs",
params={"days_back": 30, "limit": 50},
headers={"Authorization": f"Bearer {API_KEY}"}
)
data = response.json()
print(f"Activity: {data['activity_strength']} ({data['velocity_per_month']:.1f} jobs/month)")
print(f"Total jobs: {data['total']}")
for job in data["items"]:
print(f" - {job['title']} ({job['location']})")
print(f" Platforms: {', '.join(job['platforms_listed'])}")
const API_KEY = "lnc_live_your_api_key_here";
const BASE_URL = "https://api.openprospect.io/api/v1";
const companyId = "a45e6452-496e-4bb3-86a0-3c99475c0fc3";
const response = await fetch(
`${BASE_URL}/companies/${companyId}/jobs?days_back=30&limit=50`,
{ headers: { "Authorization": `Bearer ${API_KEY}` } }
);
const data = await response.json();
console.log(`Activity: ${data.activity_strength} (${data.velocity_per_month.toFixed(1)} jobs/month)`);
console.log(`Total jobs: ${data.total}`);
for (const job of data.items) {
console.log(` - ${job.title} (${job.location})`);
console.log(` Platforms: ${job.platforms_listed.join(", ")}`);
}
const API_KEY = "lnc_live_your_api_key_here";
const BASE_URL = "https://api.openprospect.io/api/v1";
interface JobListing {
id: string;
title: string;
platforms_listed: string[];
platform_urls: Record<string, string>;
last_seen_at: string;
date_posted?: string;
location?: string;
start_date?: string;
}
interface CompanyJobsResponse {
items: JobListing[];
total: number;
limit: number;
offset: number;
has_more: boolean;
activity_strength: "STRONG" | "MODERATE" | "LIGHT" | "NONE";
velocity_per_month: number;
}
const companyId = "a45e6452-496e-4bb3-86a0-3c99475c0fc3";
const response = await fetch(
`${BASE_URL}/companies/${companyId}/jobs?days_back=30&limit=50`,
{ headers: { "Authorization": `Bearer ${API_KEY}` } }
);
const data: CompanyJobsResponse = await response.json();
console.log(`Activity: ${data.activity_strength} (${data.velocity_per_month.toFixed(1)} jobs/month)`);
for (const job of data.items) {
console.log(` - ${job.title} (${job.location ?? "Remote"})`);
}
using System.Net.Http.Headers;
using System.Text.Json;
var apiKey = "lnc_live_your_api_key_here";
var baseUrl = "https://api.openprospect.io/api/v1";
var companyId = "a45e6452-496e-4bb3-86a0-3c99475c0fc3";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", apiKey);
var response = await client.GetAsync(
$"{baseUrl}/companies/{companyId}/jobs?days_back=30&limit=50");
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
PropertyNameCaseInsensitive = true
};
var data = JsonSerializer.Deserialize<CompanyJobsResponse>(json, options);
Console.WriteLine($"Activity: {data.ActivityStrength} ({data.VelocityPerMonth:F1} jobs/month)");
Console.WriteLine($"Total jobs: {data.Total}");
foreach (var job in data.Items)
{
Console.WriteLine($" - {job.Title} ({job.Location ?? "Remote"})");
Console.WriteLine($" Platforms: {string.Join(", ", job.PlatformsListed)}");
}
}
// Response classes
public record CompanyJobsResponse(
List<JobListing> Items,
int Total,
int Limit,
int Offset,
bool HasMore,
string ActivityStrength,
double VelocityPerMonth
);
public record JobListing(
string Id,
string Title,
List<string> PlatformsListed,
Dictionary<string, string> PlatformUrls,
DateTime LastSeenAt,
DateTime? DatePosted,
string? Location,
DateTime? StartDate
);
Example Response¶
{
"items": [
{
"id": "f8a12345-6789-4abc-def0-123456789abc",
"title": "Senior Software Engineer",
"platforms_listed": ["linkedin", "stepstone"],
"platform_urls": {
"linkedin": "https://www.linkedin.com/jobs/view/123456789",
"stepstone": "https://www.stepstone.de/stellenangebot/123456"
},
"last_seen_at": "2025-11-30T10:00:00Z",
"date_posted": "2025-11-25T09:00:00Z",
"location": "Munich, Germany",
"start_date": null
},
{
"id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"title": "Product Manager",
"platforms_listed": ["linkedin"],
"platform_urls": {
"linkedin": "https://www.linkedin.com/jobs/view/987654321"
},
"last_seen_at": "2025-11-29T14:30:00Z",
"date_posted": "2025-11-20T08:00:00Z",
"location": "Berlin, Germany",
"start_date": "2026-01-15T00:00:00Z"
}
],
"total": 12,
"limit": 50,
"offset": 0,
"has_more": false,
"activity_strength": "STRONG",
"velocity_per_month": 4.2
}
Get Job Activity Summary¶
Get lightweight hiring metrics with the most recently posted job. Ideal for quick overview widgets.
Request¶
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
days_back |
integer | 30 | Days to look back (1-365) |
platform |
string | null | Filter by platform |
Code Examples¶
response = httpx.get(
f"{BASE_URL}/companies/{company_id}/jobs/summary",
params={"days_back": 30},
headers={"Authorization": f"Bearer {API_KEY}"}
)
data = response.json()
print(f"Hiring Activity: {data['activity_strength']}")
print(f"Velocity: {data['velocity_per_month']:.1f} jobs/month")
print(f"Total Open Positions: {data['total']}")
if data.get("latest_job"):
job = data["latest_job"]
print(f"Latest: {job['title']} - {job['location']}")
const response = await fetch(
`${BASE_URL}/companies/${companyId}/jobs/summary?days_back=30`,
{ headers: { "Authorization": `Bearer ${API_KEY}` } }
);
const data = await response.json();
console.log(`Hiring Activity: ${data.activity_strength}`);
console.log(`Velocity: ${data.velocity_per_month.toFixed(1)} jobs/month`);
if (data.latest_job) {
console.log(`Latest: ${data.latest_job.title} - ${data.latest_job.location}`);
}
interface CompanyJobsSummaryResponse {
total: number;
activity_strength: "STRONG" | "MODERATE" | "LIGHT" | "NONE";
velocity_per_month: number;
latest_job?: JobListing;
}
const response = await fetch(
`${BASE_URL}/companies/${companyId}/jobs/summary?days_back=30`,
{ headers: { "Authorization": `Bearer ${API_KEY}` } }
);
const data: CompanyJobsSummaryResponse = await response.json();
console.log(`Hiring Activity: ${data.activity_strength}`);
console.log(`Velocity: ${data.velocity_per_month.toFixed(1)} jobs/month`);
if (data.latest_job) {
console.log(`Latest: ${data.latest_job.title}`);
}
var response = await client.GetAsync(
$"{baseUrl}/companies/{companyId}/jobs/summary?days_back=30");
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
PropertyNameCaseInsensitive = true
};
var data = JsonSerializer.Deserialize<CompanyJobsSummaryResponse>(json, options);
Console.WriteLine($"Hiring Activity: {data.ActivityStrength}");
Console.WriteLine($"Velocity: {data.VelocityPerMonth:F1} jobs/month");
if (data.LatestJob != null)
{
Console.WriteLine($"Latest: {data.LatestJob.Title} - {data.LatestJob.Location}");
}
}
public record CompanyJobsSummaryResponse(
int Total,
string ActivityStrength,
double VelocityPerMonth,
JobListing? LatestJob
);
Example Response¶
{
"total": 12,
"activity_strength": "STRONG",
"velocity_per_month": 4.2,
"latest_job": {
"id": "f8a12345-6789-4abc-def0-123456789abc",
"title": "Senior Software Engineer",
"platforms_listed": ["linkedin", "stepstone"],
"platform_urls": {
"linkedin": "https://www.linkedin.com/jobs/view/123456789",
"stepstone": "https://www.stepstone.de/stellenangebot/123456"
},
"last_seen_at": "2025-11-30T10:00:00Z",
"date_posted": "2025-11-25T09:00:00Z",
"location": "Munich, Germany",
"start_date": null
}
}
Use Cases¶
Lead Scoring Based on Hiring Activity¶
def calculate_lead_score(company: dict, jobs_data: dict) -> int:
"""Calculate lead score incorporating hiring activity."""
base_score = company.get("match_score", 0)
# Boost score based on hiring activity
activity_boost = {
"STRONG": 20,
"MODERATE": 10,
"LIGHT": 5,
"NONE": 0
}
hiring_boost = activity_boost.get(jobs_data["activity_strength"], 0)
return min(100, base_score + hiring_boost)
Finding Companies Hiring for Specific Roles¶
def find_companies_hiring_role(companies: list, role_keywords: list) -> list:
"""Find companies hiring for roles matching keywords."""
matches = []
for company in companies:
jobs = httpx.get(
f"{BASE_URL}/companies/{company['id']}/jobs",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()
for job in jobs["items"]:
if any(kw.lower() in job["title"].lower() for kw in role_keywords):
matches.append({
"company": company["name"],
"job_title": job["title"],
"job_url": list(job["platform_urls"].values())[0]
})
return matches
# Find companies hiring engineers
engineering_leads = find_companies_hiring_role(
delivered_companies,
["engineer", "developer", "architect"]
)
Next Steps¶
- WebTech Intel Integration - Understand company technology stacks
- Client Integration Guide - Full CRM sync workflow
- API Reference - Interactive API explorer