> ## Documentation Index
> Fetch the complete documentation index at: https://deepline.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# CrustData V3: Person Search

> Cheap indexed people search by job title, current company (employer), seniority, location, education, skills, contact availability, X handle, and linked GitHub.

Cheap indexed people search by job title, current company (employer), seniority, location, education, skills, contact availability, X handle, and linked GitHub.

> [!NOTE]
>
> Tool ID: `crustdata_v3_person_search`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'crustdata_v3_person_search',
  {
    "filters": {
      "field": "email",
      "type": "=",
      "value": "example"
    }
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute crustdata_v3_person_search --input '{
  "filters": {
    "field": "email",
    "type": "=",
    "value": "example"
  }
}' --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "data": {
    "profiles": [
      {
        "crustdata_person_id": 123,
        "basic_profile": {
          "name": "Example",
          "headline": "example",
          "current_title": "example"
        },
        "contact": {
          "has_business_email": true,
          "has_personal_email": true,
          "has_phone_number": true
        }
      }
    ]
  }
}
```

Use `deepline describe crustdata_v3_person_search --json` for the latest machine-readable contract.

## Input reference

Request body for /person/search. Use filters (optionally grouped with and/or), sorts, limit, and cursor pagination.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.filters` | `object` | Yes | — | Person-search filter criteria. `in` and `not_in` values may contain at most 5 items: CrustData can silently ignore longer arrays, so split larger sets into separate searches and combine the results. |
| `payload.sorts` | `array` | No | `[]` | Sort directives applied to matched people in order. |
| `payload.limit` | `integer` | No | `20` | Minimum: 1. Maximum: 1000. |
| `payload.count` | `integer` | No | — | Alias for limit. Minimum: 1. Maximum: 1000. |
| `payload.cursor` | `string` | No | — | Pagination cursor from a previous response's `next_cursor`. Omit on the first page. |
| `payload.post_processing` | `object` | No | — | Post-processing options applied to search results (e.g., exclusions). |
| `payload.return_query` | `boolean` | No | `false` | Debug flag - include search query in response |
| `payload.preview` | `boolean` | No | `false` | Preview mode - return only basic fields for faster response |
| `payload.fields` | `array` | No | — | 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. |

> [!NOTE]
>
> This input schema is too large for an inline display. Read the complete live contract with `deepline describe crustdata_v3_person_search --json`.

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Paginated response from the person search endpoint containing matched profiles and pagination metadata. |
| `result.data.profiles` | `array` | Yes | — | Array of person profiles matching the search criteria |
| `result.data.profiles[].crustdata_person_id` | `integer` | No | — | — |
| `result.data.profiles[].basic_profile` | `object` | No | — | — |
| `result.data.profiles[].basic_profile.name` | `string` | No | — | — |
| `result.data.profiles[].basic_profile.headline` | `string` | No | — | — |
| `result.data.profiles[].basic_profile.current_title` | `string` | No | — | — |
| `result.data.profiles[].basic_profile.professional_network_name` | `string \| null` | No | — | Display name on the person's professional-network profile. |
| `result.data.profiles[].basic_profile.profile_picture_permalink` | `string \| null` | No | — | — |
| `result.data.profiles[].basic_profile.location` | `object \| null` | No | — | — |
| `result.data.profiles[].basic_profile.location.city` | `string \| null` | No | — | — |
| `result.data.profiles[].basic_profile.location.state` | `string \| null` | No | — | — |
| `result.data.profiles[].basic_profile.location.country` | `string \| null` | No | — | — |
| `result.data.profiles[].basic_profile.location.continent` | `string \| null` | No | — | — |
| `result.data.profiles[].basic_profile.location.raw` | `string \| null` | No | — | — |
| `result.data.profiles[].basic_profile.normalized_title` | `object \| null` | No | — | Job Title Normalization (JTN, beta) — structured representation of the person's current title mapped to Crustdata's proprietary taxonomy (20 departments, 226 sub-departments). See [https://docs.crustdata.com/guides/job-title-normalization](https://docs.crustdata.com/guides/job-title-normalization). |
| `result.data.profiles[].basic_profile.normalized_title.matched_title` | `string \| null` | No | — | Canonical normalized title matched to the person's current title. |
| `result.data.profiles[].basic_profile.normalized_title.department` | `string \| null` | No | — | High-level department the normalized title maps to. |
| `result.data.profiles[].basic_profile.normalized_title.sub_department` | `string \| null` | No | — | More granular classification within the department. |
| `result.data.profiles[].basic_profile.normalized_title.similarity` | `number \| null` | No | — | Similarity score between the raw title and the matched normalized title, from 0 to 1. |
| `result.data.profiles[].basic_profile.normalized_title.confident` | `boolean \| null` | No | — | Whether the normalized-title match is considered confident. |
| `result.data.profiles[].contact` | `object` | No | — | Contact-availability flags for a person — indicates whether email or phone data is present. |
| `result.data.profiles[].contact.has_business_email` | `boolean` | No | — | Whether person has a verified business email |
| `result.data.profiles[].contact.has_personal_email` | `boolean` | No | — | Whether person has a personal email on file |
| `result.data.profiles[].contact.has_phone_number` | `boolean` | No | — | Whether person has a phone number on file |
| `result.data.profiles[].social_handles` | `object` | No | — | — |
| `result.data.profiles[].social_handles.professional_network_identifier` | `object` | No | — | — |
| `result.data.profiles[].social_handles.professional_network_identifier.profile_url` | `string` | No | — | — |
| `result.data.profiles[].social_handles.dev_platform_identifier` | `object` | No | — | — |
| `result.data.profiles[].social_handles.dev_platform_identifier.profile_url` | `string \| null` | No | — | — |
| `result.data.profiles[].social_handles.twitter_identifier` | `object \| null` | No | — | The person's handle on X (formerly Twitter), when available. |
| `result.data.profiles[].social_handles.twitter_identifier.slug` | `string \| null` | No | — | The X/Twitter handle slug (the portion after the profile URL host). May be an empty string when no handle is on file. |
| `result.data.profiles[].experience` | `object` | No | — | — |
| `result.data.profiles[].experience.employment_details` | `object` | No | — | — |
| `result.data.profiles[].experience.employment_details.current` | `array` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].name` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].professional_network_id` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].title` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].description` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].location` | `object \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].location.raw` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].employment_type` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].start_date` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].end_date` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].is_default` | `boolean \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].crustdata_company_id` | `integer \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].company_website_domain` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].company_profile_picture_permalink` | `string \| null` | No | — | Stable Crustdata-hosted permalink to the company logo, suitable for rendering in your own interface. |
| `result.data.profiles[].experience.employment_details.current[].company_professional_network_profile_url` | `string \| null` | No | — | — |
| `result.data.profiles[].experience.employment_details.current[].seniority_level` | `string \| null` | No | — | — |

The table shows the first 50 fields. Expand the raw schema below for every field.

> [!NOTE]
>
> This output schema is too large for an inline display. Read the complete live contract with `deepline describe crustdata_v3_person_search --json`.

## Deepline cost

* Pricing model: `per_result` (per result).
* Estimated Deepline credits: `0.02` per pricing unit.

## Related documentation

* [CrustData V3 provider guide](https://deepline.com/docs/providers/crustdata-v3/guide.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.