Person Search
Search Crustdata's person database with flexible filters (title, company, seniority, location, skills, education...), sorting, and cursor pagination. Supports normalized job titles and semantic search. Replaces /screener/persondb/search. Up to 1000 results per page. Billed per result returned (limit defaults to 20). Filter example: {"op": "and", "conditions": [{"field": "experience.employment_details.current.title", "type": "=", "value": "CTO"}, {"field": "experience.employment_details.current.company_headcount_range", "type": "in", "value": ["51-200"]}]}.
Dynamic pricing
(body.limit ? body.limit : body.count ? body.count : 20) * 0.009375
Example code
// Using @orth/sdk - The simplest way to call APIs
// Install: npm install @orth/sdk
import Orthogonal from "@orth/sdk";
const orthogonal = new Orthogonal({
apiKey: process.env.ORTHOGONAL_API_KEY,
});
const output = await orthogonal.run({
api: "crustdata",
path: "/person/search",
body: {
"filters": {}
}
});
console.log(output);Body parameters
Filter criteria — a single `PersonSearchCondition` or a `PersonSearchConditionGroup` combining conditions with `and`, `or`, or `all_of` (cross-element matching on nested-array fields).
Sort directives applied to matched people in order. (default: [])
(default: 20)
Alias for limit.
Pagination cursor from a previous response's `next_cursor`. Omit on the first page.
Post-processing options applied to search results (e.g., exclusions).
Debug flag - include search query in response (default: false)
Preview mode - return only basic fields for faster response (default: false)
Explain an empty result. When true and a filters-only request returns `total_count` 0, `remarks` names the condition whose removal recovers profiles. Not the `search.explain` flag on semantic search, which returns per-hit scoring. (default: false)
Optional list of field paths to include in each returned profile. When omitted, a default set of profile fields is returned. Use dot notation for a nested field (for example `experience.employment_details.current.title`) or a top-level family name (for example `basic_profile`) to include the whole family. An unsupported value returns a `400` whose `metadata.available_fields` lists every selectable field.