Signals

Create Company Employees & Alumni signal

Reach the people who work at a company you know, or who worked there before: your former employer, a customer, a competitor, a target account. A former employee is delivered while they are at their new employer, so you reach them where they can buy from you now. Each lead is labelled current (works there today) or former (worked there before and left), and filtered to the roles and companies you target. Optionally keep only the people who were there during a period you choose, for example the years you worked there yourself.

Input: companyUrls (1-10 LinkedIn company page URLs or numeric company ids, required to activate); relation (current, former or both; defaults to both, each lead labelled); overlapPeriod (optional: keep only people who were at the company during this period, in half-years, {"from": "2019-H1", "to": "2023-H2"}; to omitted = until today); minOverlapMonths (with overlapPeriod: the minimum number of months the person spent at the company inside the period, 1-120, defaults to 3); frequency (continuous, the default: deliver the matching people up to dailyLeadLimit a day, then keep delivering the new ones as they appear; one_time: deliver up to oneTimeCount people in total, then stop); oneTimeCount (with one_time: how many people to deliver, counted after your filters, 1-25,000, defaults to 500, still paced by dailyLeadLimit); optional persona targeting (targetPersonas, customPersonaTitles, excludedTitles); optional ICP filters on the person's current employer and location (locations, excludedLocations, companySizeFilters, excludedCompanySizeFilters, allowUnknownCompanySize, industryFilters, excludedIndustryFilters, companyTypeFilters, excludedCompanyUrls) - with no filter at all, everyone is delivered; optional enrichment toggles (getEmails, getPhones, getSireneData, detectTechnologies, getHomepageContent); webhookUrl, dailyLeadLimit, duplicateHandling, status. 3 credits per lead delivered. Activating with status: active checks that at least one company page is set and that overlapPeriod is valid, and answers 400 otherwise. This signal type is opened per account: an account it is not open to gets 400 SIGNAL_INACTIVE.

Output: each matching person is pushed to your webhookUrl as an enriched person lead: the contact (name, email if enriched, phone if enriched, title, location, LinkedIn profile URL, matched persona), their current employer (company name, website, LinkedIn URL, plus tech stack and homepage content when those enrichments are enabled), and in the signal block: tracked_company (the LinkedIn page of the company from companyUrls the lead is affiliated with), affiliation_relation (current or former), affiliation_name (that company's name), and, when the signal has an overlapPeriod, affiliation_started / affiliation_ended (YYYY-MM, affiliation_ended null for someone still there) and overlap_months (months spent there inside your period). study_start_year / study_end_year are always null on this signal. Every key is always present, null when unknown.

Use cases:

  • Former-colleague outreach - reach the people who worked at your former employer while you were there (an overlapPeriod), now at their new company, and open with the years you shared.
  • Customer alumni - follow the people who used your product at a customer to the company they work at now, where they can bring you in.
  • Competitor alumni - reach the people who left a competitor: they know the category, and they know what that product does not do.
  • Account mapping - get the current team of a target account, filtered to the roles in its buying group.
post/api/v1/signals/company-employees-alumni

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/company-employees-alumni
  • Auth: HTTP bearer

Request body

namestring required

Name for this signal

webhookUrlstring nullable

Where each lead is POSTed as it is produced. Optional (since 2026-09-23): omit it when you read leads with GET /api/v1/signals/{signalId}/leads or route them to a connected CRM or sequencer with destinations on PATCH /api/v1/signals/{signalId}.

dailyLeadLimitinteger

Max leads per day. With frequency one_time, the total is oneTimeCount, still delivered at most dailyLeadLimit a day.

duplicateHandlingstring nullable

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept a duplicate after X days, e.g. '7d'). Optional — defaults to 'allow'.

statusstring nullable

Initial status (default: draft). Accepts draft, active, or paused. If active, the config must name at least one page (at most 10) and any period must be valid, otherwise 400.

Example request

{
  "config": {
    "companySizeFilters": [
      "51-200",
      "201-500"
    ],
    "companyUrls": [
      "https://www.linkedin.com/company/acme-consulting/"
    ],
    "customPersonaTitles": [
      "Head of Growth"
    ],
    "excludedCompanyUrls": [
      "https://www.linkedin.com/company/globex/"
    ],
    "excludedTitles": [
      "Intern"
    ],
    "frequency": "continuous",
    "getEmails": true,
    "getPhones": false,
    "industryFilters": [
      "Software Development"
    ],
    "locations": [
      "France"
    ],
    "minOverlapMonths": 6,
    "overlapPeriod": {
      "from": "2019-H1",
      "to": "2023-H2"
    },
    "relation": "former",
    "targetPersonas": [
      "Sales Director",
      "Marketing Director"
    ]
  },
  "dailyLeadLimit": 25,
  "duplicateHandling": "refuse",
  "name": "Alumni of our former employer",
  "status": "active",
  "webhookUrl": "https://your-server.com/webhooks/rodz"
}

Response

Signal created

idstring required
namestring required
statusstring required
signalTypeIdstring required
webhookUrlstring nullable
configobject nullable

Signal-specific configuration

dailyLeadLimitinteger required
leadsTodayinteger required
leadsTotalinteger required
duplicateHandlingstring required

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept after X days)

createdAtstring required
updatedAtstring required
lastLeadAtstring nullable
appliedobject

Settings this signal runs with where they differ from config, keyed like config. {} when every stored setting is applied as stored. A null value means the stored field is not used by this signal. Every entry is explained by a warning naming the same field.

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.