In a nutshell: The Rodz API exposes four HR-focused signal types that let you detect hiring activity, executive moves, hard-to-fill roles, and coordinated recruitment pushes. This guide covers each signal with cURL examples, webhook payloads, filtering strategies, and real-world use cases so you can turn workforce data into pipeline.
What Are HR Signals and Why Do They Matter?
Every company broadcasts intent through its people decisions. A startup posting ten engineering roles is scaling its product. A mid-market firm republishing the same sales manager position for the third time can’t fill it. A new CRO joining a Series B company is about to re-evaluate every tool in the revenue stack. Fifteen open roles across five departments in two weeks isn’t normal hiring, it’s a coordinated growth push with fresh budget behind it.
These are HR signals, and they’re some of the strongest leading indicators of buyer intent available to B2B sales and marketing teams. Financial signals arrive quarterly. Annual reports land months after decisions are made. HR signals fire within hours. They tell you what a company is doing right now and, more usefully, what it’s about to need.
The Rodz API groups these workforce events into four signal types: job-offers, job-changes, republished-job-offers, and recruitment-campaign. Each captures a different facet of a company’s talent strategy, and together they give you a complete picture of HR-driven buyer intent.
This guide covers all four. For each one you’ll learn what it detects, when it matters most, how to configure it via the API, what the webhook payload looks like, and how to build a prospecting workflow around it. If you’re new to the Rodz API, start with Getting Started: Authentication and Your First Request before continuing here.
Prerequisites
Before working with HR signals, make sure you have the following in place:
- A Rodz account with API access enabled. Register at app.rodz.io if you haven’t already.
- Your API key, generated from the Rodz dashboard. See the authentication guide for step-by-step instructions.
- A webhook endpoint configured and verified. HR signals are most useful when delivered in real time. Follow the webhook setup guide to get your endpoint running.
- At least one signal configuration created previously, or familiarity with the configuration workflow. The signal configuration guide covers the basics.
- cURL installed on your machine (macOS and Linux ship with it; Windows users can use Git Bash or WSL).
- A defined ICP (Ideal Customer Profile) so you can set meaningful filters for industry, geography, company size, and department.
Set your API key as an environment variable to keep the examples clean:
export RODZ_API_KEY="your_api_key_here"
All examples below use the base URL https://api.rodz.io/v1. Refer to the full API reference for rate limits, pagination, and error handling details.
Signal 1: Job Offers
What It Detects
The job-offers signal fires when a company publishes a new job posting on major job boards, career pages, or professional networks. The Rodz API aggregates listings from hundreds of sources, deduplicates them, and enriches each posting with structured metadata: job title, department, seniority level, location, contract type, and the publishing company’s firmographic data.
This isn’t a simple RSS feed of job boards. The underlying crawling infrastructure, powered by platforms like Apify, normalizes titles so “Head of Growth” and “VP Growth” are categorized consistently, maps postings to departments, and attaches them to the correct company entity even when subsidiary names differ from the parent brand.
When to Use It
Job offers work for a wide range of B2B sales motions:
- Selling recruitment software or staffing services? Every job offer is a direct lead.
- Selling SaaS to a specific department? Filter for postings in that department. A company hiring three data engineers probably needs data tooling.
- Tracking competitor hiring patterns? Monitor what roles competitors are filling to anticipate their product roadmap.
- Building account-based marketing lists? Companies hiring at volume are growing, and growing companies buy.
The canonical question is: “I want to contact a company when it posts three or more sales roles.” That’s exactly what this signal answers.
Configuring the Signal
Create a job-offers signal configuration with filters for department, geography, and minimum posting volume:
curl -X POST https://api.rodz.io/v1/signals/configurations \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signal_type": "job-offers",
"name": "SaaS targets hiring in sales",
"filters": {
"departments": ["sales", "business-development"],
"countries": ["FR", "BE", "DE"],
"company_size": {
"min": 50,
"max": 500
},
"min_offers": 3
},
"active": true
}'
This configuration says: notify me whenever a company with 50 to 500 employees in France, Belgium, or Germany publishes at least three job offers in sales or business development. The min_offers threshold filters out isolated replacement hires and focuses on companies that are genuinely scaling a team.
Webhook Payload
When the signal triggers, your webhook endpoint receives a payload like this:
{
"signal_type": "job-offers",
"signal_id": "sig_jof_8a3c1e9b",
"triggered_at": "2026-03-06T09:14:22Z",
"configuration_id": "cfg_4f2a7d1c",
"company": {
"id": "comp_9e7b3f2a",
"name": "Acme SaaS",
"domain": "acmesaas.com",
"industry": "Software",
"employee_count": 210,
"country": "FR",
"city": "Paris"
},
"data": {
"offers_count": 5,
"departments": ["sales", "business-development"],
"offers": [
{
"title": "Account Executive - Mid Market",
"department": "sales",
"seniority": "mid",
"location": "Paris, France",
"contract_type": "full-time",
"published_at": "2026-03-05T14:00:00Z",
"source_url": "https://jobs.example.com/ae-mid-market"
},
{
"title": "SDR Team Lead",
"department": "business-development",
"seniority": "senior",
"location": "Paris, France",
"contract_type": "full-time",
"published_at": "2026-03-04T10:30:00Z",
"source_url": "https://jobs.example.com/sdr-team-lead"
}
]
}
}
The payload includes the full company object with firmographic data, the total number of matching offers, and an array of individual postings with structured fields. You can use this data to enrich your CRM records, trigger outreach, or route leads to the right sales rep based on geography or company size.
Use Case: Selling Sales Enablement Software
You sell a sales enablement platform. Your ICP is mid-market SaaS companies in Europe that are actively building out their sales team. Configure the job-offers signal to watch for companies posting three or more sales roles. When the signal fires, your automation creates a contact in your CRM, enriches it with the hiring manager’s details using a tool like Fullenrich, and sends a single personalized message referencing their specific open roles. No follow-up sequence needed. The context is enough.
Signal 2: Job Changes
What It Detects
The job-changes signal fires when a tracked individual changes companies or roles. It monitors professional network updates and public announcements to detect when decision-makers move to new positions. The API returns both the person’s previous role and their new one, along with full company details for both origin and destination.
This signal is useful because people bring their preferences with them. A VP of Marketing who used a competitor’s product at their last company might be open to switching now. A CTO who was your champion at a previous account just landed at a new target company with budget to spend.
When to Use It
Job changes are among the highest-converting signal types for outbound sales:
- Re-engaging former champions. When a contact who used your product moves to a new company, they’re your warmest lead at that account.
- Targeting new decision-makers. A freshly appointed Head of IT is likely evaluating the entire tech stack. The first 90 days in a new role are when most purchasing decisions get made.
- Monitoring competitor accounts. When a key stakeholder leaves a competitor’s customer, the replacement may reconsider the vendor relationship.
- Tracking industry movements. Senior hires at target accounts reveal strategic priorities.
Configuring the Signal
Create a job-changes signal configuration that monitors C-level and VP-level movements in your target market:
curl -X POST https://api.rodz.io/v1/signals/configurations \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signal_type": "job-changes",
"name": "C-level and VP moves in target accounts",
"filters": {
"seniority_levels": ["c-level", "vp", "director"],
"departments": ["sales", "marketing", "operations"],
"destination_countries": ["FR", "BE", "NL", "DE"],
"destination_company_size": {
"min": 100,
"max": 2000
}
},
"active": true
}'
This watches for directors, VPs, and C-level executives moving into sales, marketing, or operations roles at mid-market companies in Western Europe. The destination_ prefix on filters ensures you’re filtering on where the person is going, not where they came from.
Webhook Payload
{
"signal_type": "job-changes",
"signal_id": "sig_jch_2d4f6a8c",
"triggered_at": "2026-03-06T11:32:07Z",
"configuration_id": "cfg_7b9e1c3a",
"person": {
"name": "Marie Dupont",
"linkedin_url": "https://linkedin.com/in/mariedupont",
"previous_role": {
"title": "Head of Revenue Operations",
"company": {
"name": "OldCorp",
"domain": "oldcorp.com",
"industry": "Financial Services",
"employee_count": 350
},
"started_at": "2023-06-01",
"ended_at": "2026-02-28"
},
"new_role": {
"title": "VP of Sales Operations",
"company": {
"id": "comp_3a5c7e9f",
"name": "GrowthTech",
"domain": "growthtech.io",
"industry": "Software",
"employee_count": 420,
"country": "FR",
"city": "Lyon"
},
"started_at": "2026-03-01"
}
}
}
The payload gives you both sides of the move: where the person came from, what they did there, and where they landed. That context matters when you’re writing an opening line. Referencing someone’s career move directly improves response rates compared to a generic cold email with no context.
Use Case: Champion tracking for account expansion
Your CRM contains 200 contacts who are active users or past champions of your product. Upload this list to the Rodz API and configure a job-changes signal filtered to those individuals. When one of them moves to a new company, your system creates an opportunity in your CRM tagged as “champion-moved” and alerts the account executive. The AE reaches out in the first week of the person’s new role, referencing the move and offering to help set up the tool they already know.
Signal 3: Republished Job Offers
What It Detects
The republished-job-offers signal fires when a job posting that previously expired or was taken down reappears on job boards. That’s a different event from a new posting. A republished role means the company either couldn’t fill the position the first time around, the initial hire didn’t work out, or the role has become more urgent.
The API tracks the history of each posting, so it can tell a genuinely new listing from a recycled one. It provides metadata on how many times the role has been published, the gaps between postings, and any changes in the job description between versions.
When to Use It
Republished job offers are a niche but high-value signal, especially for:
- Recruitment agencies and staffing firms. A republished role is a company signaling it needs help. That’s about as close to an inbound lead as outbound gets.
- HR tech vendors. If a company keeps failing to fill roles, they may need better recruitment tools, employer branding, or compensation benchmarking.
- Training and upskilling platforms. Repeatedly unfilled roles in specialized fields like data science or cybersecurity often point to a skills gap that training could address.
- Consulting firms. Hard-to-fill roles frequently point to organizational or process problems.
Configuring the Signal
curl -X POST https://api.rodz.io/v1/signals/configurations \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signal_type": "republished-job-offers",
"name": "Repeatedly unfilled tech roles",
"filters": {
"departments": ["engineering", "data", "product"],
"countries": ["FR", "DE", "NL"],
"min_republish_count": 2,
"company_size": {
"min": 50,
"max": 1000
}
},
"active": true
}'
The min_republish_count filter is key. Setting it to 2 means the role must have been published at least three times total (original plus two republications). This filters out one-time reposts that might just be administrative refreshes.
Webhook Payload
{
"signal_type": "republished-job-offers",
"signal_id": "sig_rjof_5e7g9i1k",
"triggered_at": "2026-03-06T14:45:33Z",
"configuration_id": "cfg_2d4f6h8j",
"company": {
"id": "comp_1b3d5f7h",
"name": "DataScale",
"domain": "datascale.eu",
"industry": "Software",
"employee_count": 180,
"country": "DE",
"city": "Berlin"
},
"data": {
"offer": {
"title": "Senior Data Engineer",
"department": "data",
"seniority": "senior",
"location": "Berlin, Germany",
"contract_type": "full-time"
},
"publish_history": [
{
"published_at": "2025-11-10T09:00:00Z",
"expired_at": "2025-12-10T09:00:00Z"
},
{
"published_at": "2026-01-05T09:00:00Z",
"expired_at": "2026-02-05T09:00:00Z"
},
{
"published_at": "2026-03-06T09:00:00Z",
"expired_at": null
}
],
"total_publish_count": 3,
"days_since_first_publish": 116,
"description_changed": true
}
}
The publish_history array gives you a complete timeline. You can see how long the company has been struggling to fill this role. The description_changed flag tells you whether they modified the job description between attempts, which usually means they adjusted requirements or compensation after failing to attract candidates.
Use Case: Recruitment agency lead generation
You run a recruitment agency specializing in tech talent. Configure the republished-job-offers signal for engineering, data, and product roles in your target geographies. When a company republishes a role for the second time, your automation sends a personalized email to the hiring manager: “I noticed you’ve been looking for a Senior Data Engineer since November. We have pre-vetted candidates in Berlin who might be a fit. Would a quick call make sense?” Referencing the exact role and timeline makes that message land differently than a generic agency pitch.
Signal 4: Recruitment Campaign
What It Detects
The recruitment-campaign signal fires when a company launches a coordinated hiring push across multiple roles and departments. Unlike the job-offers signal, which triggers on individual postings, this one identifies the broader pattern. It analyzes posting velocity, departmental spread, and timing to determine when a company has moved from occasional hiring to a strategic recruitment campaign.
The API considers the number of roles posted within a time window, the diversity of departments involved, and how the current posting rate compares to the company’s historical baseline. A company that normally posts two roles per month and suddenly publishes fifteen in a week is exhibiting campaign behavior.
When to Use It
Recruitment campaigns are a strong growth signal with broad applicability:
- Enterprise software sales. A company hiring across sales, engineering, and customer success simultaneously is scaling fast and likely evaluating its entire tech stack.
- Office space and facilities. Mass hiring means the company will need more physical space, furniture, and services.
- IT infrastructure providers. Dozens of new employees mean new laptops, accounts, security configurations, and network capacity.
- HR and People Ops platforms. A company doubling its headcount needs better tooling to manage onboarding, payroll, and culture at scale.
- Payroll and benefits providers. Rapid headcount growth creates immediate needs for scalable payroll solutions.
Configuring the Signal
curl -X POST https://api.rodz.io/v1/signals/configurations \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signal_type": "recruitment-campaign",
"name": "Aggressive hiring campaigns in target market",
"filters": {
"countries": ["FR", "BE", "DE", "NL"],
"company_size": {
"min": 100,
"max": 5000
},
"min_roles": 10,
"min_departments": 3,
"time_window_days": 14
},
"active": true
}'
This configuration triggers when a company with 100 to 5,000 employees posts at least 10 roles across at least 3 departments within a 14-day window. Combining min_roles, min_departments, and time_window_days ensures you’re capturing genuine campaigns rather than a busy week in one department.
Webhook Payload
{
"signal_type": "recruitment-campaign",
"signal_id": "sig_rc_7i9k1m3o",
"triggered_at": "2026-03-06T16:20:11Z",
"configuration_id": "cfg_6h8j0l2n",
"company": {
"id": "comp_4f6h8j0l",
"name": "ScaleUp Industries",
"domain": "scaleupindustries.com",
"industry": "Manufacturing",
"employee_count": 850,
"country": "FR",
"city": "Toulouse"
},
"data": {
"campaign_summary": {
"total_roles": 18,
"departments": ["engineering", "sales", "customer-success", "operations", "hr"],
"department_count": 5,
"time_window_start": "2026-02-24T00:00:00Z",
"time_window_end": "2026-03-06T16:20:11Z",
"avg_monthly_postings_baseline": 3
},
"top_roles": [
{
"title": "DevOps Engineer",
"department": "engineering",
"count": 3
},
{
"title": "Account Manager",
"department": "sales",
"count": 4
},
{
"title": "Customer Success Manager",
"department": "customer-success",
"count": 2
}
]
}
}
The campaign_summary gives you the big picture: 18 roles across 5 departments in 10 days, against a baseline of 3 postings per month. The top_roles array shows where the heaviest hiring is concentrated, so you can tailor your outreach to the specific growth areas rather than sending something generic about “your growth.”
Use Case: IT infrastructure provider
You sell endpoint management and device provisioning solutions. A recruitment campaign signal fires for a manufacturing company in Toulouse that just posted 18 roles in two weeks. Your system calculates that 18 new hires means roughly 18 new laptops, 18 new user accounts, and a significant onboarding burden for the IT team. Your outreach references the hiring push directly: “Congrats on the growth. Onboarding 18 new employees in a short window is a lot of IT provisioning work. Our platform automates device setup, account creation, and security policy enforcement so your IT team can focus on higher-value work.”
Combining HR Signals for Maximum Impact
Each HR signal type is useful on its own, but the real value comes from stacking them. When multiple signals converge on the same company, the context is richer and your outreach is far more specific.
Signal stacking strategies
Job Offers + Recruitment Campaign. Use the recruitment campaign signal to identify companies in growth mode, then use job offers to identify which roles and departments are driving the expansion. This lets you target the right buyer persona within the account.
Job Changes + Job Offers. A new VP of Engineering just joined a company (job-change signal) and the company simultaneously posts five engineering roles (job-offers signal). The new leader is building their team. Your outreach to the VP can reference both: their recent move and the team they’re assembling.
Republished Job Offers + Recruitment Campaign. A company is running a hiring campaign but some roles keep reappearing. Growth ambition with execution problems. That’s an ideal prospect for recruitment agencies, HR tech, or employer branding services.
Job Changes at Existing Customers. Monitor your current customer contacts for job changes. When a champion leaves, you have an early churn-risk warning at their old company and a warm expansion opportunity at their new one.
Building a multi-signal workflow
Here’s a practical example of a multi-signal pipeline:
- Layer 1: Recruitment Campaign identifies companies in growth mode. Broadest filter.
- Layer 2: Job Offers narrows focus to companies hiring in departments relevant to your product.
- Layer 3: Job Changes watches for new decision-makers at those companies.
- Layer 4: Republished Job Offers flags the subset struggling with specific hires, adding urgency to the context.
Configure all four signal types through the API, point their webhooks at the same endpoint, and build routing logic that scores accounts based on signal convergence. A company that crosses all four signals in the same month is a higher-priority target than one that only triggered a single job offer.
Your webhook handler can aggregate signals by company domain and calculate a composite intent score:
# Fetch all recent signals for a specific company
curl -X GET "https://api.rodz.io/v1/signals?company_domain=scaleupindustries.com&since=2026-02-01" \
-H "Authorization: Bearer $RODZ_API_KEY"
This returns every signal that fired for that company in the given time range, across all signal types. You can use this data to build account-level dashboards in your CRM or feed it into lead scoring models.
Routing signals to the right team
Not all HR signals should go to the same team. Consider routing based on signal type and your organizational structure:
- Job Offers and Recruitment Campaigns go to SDRs for outbound prospecting.
- Job Changes go to AEs for warm outreach to known contacts, or to marketing for ABM campaign enrollment.
- Republished Job Offers go to a specialized team, partnership managers at a recruitment agency, for example.
The webhook setup guide covers how to configure multiple webhook endpoints for different signal types.
Frequently Asked Questions
How quickly does the job-offers signal fire after a posting goes live?
The Rodz API scans major job boards and career pages continuously. Most new postings are detected within 2 to 6 hours of publication. The exact latency depends on the source. Major platforms like LinkedIn and Indeed are scanned more frequently than niche industry job boards. Once detected, the signal is processed, deduplicated, and delivered to your webhook within minutes.
Can I track specific people with the job-changes signal?
Yes. You can provide a list of LinkedIn profile URLs or email addresses when creating a job-changes configuration. The API will monitor those specific individuals and notify you when any of them update their professional profile with a new role. This is the basis of champion tracking workflows. There’s no hard limit on list size, but very large lists (10,000+ contacts) may require a higher-tier API plan for processing capacity.
What is the difference between job-offers and recruitment-campaign?
The job-offers signal fires at the individual posting level. If a company publishes five roles that match your filters, you receive a signal with five offers attached. The recruitment-campaign signal fires at the pattern level. It analyzes posting velocity, departmental breadth, and historical baselines to determine when a company has shifted from normal hiring to a strategic recruitment push. You can use both simultaneously. Job offers give you granular detail; recruitment campaigns give you the strategic context.
How does the API distinguish a republished job offer from a new one?
The API uses a combination of signals: job title, company, location, and description similarity. When a posting appears that closely matches a recently expired one from the same company, the system flags it as republished rather than new. The matching algorithm accounts for minor edits like updated salary ranges or tweaked requirements and still classifies the posting correctly. The description_changed field in the webhook payload tells you whether the company modified the listing between publications.
Can I filter job-offers by specific job titles or keywords?
Yes. The filters object accepts a title_keywords array that supports both inclusion and exclusion patterns. You can include roles containing “data engineer” or “machine learning” while excluding those containing “intern” or “junior.” This keyword filtering works alongside the department and seniority filters for precise targeting.
curl -X POST https://api.rodz.io/v1/signals/configurations \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signal_type": "job-offers",
"name": "Senior data roles only",
"filters": {
"title_keywords": {
"include": ["data engineer", "data scientist", "ML engineer"],
"exclude": ["intern", "junior", "stage"]
},
"seniority_levels": ["mid", "senior", "lead"],
"countries": ["FR"]
},
"active": true
}'
What happens if the same person triggers multiple job-changes signals?
If a monitored contact changes roles more than once, the API fires a new signal each time. Each signal includes the full transition history so you can see the progression. The API deduplicates based on actual role changes and ignores profile updates that don’t involve a genuine company or title change, such as updating a profile photo or adding a certification.
Are HR signals available for all countries?
The Rodz API has the strongest coverage in Western Europe (France, Germany, Benelux, UK, Nordics) and North America. Coverage for other regions is growing. The API reference documentation includes a complete list of supported countries with coverage depth ratings. You can always set country filters in your configurations, and the API will only deliver signals where it has reliable data.
How do I avoid duplicate signals when using multiple HR signal types?
Each signal type operates independently. A single company might trigger a job-offers signal and a recruitment-campaign signal from the same batch of postings. These aren’t duplicates; they represent different levels of analysis. Your webhook handler should aggregate signals by company and signal type. Use the company.id field to match events across signal types and build a unified account-level view. The webhook guide includes a deduplication pattern you can adapt to your stack.
HR signals are among the most actionable data points available for B2B prospecting. They capture real-time context that financial data and firmographic data can’t match. Configure the four signal types covered here, combine them with routing and scoring logic, and you get a prospecting pipeline that surfaces high-intent accounts well before a static database export would even reflect the change. Explore the full API documentation and set up your first HR signal configuration to get started.