Work Milestone

Events or milestones related to an individual's work history.

Work Milestone signals detect career transitions — job changes, promotions, and work anniversaries — across 80M+ contacts.

Each signal captures the full transition context: previous and new job titles, previous and new companies, job descriptions, locations, event timing, and confidence scoring. The gold standard of timing signals: a VP of Sales who just left a competitor to join your prospect company is the highest-intent outreach moment you'll ever find.

📎

See real delivered dataSample Files

Subtypes represent the type of career event detected:

Available Subtypes (3)
Subtype EnumDescription
jobChangeContact moved to a new company — new budget holder, fresh mandate, open to new vendors
promotionContact promoted internally — expanded scope, potentially new budget authority
workAnniversaryContact hit a tenure milestone — natural conversation starter for relationship-building

Example Signal

What a single entry looks like in a delivered signal file:

{
  "signal_id": "f8a2c4e6-1b3d-5f7a-9c2e-4d6f8a1b3c5e",
  "batch_id": "2026-04-18-00-00-00",
  "signal_type": "work-milestone",
  "signal_subtype": "jobChange",
  "detected_at": "2026-04-18T14:22:33Z",
  "association": "contact",
  "company": {
    "name": "Ramp",
    "domain": "ramp.com",                       // match on domain
    "linkedin_url": "linkedin.com/company/ramp",
    "industries": ["Financial Services", "Software Development"],
    "employee_count_low": 501,
    "employee_count_high": 1000,
    "description": "Corporate card and spend management..."
  },
  "contact": {
    "name": "Marcus Chen",
    "first_name": "Marcus",
    "last_name": "Chen",
    "email": "[email protected]",            // match on email
    "job_title": "VP of Revenue Operations",
    "linkedin_url": "linkedin.com/in/marcuschen"  // or match on LinkedIn URL
  },
  "data": {
    "event_date": "2026-04-01",
    "months_since_event": 0,
    "confidence": 0.94,                         // 0.0-1.0; how certain this transition is accurate
    "founded_new_company": false,
    "new_job_title": "VP of Revenue Operations",
    "new_job_description": "Leading revenue operations, sales enablement, and GTM analytics for Ramp's enterprise expansion...",
    "new_job_location": "New York, NY",
    "previous_job_title": "Senior Director, Revenue Operations",
    "previous_job_description": "Built and scaled RevOps function from 3 to 18 people, owned Salesforce architecture and GTM tooling stack...",
    "previous_job_location": "San Francisco, CA",
    "previous_company_name": "Brex",
    "previous_company_domain": "brex.com",
    "company_name": "Ramp",
    "company_domain": "ramp.com",
    "work_anniversary_year": null
  }
}

Field Reference

Standard envelope and entity fields are shared across all signals — see Schema and Resolution. The fields below are specific to this signal:

Signal-Specific Fields

The data object contains everything unique to this signal type — the intelligence extracted from career transition detection.

FieldTypeDescription
event_datestring (date)When the transition occurred (YYYY-MM-DD). Derived from LinkedIn profile update timing. Useful for recency filtering — outreach within 30 days of a job change has significantly higher response rates
months_since_eventintegerMonths elapsed since the transition. 0 = this month. Useful for tiered outreach strategies (immediate welcome vs. 90-day check-in)
confidencefloat (0.0–1.0)How certain we are this transition actually happened. Higher = more reliable. Based on signal corroboration (profile updates, headline changes, connection activity). Useful for filtering in production — recommend ≥0.8 for automated outreach
founded_new_companybooleanWhether the contact started a new company rather than joining one. True = founder, useful for identifying startup-stage opportunities
new_job_titlestringCurrent job title at the new company. Useful for ICP matching and outreach personalization
new_job_descriptionstringDescription of the new role's responsibilities. Provides context on what the contact now owns — budget, team, and mandate. Useful for crafting relevant messaging
new_job_locationstringLocation of the new role (city, state/country). Useful for territory routing
previous_job_titlestringJob title at the previous company. Useful for understanding career trajectory and whether this is a promotion-move or lateral
previous_job_descriptionstringDescription of the previous role. Useful for understanding what tools/vendors they used before (carries preferences to new role)
previous_job_locationstringLocation of the previous role
previous_company_namestringName of the company they left. Critical for competitive displacement plays — if they left your customer, they know your product
previous_company_domainstringDomain of the previous company. Useful for cross-referencing against your customer list or competitor accounts
company_namestringName of the current (new) company. Matches company.name in the entity object
company_domainstringDomain of the current company. Matches company.domain
work_anniversary_yearinteger | nullFor anniversary subtypes: which year milestone (e.g., 1, 3, 5). Null for job changes and promotions

Timing & Delivery

  • detected_at is when we confirmed the transition. Use event_date for the actual career change timing — there's typically a 1–4 week detection lag.
  • One signal per contact per transition. A person changing jobs fires once. If they change again 3 months later, that's a new signal. Anniversary signals fire once per milestone year.
  • Each delivery arrives in a timestamped folder. Treat all signals in a new folder as recent — no need to diff against prior deliveries.

Coverage

  • Refresh: Weekly
  • Coverage: 80,000,000+ contacts monitored for career changes
  • Best for: New buyer identification, competitive displacement outreach, relationship re-engagement, "warm intro" timing

Contact Sales →