Overview
The Search API allows searching SignalHire’s database of professionals using a wide variety of filters — job title, location, company, industry, experience, and more. Unlike the Person API, it does not require a known identifier. Results are returned as brief profile overviews without contact details, making it ideal for discovering new candidates or leads at scale. Results are returned synchronously — the first batch is included directly in the response. For large result sets, subsequent batches are retrieved using a scroll mechanism similar to Elasticsearch: each response includes ascrollId that can be passed to the Scroll Search endpoint to fetch the next batch.
A typical workflow:
- Submit a
searchByQueryrequest with filters — receive the first batch and ascrollId - Use Scroll Search with the
scrollIdto page through remaining results - Pass interesting profile UIDs to the Person API to retrieve full contact details
Maximum 3 concurrent Search API requests are allowed at a time.
Endpoint:
POST https://www.signalhire.com/api/v1/candidate/searchByQuery
Request Parameters
Headerstring
required
Secret API key. See Authentication.
string
Boolean query for current job title. Cannot be combined with
currentPastTitle — if both are provided, currentPastTitle takes precedence. See Boolean Query Guide.string
Boolean query for current or past job title. Takes precedence over
currentTitle if both are provided.string | array of strings
Geographical area for the search. Accepts a single city, state, or country as a string, or multiple locations as an array. Examples:
"Los Angeles, California", ["India", "Rome, Italy"]. Returns 422 if the location cannot be recognized.float
Latitude coordinate for geo-based search. Must be provided together with
longitude. Searches within a 10km radius. Overrides location when set.float
Longitude coordinate for geo-based search. Must be provided together with
latitude.array of objects
Multiple geographic points to search around simultaneously. Each item must contain
latitude and longitude. Overrides location. Used only when top-level latitude/longitude are not set. Each point uses a 10km radius.string
Boolean query for current company name.
string
Boolean query for current or past company name.
string
Search by full name.
string
Boolean query for skills, description, education, and other profile attributes.
string
Filter by industry category. Returns
422 if the value is not recognized. See the full list of allowed values.array of strings
Filter by multiple industry categories simultaneously. Each value must be a valid industry name from the allowed values list. Returns
422 if any value is not recognized. Use instead of industry when filtering by more than one industry.integer
Minimum years of experience in the current role and company.
integer
Maximum years of experience in the current role and company.
integer
Minimum years of experience across all roles and companies.
integer
Maximum years of experience across all roles and companies.
string
Boolean query applied across university name, faculty, and degree. See Boolean Query Guide.
array of strings
Filter by department. Accepted values:
Marketing, Sales, Product & Project, Engineering / Development, Data & Analytics, Design / UX, HR & Recruitment, Finance & Accounting, Legal / Compliance, Customer Support / Success, Health, Beauty & Hospitality, Education & Training, Operations & Admin, Facility Services, Entertainment / Productionarray of strings
Filter by seniority level. Accepted values:
Intern / Entry Level, Junior, Mid-Level, Senior, Lead, Head, VP, C-Level, Founder / Owner, Board / Advisory, Directorsboolean
Filter by open-to-work status.
boolean
Exclude profiles for which contacts have already been fetched.
boolean
Exclude profiles already viewed in the web app or browser extension.
boolean
Exclude profiles already added to a list.
boolean
Exclude profiles already added to a job.
boolean
Exclude profiles already emailed.
integer
Number of profiles to return per batch. Default:
10, must be between 1 and 100. Returns 422 if outside this range.Location Formats
Thelocation filter supports three levels of granularity. The value is resolved in this order:
Country — pass the full English country name. Searches the entire country.
422 with "Location is not recognized".
For precise geo-based search, use latitude/longitude or coordinates instead — they bypass text resolution entirely.
Request Example
This example searches for profiles in New York whose current job title contains “Software Engineer” or “Developer”, and who have both PHP and JavaScript mentioned in their profile.Response Example (HTTP 200)
Response Fields
For other possible response codes see Response Codes.
Search Quota
Search requests are not billed per credit — they count against a daily search quota. This quota is shared between the SignalHire website and the API, so searches made in either place consume from the same daily limit. The daily quota covers two dimensions independently: the number of search queries and the total number of profiles returned across all searches. Both are tracked separately and either can be exhausted first depending on usage patterns. When the daily quota is exhausted, further search requests return HTTP402 with an error message. The quota resets daily.
There is also a concurrency limit: a maximum of 3 Search API requests can be in progress at the same time. Exceeding this returns HTTP 429.