Fiber AI
Monitoring & signals

Job changes

Find out when the people you care about change jobs. Use Tracker for new integrations; job-change lists stay available for existing ones.

Job changes

Knowing when a champion, customer or past buyer changes jobs is one of the most useful signals in sales. We recommend Tracker for it. Tracker is where we ship improvements to job-change detection first, it watches for promotions and company moves alongside every other person signal, and it's the monitoring API we support most actively.

Job-change lists, our earlier API for the same question, keep working for existing integrations. If you're building something new, start with Tracker.

Track job changes with Tracker

  1. Create a person tracker list with the job-change rules you care about and a refresh interval.
  2. Add the people to watch by LinkedIn URL, slug or numeric ID.
  3. When someone moves, a tracker.signal_detected webhook delivers the change, with the old and new company and title in changeData. Every signal is also stored for the API.
# 1. Create a person list that checks weekly for company moves and promotions
curl -X POST https://api.fiber.ai/v1/tracker/person-lists \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "sk_live_xxx",
    "name": "Q3 champions",
    "refreshIntervalDays": 7,
    "trackingRules": [
      { "type": "person_changed_company", "entityType": "person" },
      { "type": "person_got_promoted", "entityType": "person" }
    ]
  }'

# 2. Add people
curl -X PUT https://api.fiber.ai/v1/tracker/person-lists/LIST_ID/people \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "sk_live_xxx",
    "people": [
      { "linkedinUrl": "https://www.linkedin.com/in/example-one" },
      { "linkedinUrl": "https://www.linkedin.com/in/example-two" }
    ]
  }'

What Tracker gives you on top of a plain "who moved?" list:

  • Narrower alerts. Only fire when someone moves to or from specific companies, lands a title with certain keywords, or is promoted into a seniority you sell to.
  • More than job moves. Add title changes, open-to-work, stealth moves and posting activity to the same list.
  • Your cadence. Pick how often each list is re-checked, and refresh on demand when you need an answer now.
  • A structured diff. Each signal carries the before and after, a confidence score, and sources.

Rules, filters, pricing and the full changeData shape for company moves are on the Tracker page.

Job-change lists (existing integrations)

If you already use job-change lists, nothing changes: lists you've set up keep being checked. This section is the reference for maintaining them.

  • Lists are created inactive. Add profiles, then set isActive: true.
  • We check active lists weekly. Paused lists aren't checked or billed.
  • Each profile's movement history comes back from the profiles read, most recent first, and moves are pushed by the job.changed webhook.

Movement fields

FieldWhat it tells you
movementpromoted, lateral-move, new-role, changed, or no-change
discoveredAtWhen we detected the movement
newCompanyName, newCompanyDomain, newCompanyLiSlug, newCompanyOrgId, newCompanyLogoUrlThe employer they're at now
newJobTitleTheir current title
oldCompanyName, oldCompanyDomain, oldCompanyLiSlug, oldCompanyOrgId, oldCompanyLogoUrlThe employer they came from
oldJobTitleTheir previous title
startedInRoleAt, startedAtCompanyAtWhen the current role and the current company tenure began

Operations

All operations are POST under /v1/job-changes/….

OperationWhat it doesReference
Create a job-change list/create-list. Takes a name; returns the list id, created inactivecreateJobChangeList
Add profiles/add-profiles. 1–5,000 LinkedIn URLs per call; returns invalidProfilesaddProfilesToList
Get a list/get-list. Name, status, isActive, createdAt; use it to track an uploadgetJobChangeList
List all lists/list-all. Every job-change list in your org, cursor-paginated (pageSize 1–100, default 100)listAllJobChangeLists
Read profiles and movements/list-all-profiles. Each profile with its full movement history; filter by movements, pageSize 1–100 (default 100)listAllProfilesFromJobChangeList
Update a list/update-list. Rename (newName) or switch tracking on and off (isActive)updateJobChangeList
Remove profiles/delete-profiles. 1–100 profile ids per call; returns numDeleteddeleteProfilesFromJobChangeList
Delete a list/delete-list. Deletes the list and stops tracking everyone on itdeleteJobChangeList

Example

Create a list, load it, switch it on, then read back the promotions and new roles:

# 1. Create (returns output.id)
curl -X POST https://api.fiber.ai/v1/job-changes/create-list \
  -H "Content-Type: application/json" \
  -d '{ "apiKey": "sk_live_xxx", "name": "Q3 champions" }'

# 2. Add profiles
curl -X POST https://api.fiber.ai/v1/job-changes/add-profiles \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "sk_live_xxx",
    "jobChangeListId": "LIST_ID",
    "profiles": [
      { "linkedinUrl": "https://www.linkedin.com/in/example-one" },
      { "linkedinUrl": "https://www.linkedin.com/in/example-two" }
    ]
  }'

# 3. Activate
curl -X POST https://api.fiber.ai/v1/job-changes/update-list \
  -H "Content-Type: application/json" \
  -d '{ "apiKey": "sk_live_xxx", "jobChangeListId": "LIST_ID", "isActive": true }'

# 4. Read the moves you care about
curl -X POST https://api.fiber.ai/v1/job-changes/list-all-profiles \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "sk_live_xxx",
    "jobChangeListId": "LIST_ID",
    "movements": ["promoted", "new-role"]
  }'

Webhooks

EventFires when
job.changedTracked profiles changed jobs
job_changes.profiles_addedProfiles were added to a job-change list

job.changed carries a profiles array and no success or error fields, so don't route it through a handler that expects the standard completion envelope.

Cost

Tracking costs 1 credit per profile per month, billed a quarter at each weekly check. Creating, reading, updating and deleting lists and profiles is free. Rate limits: 60 requests/minute for adding profiles, 120 requests/minute for every other job-change operation. See Billing & credits.

Moving to Tracker

Create a person tracker list with person_changed_company and person_got_promoted, add the same LinkedIn URLs, and point your webhook handler at tracker.signal_detected. Once Tracker signals are flowing, pause the old list with isActive: false.

  • Tracker: rule-based monitoring for people and companies
  • Webhooks: endpoint setup, signatures, retries
  • Contact Reveal: get a new email for someone who just moved

On this page