> ## 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: Job Search

> Search indexed job postings by company, title, location, and date for hiring signals, with sorting, pagination, and aggregations.

Search indexed job postings by company, title, location, and date for hiring signals, with sorting, pagination, and aggregations.

> [!NOTE]
>
> Tool ID: `crustdata_v3_job_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_job_search',
  {
    "filters": {
      "field": "email",
      "type": "=",
      "value": "example"
    },
    "cursor": "cursor_123",
    "limit": 20
  },
);

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

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute crustdata_v3_job_search --input '{
  "filters": {
    "field": "email",
    "type": "=",
    "value": "example"
  },
  "cursor": "cursor_123",
  "limit": 20
}' --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": {
    "job_listings": [
      {
        "crustdata_job_id": 123,
        "job_details": {
          "job_id": 1,
          "title": "VP of Engineering",
          "category": "example"
        },
        "company": {
          "basic_info": {},
          "locations": {},
          "headcount": {}
        }
      }
    ]
  }
}
```

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

## Input reference

Request body for searching the indexed job dataset with filters, pagination, sorting, field selection, and aggregations.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.filters` | `object` | No | — | Search filter conditions. Can be a single condition or a nested group combined with AND/OR logic. Only indexed fields are filterable — see `SearchCondition.field` for the full list. |
| `payload.cursor` | `string` | No | — | Opaque pagination cursor returned in a prior response's `next_cursor` field. Pass this to fetch the next page of results with the same filter, sort, and field selection. |
| `payload.limit` | `integer` | No | `20` | Maximum number of job listings to return per page. Set to 0 when you only want aggregations. Minimum: 0. Maximum: 1000. |
| `payload.sorts` | `array` | No | — | Sort specifications for ordering results. Sorts are applied in order. |
| `payload.fields` | `array` | No | — | Fields to return in each job listing. Use dot-notation for nested fields (e.g., "job\_details.title", "company.basic\_info.name"). If omitted, all available fields are returned. Valid top-level groups: `crustdata_job_id`, `job_details`, `company`, `location`, `content`, `metadata`. Nested fields are supported (e.g., `company.basic_info`, `company.headcount`, `company.funding`). |
| `payload.aggregations` | `array` | No | — | Aggregation queries to run alongside the search. Set `limit: 0` if you want only aggregation results and no job rows. |

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

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Paginated response from the indexed job search endpoint. |
| `result.data.job_listings` | `array` | Yes | — | Job listings matching the search criteria for the current page. Empty when `limit` is 0 or when an aggregation-only query is made. |
| `result.data.job_listings[].crustdata_job_id` | `integer` | No | — | Unique Crustdata internal job identifier. |
| `result.data.job_listings[].job_details` | `object` | No | — | Core information about the job posting itself. |
| `result.data.job_listings[].job_details.job_id` | `integer \| null` | No | — | Job identifier (currently mirrors `crustdata_job_id`). |
| `result.data.job_listings[].job_details.title` | `string \| null` | No | — | Job title as posted. |
| `result.data.job_listings[].job_details.category` | `string \| null` | No | — | High-level job category (e.g., Engineering, Sales, Operations, Consultancy, Others). |
| `result.data.job_listings[].job_details.workplace_type` | `string \| null` | No | — | Workplace type if provided (e.g., Remote, Hybrid, On-site). May be empty. |
| `result.data.job_listings[].job_details.url` | `string \| null` | No | — | Canonical URL for the job posting. |
| `result.data.job_listings[].job_details.reposted_job` | `boolean \| null` | No | — | Whether the posting was detected as a repost of a prior listing. |
| `result.data.job_listings[].job_details.number_of_openings` | `integer \| null` | No | — | Number of openings the posting is hiring for. |
| `result.data.job_listings[].company` | `object` | No | — | Hiring company's firmographics at the time of indexing. |
| `result.data.job_listings[].company.basic_info` | `object` | No | — | Core identifiers, domain, industries. |
| `result.data.job_listings[].company.basic_info.crustdata_company_id` | `integer \| null` | No | — | Unique Crustdata internal company identifier. |
| `result.data.job_listings[].company.basic_info.name` | `string \| null` | No | — | Official company name. |
| `result.data.job_listings[].company.basic_info.primary_domain` | `string \| null` | No | — | Primary web domain for the company. |
| `result.data.job_listings[].company.basic_info.website` | `string \| null` | No | — | Company website URL. |
| `result.data.job_listings[].company.basic_info.professional_network_id` | `string \| null` | No | — | Identifier for the company on the professional network profile source. |
| `result.data.job_listings[].company.basic_info.industries` | `array \| null` | No | — | Industry classifications assigned to the company. |
| `result.data.job_listings[].company.locations` | `object` | No | — | Company's registered or primary office location. |
| `result.data.job_listings[].company.locations.country` | `string \| null` | No | — | ISO country code for the primary office. |
| `result.data.job_listings[].company.locations.state` | `string \| null` | No | — | State or region for the primary office. |
| `result.data.job_listings[].company.locations.city` | `string \| null` | No | — | City for the primary office. |
| `result.data.job_listings[].company.locations.street_address` | `string \| null` | No | — | Full street address for the primary office. |
| `result.data.job_listings[].company.headcount` | `object` | No | — | Company headcount at the time of indexing. |
| `result.data.job_listings[].company.headcount.total` | `integer \| null` | No | — | Total current headcount across all offices. |
| `result.data.job_listings[].company.headcount.range` | `string \| null` | No | — | Headcount bracket (e.g., "51-200", "5001-10000"). |
| `result.data.job_listings[].company.headcount.largest_headcount_country` | `string \| null` | No | — | ISO country code where the company has the most employees. |
| `result.data.job_listings[].company.followers` | `object` | No | — | Public profile follower counts. |
| `result.data.job_listings[].company.followers.count` | `integer \| null` | No | — | Total followers of the company's public profile. |
| `result.data.job_listings[].company.revenue` | `object` | No | — | Estimated revenue and public market signals. |
| `result.data.job_listings[].company.revenue.estimated` | `object` | No | — | Estimated annual revenue range in USD. |
| `result.data.job_listings[].company.revenue.estimated.lower_bound_usd` | `integer \| null` | No | — | Lower bound of the estimated annual revenue range, in USD. |
| `result.data.job_listings[].company.revenue.estimated.upper_bound_usd` | `integer \| null` | No | — | Upper bound of the estimated annual revenue range, in USD. |
| `result.data.job_listings[].company.revenue.public_markets` | `object \| null` | No | — | Public market information when the company is listed. |
| `result.data.job_listings[].company.revenue.public_markets.stock_symbols` | `array \| null` | No | — | Stock ticker symbols associated with the company. |
| `result.data.job_listings[].company.revenue.public_markets.fiscal_year_end` | `string \| null` | No | — | Fiscal year end if reported. |
| `result.data.job_listings[].company.revenue.acquisition_status` | `string \| null` | No | — | Acquisition status if known (e.g., acquired, merged). |
| `result.data.job_listings[].company.funding` | `object` | No | — | Venture funding details. |
| `result.data.job_listings[].company.funding.total_investment_usd` | `number \| null` | No | — | Total capital raised to date, in USD. |
| `result.data.job_listings[].company.funding.valuation_usd` | `number \| null` | No | — | Most recent valuation in USD. |
| `result.data.job_listings[].company.funding.last_fundraise_date` | `string \| null` | No | — | Date of the most recent funding event (ISO 8601). |
| `result.data.job_listings[].company.funding.last_round_type` | `string \| null` | No | — | Type of the most recent funding round (e.g., seed, series\_a, series\_b, secondary\_market). |
| `result.data.job_listings[].company.funding.num_funding_rounds` | `integer \| null` | No | — | Total number of funding rounds recorded. |
| `result.data.job_listings[].company.funding.investors` | `array \| null` | No | — | Known investors across all rounds. |
| `result.data.job_listings[].company.competitors` | `object` | No | — | Known competitor companies. |
| `result.data.job_listings[].company.competitors.websites` | `array \| null` | No | — | List of competitor website URLs. |
| `result.data.job_listings[].location` | `object` | No | — | Job's advertised location. The `city`, `state`, and `country` fields are derived by geocoding the raw location string, so their values are normalized place names (e.g. `United States` rather than the raw text's country wording). |
| `result.data.job_listings[].location.raw` | `string \| null` | No | — | Raw location string as advertised on the job posting. |
| `result.data.job_listings[].location.city` | `string \| null` | No | — | City from geocoding the raw location. Empty string when the raw location resolves to a broader area than a city (e.g. a metro area). |

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_job_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.