Signals

Create School Alumni signal

Reach the alumni of a school you or your buyers attended: a business school, an engineering school, a university. Each lead is a former student of the school, at the company they work at now, filtered to the roles and companies you target. Optionally keep only the people who studied there during the years you choose, for example your own class years.

Input: schoolUrls (1-10 LinkedIn school page URLs or numeric school ids, required to activate); studyPeriod (optional: keep only people who studied there in these years, {"fromYear": 2010, "toYear": 2018}, either bound may be omitted); acceptUnknownStudyDates (with studyPeriod: keep people whose profile gives no study dates for this school, true by default, or drop them with false); 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, every alumnus 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 school page is set and that studyPeriod 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 school from schoolUrls the lead studied at), affiliation_relation (always former), affiliation_name (the school's name), and, when the signal has a studyPeriod and the profile gives them, study_start_year / study_end_year. affiliation_started, affiliation_ended and overlap_months are always null on this signal. Every key is always present, null when unknown.

Use cases:

  • Shared-school openers - reach the alumni of a school you or your founders attended, and open with what you have in common.
  • Buyer-school prospecting - target the schools your best buyers come from and reach the alumni in the same roles.
  • Class-year campaigns - narrow to the years you studied there (studyPeriod) for an introduction between classmates.
post/api/v1/signals/school-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/school-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": {
    "acceptUnknownStudyDates": false,
    "companySizeFilters": [
      "201-500",
      "501-1000"
    ],
    "excludedTitles": [
      "Intern"
    ],
    "frequency": "continuous",
    "getEmails": true,
    "locations": [
      "France"
    ],
    "schoolUrls": [
      "https://www.linkedin.com/school/kedge-business-school/"
    ],
    "studyPeriod": {
      "fromYear": 2010,
      "toYear": 2018
    },
    "targetPersonas": [
      "Chief Financial Officer",
      "Finance Director"
    ]
  },
  "dailyLeadLimit": 20,
  "name": "Alumni of our founders' business school",
  "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.