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.
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.
curl -X GET "https://www.trysignalbase.com/api/v2/signals/job-changes?count=true&positions=CEO,CTO&date_preset=last_30d" \ -H "Authorization: Bearer YOUR_API_KEY"
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.
Company headquarters use companyCountry and companySubcategory (when set). Person location uses personCountry, personCity, and related fields — see Company fields in signal responses.
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.
# By website domaincurl -X GET "https://www.trysignalbase.com/api/v2/signals/job-changes?company_domain=novartis.com" \ -H "Authorization: Bearer YOUR_API_KEY"# By LinkedIn company pagecurl -X GET "https://www.trysignalbase.com/api/v2/signals/job-changes?company_linkedin_url=linkedin.com/company/novartis" \ -H "Authorization: Bearer YOUR_API_KEY"
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 AND — company_domain=novartis.com&company_name=Acme returns empty because they disagree.Match confidence. Every result row includes match_confidence:
Value
Meaning
exact
Matched via company_domain or company_linkedin_url
Search by company name (partial match, fuzzy). Prefer company_domain or company_linkedin_url for strict matching
new_role
string
Search by new role / job title
keyword
string
Search by keyword tag
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.
"ceo", "cto", "cfo", "coo", "vp of engineering", "vp of sales", "vp of marketing","head of product", "head of growth", "head of engineering", "engineering manager","product manager", "sales manager", "marketing manager", "founder", "co-founder"