curl --request GET \
--url https://www.trysignalbase.com/api/v2/signals/job-changes \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.trysignalbase.com/api/v2/signals/job-changes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.trysignalbase.com/api/v2/signals/job-changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.trysignalbase.com/api/v2/signals/job-changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.trysignalbase.com/api/v2/signals/job-changes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.trysignalbase.com/api/v2/signals/job-changes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trysignalbase.com/api/v2/signals/job-changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"signalId": "550e8400-e29b-41d4-a716-446655440000",
"personName": "Alex Johnson",
"personLinkedinUrl": "https://www.linkedin.com/in/alexjohnson",
"signalType": "job_change",
"occurredAt": "2024-11-01T00:00:00Z",
"discoveredAt": "2024-11-02T12:00:00Z",
"companyName": "NextGen Software",
"companyLinkedinUrl": "https://www.linkedin.com/company/nextgensoftware",
"newRole": "Chief Technology Officer",
"previousCompanyName": "Contoso"
},
{
"signalId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"personName": "Priya Singh",
"personLinkedinUrl": "https://www.linkedin.com/in/priyasingh",
"signalType": "job_change",
"occurredAt": "2024-10-20T00:00:00Z",
"discoveredAt": "2024-10-21T08:00:00Z",
"companyName": "HealthTech Solutions",
"companyLinkedinUrl": "https://www.linkedin.com/company/healthtechsolutions",
"newRole": "Head of Product",
"previousCompanyName": null
}
],
"pagination": {
"currentPage": 1,
"totalPages": 12,
"totalCount": 240,
"hasNextPage": true,
"hasPreviousPage": false
},
"meta": {
"endpoint": "signals.job-changes",
"creditsUsed": 1
}
}{
"success": false,
"error": "Invalid API key"
}{
"success": false,
"error": "Rate limit exceeded. Please try again later."
}{
"success": false,
"error": "An unknown error occurred"
}Get Job Change Signals
Fetch job change signals with filtering, pagination, and search. Supports role-aware position filters, department and seniority filters, plus LinkedIn targeting.
curl --request GET \
--url https://www.trysignalbase.com/api/v2/signals/job-changes \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.trysignalbase.com/api/v2/signals/job-changes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.trysignalbase.com/api/v2/signals/job-changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.trysignalbase.com/api/v2/signals/job-changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.trysignalbase.com/api/v2/signals/job-changes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.trysignalbase.com/api/v2/signals/job-changes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trysignalbase.com/api/v2/signals/job-changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"signalId": "550e8400-e29b-41d4-a716-446655440000",
"personName": "Alex Johnson",
"personLinkedinUrl": "https://www.linkedin.com/in/alexjohnson",
"signalType": "job_change",
"occurredAt": "2024-11-01T00:00:00Z",
"discoveredAt": "2024-11-02T12:00:00Z",
"companyName": "NextGen Software",
"companyLinkedinUrl": "https://www.linkedin.com/company/nextgensoftware",
"newRole": "Chief Technology Officer",
"previousCompanyName": "Contoso"
},
{
"signalId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"personName": "Priya Singh",
"personLinkedinUrl": "https://www.linkedin.com/in/priyasingh",
"signalType": "job_change",
"occurredAt": "2024-10-20T00:00:00Z",
"discoveredAt": "2024-10-21T08:00:00Z",
"companyName": "HealthTech Solutions",
"companyLinkedinUrl": "https://www.linkedin.com/company/healthtechsolutions",
"newRole": "Head of Product",
"previousCompanyName": null
}
],
"pagination": {
"currentPage": 1,
"totalPages": 12,
"totalCount": 240,
"hasNextPage": true,
"hasPreviousPage": false
},
"meta": {
"endpoint": "signals.job-changes",
"creditsUsed": 1
}
}{
"success": false,
"error": "Invalid API key"
}{
"success": false,
"error": "Rate limit exceeded. Please try again later."
}{
"success": false,
"error": "An unknown error occurred"
}Authorizations
API key for V2 Job Change Signals API authentication. Include as Bearer token in Authorization header.
Query Parameters
Page number for pagination
x >= 1Number of results per page (maximum 100)
1 <= x <= 100Search by company or person keywords
Exact LinkedIn profile URL of the person
Exact LinkedIn company page URL
Comma-separated list of positions to filter by. Allowed values include 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.
Comma-separated list of departments to filter by. Allowed values include marketing, sales, engineering, product, design, operations, finance, people, data, customer_success, growth, legal.
Comma-separated list of seniority levels to filter by. Allowed values include founder, c_level, vp, director, head, lead, manager.
