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 in depth 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 is struggling to hire. A new CRO joining a Series B company is about to re-evaluate every tool in the revenue stack. A coordinated recruitment campaign across five departments signals aggressive growth and fresh budget.
These are HR signals, and they are some of the strongest leading indicators of buyer intent available to B2B sales and marketing teams. Unlike financial signals that arrive quarterly or annual reports that land months after decisions are made, HR signals fire in near real-time. They tell you what a company is doing right now and, more importantly, what it is about to need.
The Rodz API groups these workforce events into four distinct signal types: job-offers, job-changes, republished-job-offers, and recruitment-campaign. Each one captures a different facet of a company’s talent strategy. Together, they give you a comprehensive view of HR-driven buyer intent.
This guide walks through all four signal types. For each one, you will 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 concrete prospecting workflow around it. If you are new to the Rodz API, start with Getting Started: Authentication and Your First Request before diving in 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 have not 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 powerful when delivered in real time. Follow our 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 is not 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 are the most versatile HR signal. They work for virtually any B2B sales motion:
- 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 your competitors are filling to anticipate their product roadmap.
- Building account-based marketing lists? Companies hiring at volume are growing, and growing companies buy.
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 tells the API: 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 avoids noise from 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 sequences, 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 enrolls the account in a personalized outreach sequence that references their specific open roles.
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 the origin and destination companies.
This signal is particularly powerful because people bring their preferences with them. A VP of Marketing who used your competitor’s product at their last company might be open to switching. 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 one of the highest-converting signal types for outbound sales:
- Re-engaging former champions. When a contact who loved your product moves to a new company, they are 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 happen.
- 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 are filtering based 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. You know where the person came from, what they did there, and where they landed. This context is essential for crafting personalized outreach. Referencing someone’s career move in your opening line dramatically increases response rates compared to generic cold emails.
Use Case: Champion Tracking for Account Expansion
Your CRM contains a list of 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 automatically creates an opportunity in your CRM, tags it as “champion-moved,” and alerts the account executive. The AE reaches out within the first week of the person’s new role, congratulating them on the move and offering to help set up the tool they already know and trust.
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. This is a distinctly different event from a new posting. A republished role indicates that the company either could not fill the position the first time around, the initial hire did not work out, or the role has become more urgent.
The API tracks the history of each posting, so it can differentiate between a genuinely new listing and 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 that they need help filling a position. This is 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 (data science, cybersecurity) suggest a skills gap that training could address.
- Consulting firms. Hard-to-fill roles often point to organizational or process problems that consultants can solve.
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 here. 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 and focuses on genuinely problematic hires.
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 often 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 have 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?” The specificity of referencing the exact role and timeline makes this outreach significantly more effective than generic agency pitches.
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 signal 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 factors such as 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 suddenly publishing 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 rapidly and likely evaluating its entire tech stack.
- Office space and facilities. Mass hiring means the company will need more office 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 HR tooling to manage onboarding, payroll, and culture.
- 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. The combination of min_roles, min_departments, and time_window_days ensures you are capturing genuine campaigns and not just 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, compared to a baseline of 3 postings per month. The top_roles array shows where the heaviest hiring is concentrated. This level of detail lets you tailor your outreach to the specific growth areas.
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 approximately 18 new laptops, 18 new user accounts, and a significant onboarding burden for the IT team. Your outreach references the hiring push directly: “Congratulations 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 power comes from combining them. When multiple signals converge on the same company, the buyer intent is significantly stronger and your outreach becomes far more contextual.
Signal Stacking Strategies
Job Offers + Recruitment Campaign. Use the recruitment campaign signal to identify companies in growth mode, then use job offers to drill into exactly 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 facts: their recent move and the team they are assembling.
Republished Job Offers + Recruitment Campaign. A company is running a hiring campaign but some roles keep getting republished. This indicates growth ambition with execution problems, making them 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 is a practical example of a multi-signal pipeline:
- Layer 1: Recruitment Campaign identifies companies in growth mode. This is your broadest filter.
- Layer 2: Job Offers narrows the 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 of companies struggling with specific hires, adding urgency context.
Configure all four signal types through the API, point their webhooks to the same endpoint, and build routing logic that scores accounts based on signal convergence. A company that triggers all four signals in the same month is a significantly 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 them based on the 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 is 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: the 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 (updated salary ranges, 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. For example, you can include roles containing “data engineer” or “machine learning” while excluding those containing “intern” or “junior.” This keyword filtering works in combination with 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 do not 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 are not 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 intent that financial data and firmographic data simply cannot match. By configuring the four signal types covered in this guide and combining them with smart routing and scoring logic, you build a prospecting engine that surfaces high-intent accounts before your competitors even know they exist.
Ready to start? Explore the full API documentation and set up your first HR signal configuration today.