> ## 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 People Search: Inputs, Cost & CLI Example

> Running people search across CrustData datasets. Better as a structured retrieval/fallback path than as a source-of-truth TAM sizing tool.

## Run in Enrichment Spreadsheet

<Info>
  Use this function as a column step in `deepline enrich`.
</Info>

```bash theme={null}
deepline enrich --input leads.csv --output leads.enriched.csv --with 'result=crustdata_people_search:{"companyDomain":"{{companyDomain}}","titleKeywords":"{{titleKeywords}}"}' --json
```

<Tip>
  Map payload values to spreadsheet columns with `{{column_name}}` placeholders.
</Tip>

## Input Schema

| Name                           | Type              | Required | Default | Description                                                                                                                                                                                               |
| ------------------------------ | ----------------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payload.companyDomain`        | `string`          | Yes      |         | Company website domain to match.                                                                                                                                                                          |
| `payload.titleKeywords`        | `string \| array` | Yes      |         | Title keyword(s) to match.                                                                                                                                                                                |
| `payload.profileKeywords`      | `string \| array` | No       |         | Profile headline keyword(s).                                                                                                                                                                              |
| `payload.country`              | `string`          | No       |         | Country or region filter.                                                                                                                                                                                 |
| `payload.seniority`            | `string \| array` | No       |         | Seniority level(s). Canonical values: CXO, Vice President, Director, Manager, Senior, Entry, Training, Owner, Partner, Unpaid. Common aliases (c-suite, vp, founder, junior, intern) are auto-normalized. |
| `payload.fuzzyTitle`           | `boolean`         | No       |         | Use fuzzy title matching (default true).                                                                                                                                                                  |
| `payload.requireVerifiedEmail` | `boolean`         | No       |         | Only return contacts with a verified business email. Default false.                                                                                                                                       |
| `payload.limit`                | `integer`         | No       | `3`     | Max returned profiles to request (1-1000, default 3). Zero returned profiles are free; searches with returned profiles are billed in started 100-profile buckets.                                         |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={null}
  {
    "type": "object",
    "description": "Searches people at a company via PersonDB using derived filters. Priced as database discovery: zero returned profiles are free; returned profiles are billed in started 100-profile buckets.",
    "properties": {
      "companyDomain": {
        "type": "string",
        "description": "Company website domain to match.",
        "minLength": 1
      },
      "titleKeywords": {
        "description": "Title keyword(s) to match.",
        "anyOf": [
          {
            "type": "string",
            "minLength": 1
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "profileKeywords": {
        "description": "Profile headline keyword(s).",
        "anyOf": [
          {
            "type": "string",
            "minLength": 1
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "country": {
        "type": "string",
        "description": "Country or region filter.",
        "minLength": 1
      },
      "seniority": {
        "description": "Seniority level(s). Canonical values: CXO, Vice President, Director, Manager, Senior, Entry, Training, Owner, Partner, Unpaid. Common aliases (c-suite, vp, founder, junior, intern) are auto-normalized.",
        "anyOf": [
          {
            "type": "string",
            "minLength": 1
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        ]
      },
      "fuzzyTitle": {
        "type": "boolean",
        "description": "Use fuzzy title matching (default true)."
      },
      "requireVerifiedEmail": {
        "type": "boolean",
        "description": "Only return contacts with a verified business email. Default false."
      },
      "limit": {
        "type": "integer",
        "description": "Max returned profiles to request (1-1000, default 3). Zero returned profiles are free; searches with returned profiles are billed in started 100-profile buckets.",
        "default": 3,
        "minimum": 1,
        "maximum": 1000
      }
    },
    "required": [
      "companyDomain",
      "titleKeywords"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output Schema

| Name            | Type     | Required | Default | Description |
| --------------- | -------- | -------- | ------- | ----------- |
| `result.status` | `string` | Yes      |         |             |
| `result.result` | `object` | Yes      |         |             |

<details>
  <summary>Show raw output schema</summary>

  ### Output JSON Schema

  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "status": {
        "type": "string"
      },
      "result": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "people": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "person_id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    },
                    "first_name": {
                      "type": "string"
                    },
                    "last_name": {
                      "type": "string"
                    },
                    "headline": {
                      "type": "string"
                    },
                    "linkedin_profile_url": {
                      "type": "string"
                    },
                    "flagship_profile_url": {
                      "type": "string"
                    },
                    "emails": {
                      "type": "array",
                      "items": {}
                    }
                  },
                  "required": [
                    "person_id",
                    "name",
                    "first_name",
                    "last_name",
                    "headline",
                    "linkedin_profile_url",
                    "flagship_profile_url",
                    "emails"
                  ],
                  "additionalProperties": true
                }
              },
              "meta": {
                "type": "object",
                "properties": {
                  "totalCount": {
                    "type": "integer"
                  },
                  "limit": {
                    "type": "integer"
                  },
                  "hasMore": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "totalCount",
                  "limit",
                  "hasMore"
                ],
                "additionalProperties": true
              }
            },
            "required": [
              "people",
              "meta"
            ],
            "additionalProperties": true
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": true
      }
    },
    "required": [
      "status",
      "result"
    ],
    "additionalProperties": true
  }
  ```
</details>

## Advanced: Direct CLI

<Info>
  Use direct execution for single payload debugging.
</Info>

```bash theme={null}
deepline tools execute crustdata_people_search --payload '{
  "companyDomain": "string",
  "titleKeywords": "string"
}' --json
```

### CLI flags

| Flag                        | Description                                         |
| --------------------------- | --------------------------------------------------- |
| `--json`                    | Print machine-readable output.                      |
| `--wait`                    | Wait for terminal provider status when supported.   |
| `--debug`                   | Enable wait mode with additional status/log output. |
| `--wait-timeout SECONDS`    | Max seconds to wait in wait mode.                   |
| `--poll-interval SECONDS`   | Polling interval in seconds during wait mode.       |
| `--timeout SECONDS`         | Request timeout in seconds.                         |
| `--connect-timeout SECONDS` | Connection timeout in seconds.                      |

## Provider API Context

<details>
  <summary>Show provider reference (optional)</summary>

  ````md theme={null}
  ### [ 🚀 Try Now ](https://docs.crustdata.com/api#tag/people-apis/POST/screener/persondb/search) Search and filter people based on various professional criteria. ## Endpoint ``` POST /screener/persondb/search ``` ## Data Dictionary [Explore the complete data dictionary for this endpoint here](https://docs.crustdata.com/docs/2024-11-01/dictionary/people-discovery) ### Response Fields Highlight Each profile in the response includes structured location information in the `location_details` object: ```json { "person_id": 123, "name": "Jane Smith", "region": "San Francisco Bay Area", "location_details": { "city": "San Francisco", "state": "California", "country": "United States", "continent": "North America" }, // ... other fields } ``` The `location_details` object provides easy access to parsed location components. Only non-null fields are included, so if location data is incomplete, some fields may be missing. ## Request Parameters | **Payload Keys** | **Description** | **Required** | | ------------- | ---------------------------------------------------------------------------------------------------- | ------------ | | `filters` | An object containing the filter conditions. See the Building Complex Filters section below for details. | Yes | | `sorts` | An array of sort criteria to order results. See the Sorting Results section below for details. | No | | `cursor` | Pagination cursor from previous response. Used for fetching the next page of results. | No | | `limit` | The number of results to return in a single request. Default value is `20`. Maximum is `1,000`. | No | | `post_processing` | Extra filtering rules applied to the search query. See Post-processing options below. | No | | `preview` | [**Access controlled**] &lt;br/>Provides basic profile details lookup. Default is `false` | No | ## Credit Usage - **People Discovery**: 3 credit per 100 results returned - **Preview Mode**: 0 credits when `preview=true` is used - **No Results, No Charges**: You are never charged credits when our APIs return no results. Credits are only deducted when data is successfully returned from your API requests. ## Finding Valid Filter Values with Autocomplete Use the **[PersonDB Autocomplete API](https://docs.crustdata.com/docs/2024-11-01/discover/auxiliary-apis/persondb-autocomplete)** to find exact field values for your search filters. This dedicated autocomplete endpoint helps you discover what values exist in our database. ### 🔍 When to Use PersonDB Autocomplete API **Use Case 1: Discover Valid Field Values** - Get possible values for any field returned by the PersonDB search endpoint - Convert partial or fuzzy text into matching value stored in our data for a field **Use Case 2: Build Dynamic Search Interfaces** - Power autocomplete dropdowns and search suggestions in your UI - Create responsive search experiences with accurate field matching ### Quick Example: Finding Region Values #### Step 1: Get region suggestions ```bash curl -X POST 'https://api.crustdata.com/screener/persondb/autocomplete' \ --header 'Authorization: Token $authToken' \ --header 'Content-Type: application/json' \ --data '{ "field": "region", "query": "san franci", "limit": 5 }' ``` #### Step 2: Use exact value in your search ```bash curl -X POST 'https://api.crustdata.com/screener/persondb/search' \ --header 'Authorization: Token $authToken' \ --header 'Content-Type: application/json' \ --data '{ "filters": { "filter_type": "region", "type": "=", "value": "San Francisco" } }' ``` **💡 Tip**: The autocomplete API works with **any field** from the [data dictionary](https://docs.crustdata.com/docs/2024-11-01/dictionary/people-discovery) ## Filter Operators ### Filter Structure Each filter condition requires three components: - `filter_type`: The field name to filter on (e.g., `"current_employers.title"`, `"region"`, `"years_of_experience_raw"`) - `type`: The operator to use (e.g., `"="`, `"in"`, `"(.)"`) - `value`: The value(s) to match **Complete filter example:** ```json { "filter_type": "current_employers.title", "type": "=", "value": "CEO" } ``` **Field name formats:** - **Top-level fields**: Use the field name directly (e.g., `"region"`, `"headline"`, `"years_of_experience_raw"`) - **Nested fields**: Use dot notation (e.g., `"current_employers.title"`, `"education_background.institute_name"`) - **Array fields**: Access nested properties within arrays (e.g., `"all_employers.name"`, `"past_employers.company_hq_location"`) See the [Data Dictionary](https://docs.crustdata.com/docs/2024-11-01/dictionary/people-discovery) for a complete list of available fields and their formats. ### Matching Operators | **Operator** | **Description** | **Example** | **Field Types** | | ------------ | --------------- | ----------- | --------------- | | `=` | Exact match | `{"filter_type": "current_employers.title", "type": "=", "value": "CEO"}` | All | | `!=` | Not equal to | `{"filter_type": "current_employers.title", "type": "!=", "value": "Intern"}` | All | | `in` | Matches any value in list | `{"filter_type": "current_employers.title", "type": "in", "value": ["CEO", "CTO", "CFO"]}` | All | | `not_in` | Doesn't match any value in list | `{"filter_type": "current_employers.title", "type": "not_in", "value": ["Intern", "Junior"]}` | All | :::note Case Sensitivity The `=` operator performs **case-insensitive** matching for text fields (e.g., searching for "CEO" will match "ceo", "Ceo", or "CEO"). The `IN` operator performs **exact, case-sensitive** matching. When using `IN`, ensure your values match the exact casing in the data. ::: :::tip Getting Exact Values for Filters For best results with `=` and `in` operators, use the [PersonDB Autocomplete API](https://docs.crustdata.com/docs/2024-11-01/discover/auxiliary-apis/persondb-autocomplete) to get exact field values. This is especially useful for fields like: - `region` - Get exact location names - `current_employers.name` - Get exact company names - `education_background.institute_name` - Get exact institution names - `current_employers.title` - Get standardized job titles - And many other text fields **Example workflow:** 1. Call autocomplete API:

  &lt;Note>
  Provider reference truncated for page speed. Use the provider's official docs for the full upstream reference.
  &lt;/Note>
  ````
</details>

## Cost

* Pricing model: `per_result` (per result).
* Estimated Deepline credits: `0.4` per pricing unit.
* Billing mode: `post_deduct`.
