Create Recruitment Campaign signal
Find companies running an active hiring push — those with multiple open job postings that match the roles, locations, and filters you care about. Identify HR leaders and talent teams before your competitors do.
Input: job titles to match or exclude (jobTitleInclude/jobTitleExclude), locations (locations — optional, empty means worldwide — and excludedLocations), company size filters (companySizeFilters), the matching-job-count band a company must fall in (minJobCount — e.g. 10 open postings — and an optional maxJobCount cap), and job posting recency (publishedDate: "24h", "7d", "30d"). To resolve individual decision-makers, set enablePersonaTargeting: true and list the roles you want in targetPersonas (e.g. "HR Director", "Talent Acquisition"), capping how many contacts each company yields with maxLeadsPerCompany (1-50, 1 when omitted), and companyOnlyWhenContactsRefused (default false) to still receive the company, with no contact, when every candidate found there was filtered out rather than nothing, and requireContact (default false) to receive only leads with a contact: a company where nobody matching your personas is found is then neither delivered nor charged, whatever companyOnlyWhenContactsRefused says. Optional enrichments (getEmails, getPhones, detectTechnologies, getHomepageContent) add a per-lead cost.
Output: one lead per qualifying company delivered to your webhookUrl — this is a company-level signal, not one lead per job posting. Each lead includes the company name and website. When persona targeting is enabled, a matched HR/talent decision-maker is resolved and delivered as the contact; otherwise contact is the empty string "" (a company-level lead, with no contact.lead_id). Companies outside your filters are excluded server-side and never sent. Note on locations: it is optional — omit it or send an empty list to search worldwide. Multiple locations are combined with OR, so each one you add widens the search. Pass names ("France"), not ids; an unrecognised name returns 400 INVALID_LOCATION. Worldwide signals can match a lot more, so size dailyLeadLimit accordingly.
Use cases:
- Growth-account targeting — aggressive hiring = a scaling company with budget; prioritise it for outbound.
- Function-specific pitch — many sales hires → GTM tooling; many eng hires → dev tooling.
Request
- Base URL: https://api.rodz.io (the document declares no server; this is the origin it was published from)
- URL: https://api.rodz.io/api/v1/signals/recruitment-campaign
- Auth: HTTP bearer
Request body
Example request
{
"config": {
"companySizeFilters": [
"201-500",
"501-1000"
],
"customPersonaTitles": [
"People Operations Manager"
],
"detectTechnologies": false,
"enablePersonaTargeting": true,
"excludedWebsites": [
"acme.com"
],
"getEmails": true,
"getHomepageContent": false,
"getPhones": false,
"getSireneData": false,
"jobDescriptionExclude": [],
"jobDescriptionInclude": [],
"jobDescriptionIncludeAll": false,
"jobTitleExclude": [],
"jobTitleInclude": [
"Engineer",
"Developer"
],
"jobTitleIncludeAll": false,
"locations": [
"France"
],
"maxJobCount": 1000,
"minJobCount": 10,
"personaExportMode": "top_ranked",
"personaLocations": [
"France"
],
"publishedDate": "30d",
"targetPersonas": [
"HR Director",
"Talent Acquisition"
]
},
"dailyLeadLimit": 50,
"name": "Companies hiring aggressively",
"status": "active",
"webhookUrl": "https://your-server.com/webhooks/rodz"
}Response
Signal created
Example response
{
"applied": {
"allowUnknownCompanySize": false,
"maxJobAgeDays": 180
},
"config": {
"companySizeFilters": [
"201-500",
"501-1000"
],
"getEmails": true,
"jobTitles": [
"CTO"
],
"locations": [
"France"
],
"maxJobAgeDays": 90
},
"createdAt": "2026-01-15T10:30:00Z",
"dailyLeadLimit": 50,
"duplicateHandling": "refuse",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"lastLeadAt": "2026-03-15T14:22:00Z",
"leadsToday": 3,
"leadsTotal": 127,
"name": "CTOs changing jobs in France",
"signalTypeId": "job_changes",
"status": "active",
"updatedAt": "2026-03-16T08:00:00Z",
"warnings": [
{
"code": "VALUE_BELOW_MINIMUM",
"field": "maxJobAgeDays",
"message": "`maxJobAgeDays` is 90; this signal applies 180. Job changes are delivered up to 180 days after the start date, and a shorter window is raised to that minimum.",
"severity": "info",
"values": [
"90"
]
}
],
"webhookUrl": "https://your-server.com/webhooks/rodz"
}Changes
No recorded changes to this operation across all 1 revision of this API.