Skip to main content

Welcome to the Job Change Signals API

The Job Change Signals API provides timely insights on job changes across the web. Track role transitions and new hires with precise filters for positions, departments, and seniority levels, plus company and person-level LinkedIn targeting.

Job Change Signals Endpoint

View the complete OpenAPI specification

Count Mode

You can get the total number of results matching any filter combination without consuming credits by adding count=true to your request. This returns an empty data array with full pagination metadata, including totalCount.
Response:
Use count mode to preview how many results match your filters before fetching actual data. This is useful for building filter UIs, showing result counts, or validating queries — all at zero credit cost.

Key Features

  • Real-time Signals: Job change signals aggregated continuously from web sources
  • Role-aware Filters: Filter by positions, departments, and seniority levels
  • LinkedIn Targeting: Exact-match filters on person and company LinkedIn URLs
  • Field-specific Search: Search by person name, company name, new role, or keyword
  • Flexible Sorting: Sort by date, person name, or company name
  • Pagination Support: Efficiently retrieve large datasets with up to 100 results per page
  • Credit-based Usage: Transparent credit consumption per API call

Company vs. person location

Company headquarters use companyCountry and companySubcategory (when set). Person location uses personCountry, personCity, and related fields — see Company fields in signal responses.

Service Level

  • Rate Limit: Based on your subscription tier
  • Uptime: 99% guaranteed uptime
  • Data Freshness: Real-time aggregation ensures up-to-date signals
  • Maximum Results: Up to 100 results per page

Authentication

All API endpoints require a Bearer token in the Authorization header.
If you know a company’s website domain or LinkedIn page, query by URL instead of by name. Name search is fuzzy and can return lookalikes (Novartis also matches Novartis UK); URL identifiers match exactly one company.
Accepted input formats. URL identifiers are normalized before matching, so equivalent variants return the same results:
  • company_domain: novartis.com, www.novartis.com, https://www.novartis.com/, https://novartis.com/any/path — scheme, www., port, path and trailing slash are ignored. Values that can’t be reduced to a domain return 400.
  • company_linkedin_url: linkedin.com/company/novartis, https://www.linkedin.com/company/Novartis/http/https, www. and trailing slash are ignored, the slug is case-insensitive. URLs that aren’t LinkedIn company pages (e.g. personal /in/ profiles) return 400.
Strict matching. When a URL identifier is provided, the API never falls back to fuzzy name matching: if no company matches, the result is empty. Identifiers combine with ANDcompany_domain=novartis.com&company_name=Acme returns empty because they disagree. Match confidence. Every result row includes match_confidence:

Query Parameters

Pagination

Date Filters

Country Filters

Exact Match Filters

Field-specific Search (partial match)

There is no person_name filter. For privacy (GDPR), people are queryable only by personLinkedinUrl, and personName is returned masked (first name + last initial). To locate a specific person, filter by their LinkedIn URL.

Role Category Filters

Sorting

Enum Values

Positions
Departments
Seniorities

Response Structure

All successful responses follow this structure:

Error Handling

The API returns standard HTTP status codes:
  • 200: Success
  • 401: Unauthorized - Invalid or missing API key
  • 429: Rate limit exceeded
  • 500: Internal server error
Error responses include:

Example Usage

Filter by Position and Date Preset

Filter by Company and Seniority

Search by New Role with Sorting

Target by LinkedIn URLs