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

# TheirStack: Job Search

> Finding job postings across many countries with company and technology filters. Includes SDK V2 examples, input constraints, response fields, and Deepline cost.

Finding job postings across many countries with company and technology filters.

> [!NOTE]
>
> Tool ID: `theirstack_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(
  'theirstack_job_search',
  {
    "order_by": [
      {
        "desc": true,
        "field": "date_posted"
      },
      {
        "desc": true,
        "field": "discovered_at"
      }
    ],
    "offset": 0,
    "page": 0
  },
);

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

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute theirstack_job_search --input '{
  "order_by": [
    {
      "desc": true,
      "field": "date_posted"
    },
    {
      "desc": true,
      "field": "discovered_at"
    }
  ],
  "offset": 0,
  "page": 0
}' --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": {
    "metadata": {
      "total_results": 1,
      "truncated_results": 0,
      "truncated_companies": 0
    },
    "data": [
      {
        "id": 123,
        "job_title": "VP of Engineering",
        "url": "https://example.com",
        "date_posted": "2026-01-15",
        "company": "Example Corp",
        "source_url": "https://example.com",
        "discovered_at": "2026-01-15T12:00:00Z",
        "company_object": {
          "id": "id_123",
          "name": "Example"
        }
      }
    ]
  }
}
```

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

## Input reference

This endpoint lets you search for jobs posted on thousands of websites and filter by multiple filters, such as job titles, companies, locations, company attributes, dates and many more. You must specify at least one of the following filters, or otherwise your request will fail: `posted_at_max_age_days`, `posted_at_gte`, `posted_at_lte`, `company_domain_or`, `company_linkedin_url_or`, `company_name_or`. This is for performance reasons. To retrieve jobs from a specific company or a list of companies, you can apply any of the following filters: `company_domain_or`, `company_linkedin_url_or`, `company_name_or`, `company_name_case_insensitive_or`. When using multiple company identifier filters, the endpoint will return jobs from companies that match any of the specified identifiers. Therefore, it is advisable to create a separate request for each company if you intend to use more than one See the live schema below for the complete notes.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.order_by` | `array` | No | `[&#123;"desc":true,"field":"date_posted"&#125;,&#123;"desc":true,"field":"discovered_at"&#125;]` | List of column objects. You can pass several columns to order by, in order of priority. Only `field` is required, `desc` is True by default. |
| `payload.offset` | `integer` | No | `0` | Number of results to skip. Required for [offset-based pagination](https://theirstack.com/en/docs/api-reference/pagination). Minimum: 0. |
| `payload.page` | `integer` | No | `0` | Page number. Required when using [page-based pagination](https://theirstack.com/en/docs/api-reference/pagination). Minimum: 0. |
| `payload.limit` | `integer` | No | `25` | Number of results per page. Maximum 500 per page. Use `page` to fetch additional pages. Minimum: 1. |
| `payload.cursor` | `string` | No | — | Cursor for pagination |
| `payload.job_title_or` | `array` | No | `[]` | Natural language patterns to match job titles. Case-insensitive. Only jobs with title that match any of these patterns will be returned. Uses Postgres full text search. |
| `payload.job_title_not` | `array` | No | `[]` | Natural language patterns to match job titles. Case-insensitive. Only jobs with title that do not match any of these patterns will be returned. Uses Postgres full text search. |
| `payload.job_title_pattern_and` | `array` | No | `[]` | Regex patterns to match job titles. Case-insensitive. Only jobs with title that match all of these patterns will be returned. |
| `payload.job_title_pattern_or` | `array` | No | `[]` | Regex patterns to match job titles. Case-insensitive. Jobs whose job title matches of the filters will be returned. |
| `payload.job_title_pattern_not` | `array` | No | `[]` | Regex patterns to match job titles. Case-insensitive. Jobs whose job title doesn't match any of the patterns will be returned. |
| `payload.job_country_code_or` | `array` | No | `[]` | 2-letter ISO country code of the location of the job. Can pass more than 1 |
| `payload.job_country_code_not` | `array` | No | `[]` | 2-letter ISO country code of the location of the job. Can pass more than 1. Will exclude jobs from these countries |
| `payload.posted_at_max_age_days` | `integer` | No | — | Date posted max age in days. If 0, only return jobs posted today. If 1, from today and yesterday, etc. |
| `payload.posted_at_gte` | `string` | No | — | ISO 8601 date string (yyyy-mm-dd). Only jobs published in this date or after will be returned. Format: `date`. |
| `payload.posted_at_lte` | `string` | No | — | ISO 8601 date string (yyyy-mm-dd). Only jobs published in this date or before will be returned. Format: `date`. |
| `payload.discovered_at_max_age_days` | `integer` | No | — | If 0, only return jobs added to our database in the current day. If 1, from today and yesterday, etc. |
| `payload.discovered_at_min_age_days` | `integer` | No | — | If 1, only return jobs discovered by TheirStack until yesterday. If 2, until 2 days ago, etc. |
| `payload.discovered_at_gte` | `string \| null` | No | — | Only jobs discovered by TheirStack on this date or datetime or after will be returned. In UTC timezone. |
| `payload.discovered_at_lte` | `string \| null` | No | — | Only jobs discovered by TheirStack on this date or datetime or before will be returned. In UTC timezone. |
| `payload.job_description_pattern_or` | `array` | No | `[]` | Regex patterns to look for in job descriptions. Case-sensitive. Results will include jobs whose description matches any of these patterns. Use (?i) at the start of a pattern to make it case-insensitive. Can pass more than one. |
| `payload.job_description_pattern_not` | `array` | No | `[]` | Regex patterns to look for in job descriptions. Case-sensitive. Results will include jobs whose description don't match any of these patterns. Use (?i) at the start of a pattern to make it case-insensitive. Can pass more than one. |
| `payload.job_description_pattern_and` | `array` | No | `[]` | Regex patterns that must ALL match the job description (AND logic). Use (?i) at the start of a pattern to make it case-insensitive. Results will only include jobs whose description matches every pattern in this list. |
| `payload.job_description_pattern_is_case_insensitive` | `boolean` | No | `true` | Deprecated. Has no effect. |
| `payload.job_description_contains_or` | `array` | No | `[]` | Search for whole words in job descriptions using word boundaries (\b). Case-insensitive by default, except for the patterns that are uppercase - in that case we'll respect it. Only finds complete words (e.g., searching 'quality' won't match 'inequality'). Results will include jobs whose description contains any of these words. |
| `payload.job_description_contains_not` | `array` | No | `[]` | Exclude jobs whose description contains any of these whole words using word boundaries (\b). Case-insensitive by default, except for the patterns that are uppercase - in that case we'll respect it. Only finds complete words (e.g., searching 'quality' won't match 'inequality'). Results will exclude jobs whose description contains any of these words. |
| `payload.job_description_pattern_case_sensitive_or` | `array` | No | `[]` | Deprecated. Use job\_description\_pattern\_or instead, which now behaves identically. |
| `payload.remote` | `boolean` | No | — | True: only show remote jobs. False: only show non-remote jobs. None: show all jobs. |
| `payload.only_jobs_with_reports_to` | `boolean` | No | — | Only return jobs where we identified the role the hired person would report to. Deprecated field, use reports\_to\_exists instead. |
| `payload.reports_to_exists` | `boolean` | No | — | Only return jobs where we identified the role the hired person would report to. If True, only return jobs where we identified the role the hired person would report to. If False, only return jobs where we didn't identify the role the hired person would report to. If None, return all jobs. |
| `payload.final_url_exists` | `boolean` | No | — | (Use `property_exists_or / property_exists_and` instead) Only return jobs with a final URL. Typically jobs that were originally posted on an ATS. If True, only return jobs with a final URL. If False, only return jobs without a final URL. If None, return all jobs. |
| `payload.only_jobs_with_hiring_managers` | `boolean` | No | — | Only return jobs with a hiring manager. If True, only return jobs with a hiring manager. If False, only return jobs without a hiring manager. If None, return all jobs. |
| `payload.hiring_managers_exists` | `boolean` | No | — | (Use `property_exists_or / property_exists_and` instead) If True, only return jobs with a hiring manager. If False, only return jobs without a hiring manager. If None, return all jobs. |
| `payload.job_id_or` | `array` | No | `[]` | Get jobs with these IDs only. |
| `payload.job_id_not` | `array` | No | `[]` | Exclude jobs with these IDs. |
| `payload.job_ids` | `array` | No | `[]` | Get jobs with these IDs only. Deprecated parameter, use job\_id\_or instead. |
| `payload.job_seniority_or` | `array` | No | `[]` | Will return jobs where the seniority is any of the ones passed here |
| `payload.min_salary_usd` | `number` | No | — | Minimum annual salary in USD. For example, 100000 means \$100,000. |
| `payload.max_salary_usd` | `number` | No | — | Maximum annual salary in USD. For example, 150000 means \$150,000. |
| `payload.job_technology_slug_or` | `array` | No | `[]` | Will return jobs where any of these technologies appear. Case sensitive. Pass slugs. Check out all the technologies we track with the technologies endpoint. If you pass more than one technology, we will return jobs that mentnion all of the technologies. |
| `payload.job_technology_slug_not` | `array` | No | `[]` | Will return jobs where none of these technologies appear. Case sensitive. Pass slugs. Check out all the technologies we track with the technologies endpoint. |
| `payload.job_technology_slug_and` | `array` | No | `[]` | Will return jobs where all of these technologies appear. Case sensitive. Pass slugs. Check out all the technologies we track with the technologies endpoint. |
| `payload.job_keyword_slug_or` | `array` | No | `[]` | Will return jobs where any of these keyword slugs appear. Case sensitive. Check out all the keywords we track at [GET /v0/catalog/keywords](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_keywords_v0) |
| `payload.job_keyword_slug_and` | `array` | No | `[]` | Will return jobs where all of these keyword slugs appear. Case sensitive. Check out all the keywords we track at [GET /v0/catalog/keywords](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_keywords_v0) |
| `payload.job_keyword_slug_not` | `array` | No | `[]` | Will return jobs where none of these keyword slugs appear. Case sensitive. Check out all the keywords we track at [GET /v0/catalog/keywords](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_keywords_v0) |
| `payload.job_location_pattern_or` | `array` | No | `[]` | Regex patterns to match job locations. Case-insensitive. Searches both the location field and the enhanced locations array (using normalized city and state name fields within each location element). Jobs matching ANY of the provided patterns will be returned. Use this to find jobs in specific cities, states, or regions. |
| `payload.job_location_pattern_not` | `array` | No | `[]` | Regex patterns to exclude job locations. Case-insensitive. Searches both the location field and the enhanced locations array (using normalized city and state name fields within each location element). Jobs matching ANY of the provided patterns will be EXCLUDED from results. Use this to filter out specific locations. |
| `payload.job_location_or` | `array` | No | `[]` | Filter jobs by location. Returns jobs whose locations match ANY of the specified location criteria. Each location criteria is specified using a JobLocationFilter object. (You can find location IDs using the [locations catalog endpoint](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_locations_v0)) |
| `payload.job_location_not` | `array` | No | `[]` | Filter jobs by location. Returns jobs whose locations DO NOT match ANY of the specified location criteria. Each location criteria is specified using a JobLocationFilter object. (You can find location IDs using the [locations catalog endpoint](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_locations_v0)) |
| `payload.url_domain_or` | `array` | No | `[]` | Include jobs only if their URL domain (from `url` or `source_url`) is in the provided case-insensitive list. For example, \['greenhouse.io', 'workable.com'] will match URLs containing 'greenhouse.io' or 'workable.com'. Refer to our list of sources at [https://theirstack.com/en/docs/data/job/sources](https://theirstack.com/en/docs/data/job/sources). |
| `payload.url_domain_not` | `array` | No | `[]` | Exclude jobs if their URL domain (from `url` or `source_url`) is in the provided case-insensitive list. For example, \['greenhouse.io', 'workable.com'] will exclude URLs containing 'greenhouse.io' or 'workable.com'. Refer to our list of sources at [https://theirstack.com/en/docs/data/job/sources](https://theirstack.com/en/docs/data/job/sources). |
| `payload.scraper_name_pattern_or` | `array` | No | `[]` | Regex patterns to match job sources. Case-insensitive. |
| `payload.easy_apply` | `boolean` | No | — | If True, only return jobs that can be applied directly through the job board. If False, only return jobs that require redirecting to the company's website. |
| `payload.employment_statuses_or` | `array` | No | — | Filter jobs by employment status. Returns jobs that match any of the specified employment types. If no values are provided or an empty list is sent, all jobs regardless of employment status will be returned. |
| `payload.company_name_or` | `array` | No | `[]` | Only return companies that match these names exactly, case-sensitively. This filter acts as an OR filter, so if you pass more than one company name, it will return companies that match any of the names. |
| `payload.company_name_case_insensitive_or` | `array` | No | `[]` | Only return companies that match these names exactly, case-insensitively. |
| `payload.company_id_or` | `array` | No | `[]` | Only return companies that match these IDs exactly. This filter acts as an OR filter, so if you pass more than one company ID, it will return companies that match any of the IDs. |
| `payload.company_domain_or` | `array` | No | `[]` | Only return companies that match these domains exactly. It accepts full urls ([https://www.google.com/](https://www.google.com/)) and emails ([john.polo@gmail.com](mailto:john.polo@gmail.com)). This filter acts as an OR filter, so if you pass more than one company domain, it will return companies that match any of the domains. |
| `payload.company_domain_not` | `array` | No | `[]` | Only return companies that don't match these domains exactly. It accepts full urls ([https://www.google.com/](https://www.google.com/)) and emails ([john.polo@gmail.com](mailto:john.polo@gmail.com)). |
| `payload.company_name_not` | `array` | No | `[]` | Only return companies that don't match these names exactly, case-sensitively. |
| `payload.company_name_partial_match_or` | `array` | No | `[]` | Company names. Will return companies whose name contain any of the the substrings passed here, case-insensitively. For example, if you pass "google", it will return "Google", "Google LLC", "Google Inc", etc. |
| `payload.company_name_partial_match_not` | `array` | No | `[]` | Company names. Will return companies whose name doesn't contain any of the the substrings passed here, case-insensitively. For example, if you pass 'google', it will exclude 'Google', 'Google LLC', 'Google Inc', etc. |
| `payload.company_linkedin_url_or` | `array` | No | `[]` | Return companies whose LinkedIn URL matches any of the slugs passed here. Can also pass full LinkedIn company URLs. |
| `payload.blur_company_data` | `boolean` | No | `false` | Return blurred company and job fields for preview. Free preview availability depends on workspace eligibility, and preview is unavailable when filtering by company identifiers (company\_name, company\_domain, company\_linkedin\_url, company\_id). Count-only searches are still billable by Deepline: when include\_total\_results=true and limit=1, each returned result is billed even if this flag is true. Learn more at [https://theirstack.com/en/docs/api/preview-data-mode](https://theirstack.com/en/docs/api/preview-data-mode). |
| `payload.property_exists_or` | `array` | No | `[]` | Return jobs that have any of these fields not null. For example, if you pass \['final\_url'], it will return jobs that have a final\_url set. This field also support chaining of fields. For example, if you pass \['company\_object.domain', 'company\_object.linkedin\_url'], it will return jobs that have a company domain or a company linkedin\_url set. |
| `payload.property_exists_and` | `array` | No | `[]` | — |
| `payload.company_description_pattern_or` | `array` | No | `[]` | Case-insensitive patterns to match in the company description. Will return companies that match any of the patterns. |
| `payload.company_description_pattern_not` | `array` | No | `[]` | Case-insensitive patterns to match in the company description. Will return companies that match any of the patterns. |
| `payload.company_description_pattern_accent_insensitive` | `boolean` | No | `false` | Set to True to make company description searches accent insensitive. For example, "á" will match "a" as well. |
| `payload.min_revenue_usd` | `integer` | No | — | Minimum company revenue, in USD |
| `payload.max_revenue_usd` | `integer` | No | — | Maximum company revenue, in USD |
| `payload.min_employee_count` | `integer` | No | — | Minimum number of employees in a company |
| `payload.max_employee_count` | `integer` | No | — | Maximum number of employees in a company |
| `payload.min_employee_count_or_null` | `integer` | No | — | Minimum number of employees in a company. If we don't have company size information, we will return it as well. |
| `payload.max_employee_count_or_null` | `integer` | No | — | Maximum number of employees in a company. If we don't have company size information, we will return it as well. |
| `payload.min_funding_usd` | `integer` | No | — | Minimum company funding, in USD |
| `payload.max_funding_usd` | `integer` | No | — | Maximum company funding, in USD |
| `payload.funding_stage_or` | `array` | No | `[]` | Funding stages of companies returned. Possible values: \['angel', 'convertible\_note', 'debt\_financing', 'equity\_crowdfunding', 'other', 'private\_equity', 'seed', 'series\_a', 'series\_b', 'series\_c', 'series\_d', 'series\_e', 'series\_f', 'series\_g', 'series\_h', 'venture\_round\_not\_specified', 'series\_i', 'series\_j', 'undisclosed', 'series\_unknown', 'pre\_seed', 'post\_ipo\_secondary', 'post\_ipo\_equity', 'post\_ipo\_debt', 'non\_equity\_assistance', 'late\_vc', 'initial\_coin\_offering', 'growth\_equity\_vc', See the live schema for the complete constraint. |
| `payload.industry_or` | `array` | No | `[]` | Names of industries, case-insensitive. Results will only include companies that belong to any of the industries specified in this parameter. Available values: [GET /v0/catalog/industries](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_industries_v0) WARNING: Deprecated parameter. Use the industry\_id\_or field instead. |
| `payload.industry_not` | `array` | No | `[]` | Names of industries, case-insensitive. Results will exclude companies that belong to any of the industries specified in this parameter. Available values: [GET /v0/catalog/industries](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_industries_v0) WARNING: Deprecated parameter. Use the industry\_id\_not field instead. |
| `payload.industry_id_or` | `array` | No | `[]` | Industry codes. You can use any of [LinkedIn's Industry Codes V2](https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/industry-codes-v2) or [GET /v0/catalog/industries](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_industries_v0) |
| `payload.industry_id_not` | `array` | No | `[]` | Industry ids to exclude.You can use any of [LinkedIn's Industry Codes V2](https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/industry-codes-v2) or [GET /v0/catalog/industries](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_industries_v0) |
| `payload.company_tags_or` | `array` | No | `[]` | Return companies that match any of these keywords |
| `payload.company_type` | `"recruiting_agency" \| "direct_employer" \| "all"` | No | — | Filter by company type. Allowed: `recruiting_agency`, `direct_employer`, `all`. |
| `payload.company_investors_or` | `array` | No | `[]` | Investors of the company |
| `payload.company_investors_partial_match_or` | `array` | No | `[]` | Investors of the company. Will return companies for which any of their investors contains any of the substrings passed here. For example, if you pass 'andree', all funds that match it (like 'Andreessen Horowitz', 'Andreessen Horowitz LLC', etc). |
| `payload.company_technology_slug_or` | `array` | No | `[]` | Will return jobs from companies that that have mentioned any of these technologies in their jobs (not necessarily in the jobs returned). Case sensitive. Pass slugs. Check out all the technologies we track at [GET /v0/catalog/technologies](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_technologies_v0). Deprecated: use company\_keyword\_slug\_or instead. |
| `payload.company_technology_slug_and` | `array` | No | `[]` | Will return jobs from companies that that have mentioned all of these technologies in their jobs (not necessarily in the jobs returned). Case sensitive. Pass slugs. Check out all the technologies we track at [GET /v0/catalog/technologies](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_technologies_v0). Deprecated: use company\_keyword\_slug\_and instead. |
| `payload.company_technology_slug_not` | `array` | No | `[]` | Will return jobs from companies that that haven't mentioned any of these technologies in their jobs. Case sensitive. Pass slugs. Check out all the technologies we track at [GET /v0/catalog/technologies](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_technologies_v0). Deprecated: use company\_keyword\_slug\_not instead. |
| `payload.company_keyword_slug_or` | `array` | No | `[]` | Return results from companies that have mentioned any of these keywords in their jobs. Case sensitive. Pass slugs. Check out all the keywords we track at [GET /v0/catalog/keywords](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_keywords_v0) |
| `payload.company_keyword_slug_and` | `array` | No | `[]` | Return results from companies that have mentioned all of these keywords in their jobs. Case sensitive. Pass slugs. Check out all the keywords we track at [GET /v0/catalog/keywords](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_keywords_v0) |
| `payload.company_keyword_slug_not` | `array` | No | `[]` | Return results from companies that haven't mentioned any of these keywords in their jobs. Case sensitive. Pass slugs. Check out all the keywords we track at [GET /v0/catalog/keywords](https://theirstack.com/en/docs/api-reference/catalog/get_catalog_keywords_v0) |
| `payload.only_yc_companies` | `boolean` | No | `false` | Only return YC companies |
| `payload.company_location_pattern_or` | `array` | No | `[]` | Return companies whose city matches any of the patterns passed here. Case insensitive. For example, if you pass 'san francisco', it will return companies whose city is 'San Francisco', 'San Francisco Bay Area', etc. |
| `payload.company_country_code_or` | `array` | No | `[]` | Return companies whose HQ country code is any of the ones passed here, case sensitive. Pass ISO2 country codes. |
| `payload.company_country_code_not` | `array` | No | `[]` | Return companies whose HQ country code is not any of the ones passed here, case sensitive. Pass ISO2 country codes. |
| `payload.company_list_id_or` | `array` | No | `[]` | Return companies that belong to any of the company lists passed here |
| `payload.company_list_id_not` | `array` | No | `[]` | Return companies that don't belong to any of the company lists passed here |
| `payload.company_linkedin_url_exists` | `boolean` | No | — | (Use `property_exists_or / property_exists_and` instead) Only return companies with a LinkedIn URL |
| `payload.revealed_company_data` | `boolean` | No | — | This field is deprecated and has no effect. |
| `payload.last_funding_round_date_lte` | `string` | No | — | Only return companies whose last funding round date is before or on this date. Format: 'YYYY-MM-DD' Format: `date`. |
| `payload.last_funding_round_date_gte` | `string` | No | — | Only return companies whose last funding round date is after or on this date. Format: 'YYYY-MM-DD' Format: `date`. |
| `payload.include_total_results` | `boolean` | No | `false` | When enabled, calculates and returns `total_results` and `total_companies` fields in the response. WARNING: This significantly slows down responses as it requires reading the entire dataset. Recommended usage: enable only for the initial request to get totals, then disable for subsequent pagination requests. |

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

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Provider response payload. |
| `result.data.metadata` | `object` | Yes | — | — |
| `result.data.metadata.total_results` | `integer \| null` | No | — | Total number of results |
| `result.data.metadata.truncated_results` | `integer \| null` | No | `0` | Number of results that were not returned because the user doesn't have enough credits to fetch them all the possible results the API could have returned |
| `result.data.metadata.truncated_companies` | `integer \| null` | No | `0` | Number of companies that were not returned because the user doesn't have enough credits to fetch all the possible results the API could have returned |
| `result.data.metadata.total_companies` | `integer \| null` | No | — | Total number of companies |
| `result.data.data` | `array` | Yes | — | — |
| `result.data.data[].id` | `integer` | Yes | — | ID of the job |
| `result.data.data[].job_title` | `string` | Yes | — | Job title |
| `result.data.data[].url` | `string` | Yes | — | URL of the job post |
| `result.data.data[].date_posted` | `string` | Yes | — | Date when the job was posted Format: `date`. |
| `result.data.data[].has_blurred_data` | `boolean` | No | `false` | Whether the returned object has company identifiable data blurred or not |
| `result.data.data[].company` | `string` | Yes | — | Company name. This field is deprecated, please don't use it |
| `result.data.data[].final_url` | `string \| null` | No | — | Is the URL of the job in the career page of the company. |
| `result.data.data[].source_url` | `string` | Yes | — | Is the url TheirStack used to get the job data. |
| `result.data.data[].location` | `string \| null` | No | — | This is the city of the job. |
| `result.data.data[].short_location` | `string \| null` | No | — | It's a combination of the city and the state of the job. |
| `result.data.data[].long_location` | `string \| null` | No | — | It's a combination of the city, the state and the postal code of the job. |
| `result.data.data[].state_code` | `string \| null` | No | — | The state code of the job. |
| `result.data.data[].latitude` | `number \| null` | No | — | The latitude of the job. |
| `result.data.data[].longitude` | `number \| null` | No | — | The longitude of the job. |
| `result.data.data[].postal_code` | `string \| null` | No | — | The postal code of the job. |
| `result.data.data[].remote` | `boolean \| null` | No | — | If the job is remote. |
| `result.data.data[].hybrid` | `boolean \| null` | No | — | If the job is hybrid. A hybrid position is a job that combines remote and in-office work. |
| `result.data.data[].salary_string` | `string \| null` | No | — | The salary of the job in the local currency. If a similar field is present in the job source, this property will contain the same content. If no similar field is present, the content will be have the following format: - per year. For the currencies where the symbol precedes the digits, the format will be - per year. In these latter two cases, both the min and max annual salary are expressed in either k (for thousands) or M (for millions). |
| `result.data.data[].min_annual_salary` | `integer \| null` | No | — | The minimum annual salary of the job in the local currency. |
| `result.data.data[].min_annual_salary_usd` | `number \| null` | No | — | The minimum annual salary of the job in USD. |
| `result.data.data[].max_annual_salary` | `integer \| null` | No | — | The maximum annual salary of the job in the local currency. |
| `result.data.data[].max_annual_salary_usd` | `number \| null` | No | — | The maximum annual salary of the job in USD. |
| `result.data.data[].avg_annual_salary_usd` | `number \| null` | No | — | This property calculates the average annual salary for a job in USD, based on the available minimum and maximum annual salary values (both already converted to USD): If both min\_annual\_salary\_usd and max\_annual\_salary\_usd are missing or zero, it returns None. If only the minimum is missing, it returns the maximum value. If only the maximum is missing, it returns the minimum value. If both are present, it returns the average of the two, rounded to two decimal places. This ensures the property See the live schema for the complete constraint. |
| `result.data.data[].salary_currency` | `string \| null` | No | — | The currency of the salary of the job. |
| `result.data.data[].countries` | `array \| null` | No | — | Countries of the job |
| `result.data.data[].country` | `string \| null` | No | — | Country name of the job |
| `result.data.data[].country_codes` | `array \| null` | No | — | Two-letter country codes (ISO 3166-1 alpha-2) representing the job's locations. |
| `result.data.data[].country_code` | `string \| null` | No | — | Two-letter country code (ISO 3166-1 alpha-2) representing the job's location. If the job has multiple locations, the first one is returned. |
| `result.data.data[].cities` | `array \| null` | No | — | Cities of the job |
| `result.data.data[].continents` | `array \| null` | No | — | Continents of the job |
| `result.data.data[].seniority` | `"c_level" \| "staff" \| "senior" \| "junior" \| "mid_level"` | No | — | Seniority level of the job Allowed: `c_level`, `staff`, `senior`, `junior`, `mid_level`. |
| `result.data.data[].discovered_at` | `string` | Yes | — | Date when the job was discovered by TheirStack Format: `date-time`. |
| `result.data.data[].closed_at` | `string \| null` | No | — | Datetime (UTC) at which TheirStack detected the job posting was closed by the source. `null` means the job is still considered open (or we don't know yet). Format: `date-time`. |
| `result.data.data[].company_domain` | `string \| null` | No | — | Company website domain |
| `result.data.data[].hiring_team` | `array \| null` | No | — | Hiring team who posted the job |
| `result.data.data[].hiring_team[].first_name` | `string \| null` | No | — | First name of the person |
| `result.data.data[].hiring_team[].full_name` | `string \| null` | No | — | Full name of the person |
| `result.data.data[].hiring_team[].linkedin_url` | `string \| null` | No | — | LinkedIn URL of the person |
| `result.data.data[].hiring_team[].role` | `string \| null` | No | — | Role of the person |
| `result.data.data[].hiring_team[].image_url` | `string \| null` | No | — | Image URL of the person |
| `result.data.data[].hiring_team[].thumbnail_url` | `string \| null` | No | — | Thumbnail URL of the person |
| `result.data.data[].reposted` | `boolean \| null` | No | — | Indicates whether the employer has republished this job posting. |
| `result.data.data[].date_reposted` | `string \| null` | No | — | Date when the job was reposted Format: `date`. |

The table shows the first 50 fields. Use the live contract below for every field.

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

## Deepline cost

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

## Related documentation

* [TheirStack provider guide](https://deepline.com/docs/providers/theirstack/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.