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

# Bloomberry Search Job Postings: Inputs, Cost & CLI Example

> Returns job postings, with full-text descriptions containing a given keyword, for a specific company, or for a specific normalized job title Need an API key?

## 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=bloomberry_search_job_postings:{}' --json
```

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

## Input Schema

| Name                                         | Type      | Required | Default | Description                                                                                                                                                                                                                                                                                                                                                                                                                            |
| -------------------------------------------- | --------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payload.keyword`                            | `string`  | No       |         | A keyword to search for in the full-text description of job postings. You can separate multiple keywords with "OR". For example 'machine learning OR LLMs' will find jobs that have either 'machine learning' or 'LLMs'. Please exclude any quotes from the query                                                                                                                                                                      |
| `payload.normalized_job_titles`              | `string`  | No       |         | A list of normalized job titles to filter by, separated by ';'. The entire list of normalized job titles can be found here [https://api.revealera.com/normalized\_job\_titles.txt](https://api.revealera.com/normalized_job_titles.txt) (the 2nd column in this CSV)                                                                                                                                                                   |
| `payload.domain`                             | `string`  | No       |         | The website domain of the company to filter by. Note that one of keyword, normalized\_job\_titles, and domain MUST be passed                                                                                                                                                                                                                                                                                                           |
| `payload.search_job_title_only`              | `boolean` | No       | `false` | if keyword is passed, and this is true, we'll search just for the title of the job posting, instead of BOTH the title and the description                                                                                                                                                                                                                                                                                              |
| `payload.begin_date`                         | `string`  | No       |         | Start date for filtering job postings. Defaults to '2020-01-01'.                                                                                                                                                                                                                                                                                                                                                                       |
| `payload.end_date`                           | `string`  | No       |         | End date for filtering job postings. Defaults to end of today.                                                                                                                                                                                                                                                                                                                                                                         |
| `payload.search_companies_added_before_date` | `string`  | No       |         | Only search job postings in companies that were "added" on or before this date. We constantly add companies to our database, so if you're looking at any trends data such as # of job postings over time containining a certain keywords since a certain date (ie. through facets) you wouldn't want to include jobs from companies that were added after a certain date (because that would overinflate the volume for recent months) |
| `payload.limit`                              | `integer` | No       | `20`    | Job postings per page                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `payload.active_only`                        | `boolean` | No       | `false` | True if you only want to see active job postings (not deleted or taken down), false otherwise                                                                                                                                                                                                                                                                                                                                          |
| `payload.countries`                          | `string`  | No       |         | Only show jobs from companies *headquartered* (not necessarily where the job is located) in the specified countries. Country codes must be in ISO 3166-1 alpha-2 format. Separate multiple values with ';'                                                                                                                                                                                                                             |
| `payload.region_countries`                   | `string`  | No       |         | Only show jobs that are located in the specified countries. Country codes must be in ISO 3166-1 alpha-2 format. Separate multiple values with ';' Note: If you pass in a country code, there is a chance we will not show jobs that might be located in that country because our parser wasn't able to parse the country from the job posting                                                                                          |
| `payload.exact_match`                        | `boolean` | No       | `true`  | True if the job posting must match the keyword passed in EXACTLY, in the order passed. For example, if keyword = "content marketing", only job postings with "content marketing" together as an exact phrase will be returned                                                                                                                                                                                                          |
| `payload.company_size_range`                 | `string`  | No       |         | Only show jobs from companies with number of employees that match the specified size ranges. Separate multiple values with ';'. Possible ranges are 1 employee, 2-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000, 5,001-10,000, 10,001+                                                                                                                                                                                            |
| `payload.remote_only`                        | `boolean` | No       | `false` | If true, only show jobs that are marked as remote                                                                                                                                                                                                                                                                                                                                                                                      |
| `payload.show_facets`                        | `boolean` | No       | `false` | If true, show aggregate statistics on number of jobs found per month                                                                                                                                                                                                                                                                                                                                                                   |
| `payload.facet_on`                           | `string`  | No       |         | If you wish to get aggregate statistics on the unique # of companies per month that match this query (NOT # of jobs), pass in 'company\_domain'. Otherwise, pass 'jobs' (default). Only two possible values are allowed: 'jobs' or 'company\_domain'. If show\_facets is false, this field is ignored.                                                                                                                                 |
| `payload.next_token`                         | `string`  | No       |         | Pagination token from previous response (located in "pagination" > "next\_token") to fetch the next page. Leave blank for the first page                                                                                                                                                                                                                                                                                               |
| `payload.company_industry`                   | `string`  | No       |         | Only show job postings from companies in the specified industries. We look at the LinkedIn company page to determine industries. All possible industries are available at [https://api.revealera.com/linkedin\_industries.txt](https://api.revealera.com/linkedin_industries.txt) . Separate multiple values with ';'                                                                                                                  |

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

  ### Input JSON Schema

  ```json theme={null}
  {
    "type": "object",
    "description": "Returns job postings, with full-text descriptions containing a given keyword, for a specific company, or for a specific normalized job title Need an API key? Get a free API key here .",
    "properties": {
      "keyword": {
        "type": "string",
        "description": "A keyword to search for in the full-text description of job postings. You can separate multiple keywords with \"OR\". For example 'machine learning OR LLMs' will find jobs that have either 'machine learning' or 'LLMs'. Please exclude any quotes from the query"
      },
      "normalized_job_titles": {
        "type": "string",
        "description": "A list of normalized job titles to filter by, separated by ';'. The entire list of normalized job titles can be found here https://api.revealera.com/normalized_job_titles.txt (the 2nd column in this CSV)"
      },
      "domain": {
        "type": "string",
        "description": "The website domain of the company to filter by. Note that one of keyword, normalized_job_titles, and domain MUST be passed"
      },
      "search_job_title_only": {
        "type": "boolean",
        "description": "if keyword is passed, and this is true, we'll search just for the title of the job posting, instead of BOTH the title and the description",
        "default": false
      },
      "begin_date": {
        "type": "string",
        "description": "Start date for filtering job postings. Defaults to '2020-01-01'.",
        "format": "date"
      },
      "end_date": {
        "type": "string",
        "description": "End date for filtering job postings. Defaults to end of today.",
        "format": "date"
      },
      "search_companies_added_before_date": {
        "type": "string",
        "description": "Only search job postings in companies that were \"added\" on or before this date. We constantly add companies to our database, so if you're looking at any trends data such as # of job postings over time containining a certain keywords since a certain date (ie. through facets) you wouldn't want to include jobs from companies that were added after a certain date (because that would overinflate the volume for recent months)",
        "format": "date"
      },
      "limit": {
        "type": "integer",
        "description": "Job postings per page",
        "default": 20,
        "minimum": 1,
        "maximum": 20
      },
      "active_only": {
        "type": "boolean",
        "description": "True if you only want to see active job postings (not deleted or taken down), false otherwise",
        "default": false
      },
      "countries": {
        "type": "string",
        "description": "Only show jobs from companies *headquartered* (not necessarily where the job is located) in the specified countries. Country codes must be in ISO 3166-1 alpha-2 format. Separate multiple values with ';'",
        "pattern": "^[A-Z]{2}(;[A-Z]{2})*$"
      },
      "region_countries": {
        "type": "string",
        "description": "Only show jobs that are located in the specified countries. Country codes must be in ISO 3166-1 alpha-2 format. Separate multiple values with ';' Note: If you pass in a country code, there is a chance we will not show jobs that might be located in that country because our parser wasn't able to parse the country from the job posting",
        "pattern": "^[A-Z]{2}(;[A-Z]{2})*$"
      },
      "exact_match": {
        "type": "boolean",
        "description": "True if the job posting must match the keyword passed in EXACTLY, in the order passed. For example, if keyword = \"content marketing\", only job postings with \"content marketing\" together as an exact phrase will be returned",
        "default": true
      },
      "company_size_range": {
        "type": "string",
        "description": "Only show jobs from companies with number of employees that match the specified size ranges. Separate multiple values with ';'. Possible ranges are 1 employee, 2-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000, 5,001-10,000, 10,001+"
      },
      "remote_only": {
        "type": "boolean",
        "description": "If true, only show jobs that are marked as remote",
        "default": false
      },
      "show_facets": {
        "type": "boolean",
        "description": "If true, show aggregate statistics on number of jobs found per month",
        "default": false
      },
      "facet_on": {
        "type": "string",
        "description": "If you wish to get aggregate statistics on the unique # of companies per month that match this query (NOT # of jobs), pass in 'company_domain'. Otherwise, pass 'jobs' (default). Only two possible values are allowed: 'jobs' or 'company_domain'. If show_facets is false, this field is ignored."
      },
      "next_token": {
        "type": "string",
        "description": "Pagination token from previous response (located in \"pagination\" > \"next_token\") to fetch the next page. Leave blank for the first page"
      },
      "company_industry": {
        "type": "string",
        "description": "Only show job postings from companies in the specified industries. We look at the LinkedIn company page to determine industries. All possible industries are available at https://api.revealera.com/linkedin_industries.txt . Separate multiple values with ';'"
      }
    },
    "required": [],
    "additionalProperties": false
  }
  ```
</details>

## Output Schema

| Name          | Type     | Required | Default | Description                                    |
| ------------- | -------- | -------- | ------- | ---------------------------------------------- |
| `result.data` | `object` | Yes      |         | Provider response payload.                     |
| `result.meta` | `object` | No       |         | Additional response metadata (status, paging). |

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

  ### Output JSON Schema

  ```json theme={null}
  {
    "type": "object",
    "description": "Standard tool result payload.",
    "properties": {
      "data": {
        "type": "object",
        "description": "Provider response payload.",
        "properties": {
          "jobs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "Job Posting ID"
                },
                "company_country": {
                  "type": "string",
                  "description": "Country code of the company that published the job posting"
                },
                "title": {
                  "type": "string",
                  "description": "The job title, as specified by the company"
                },
                "normalized_job_title": {
                  "type": "string",
                  "description": "The normalized job title. For instance, job titles like \"java engineer\", \"aws engineer\", all get normalized to \"backend engineer\" based on our machine learning algorithm. The entire list of normalized job titles can be found here https://api.revealera.com/normalized_job_titles.txt (the 2nd column in this CSV)"
                },
                "regions": {
                  "type": "array",
                  "description": "An array of structured regions/locations for this job posting. If we are not able to parse/convert the raw region to a structured list, this is an empty list",
                  "items": {
                    "type": "string"
                  }
                },
                "region": {
                  "type": "string",
                  "description": "The raw region we extracted from the job posting (unstructured)"
                },
                "description": {
                  "type": "string",
                  "description": "The full-text job description"
                },
                "displayed_url": {
                  "type": "string",
                  "description": "The URL of the job posting",
                  "format": "uri"
                },
                "currency_code": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The currency code of the salary of the job, if found in the job description"
                },
                "min_salary_range": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The minimum salary range, if found in the job description"
                },
                "max_salary_range": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The maximum salary range, if found in the job description"
                },
                "avg_salary_range": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The average salary range, if found in the job description"
                },
                "min_hourly_rate": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The minimum hourly rate, if found in the job description"
                },
                "max_hourly_rate": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The maximum hourly rate, if found in the job description"
                },
                "avg_hourly_rate": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The average hourly rate, if found in the job description"
                },
                "min_experience_years": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The minimum number of years of experience required if found in the job description"
                },
                "max_experience_years": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The maximum number of years of experience required if found in the job description"
                },
                "remote": {
                  "type": "integer",
                  "description": "0 if job is not remote, 1 otherwise",
                  "enum": [
                    0,
                    1
                  ]
                },
                "snapshot_date": {
                  "type": "string",
                  "description": "The date the job posting was found",
                  "format": "date"
                },
                "created_at": {
                  "type": "string",
                  "description": "The datetime the job posting was created",
                  "format": "date-time"
                },
                "updated_at": {
                  "type": "string",
                  "description": "The datetime the job posting was updated",
                  "format": "date-time"
                },
                "linkedin_company_id": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "description": "The LinkedIn company ID of the company associated with this job posting"
                },
                "inactive": {
                  "type": "integer",
                  "description": "1 if the job posting has been taken down, 0 if it's still up. Note there may be a lag on when we determine a job posting is inactive",
                  "enum": [
                    0,
                    1
                  ]
                },
                "company_number_of_employees": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "description": "The number of employees found on LinkedIn for this company"
                },
                "company_employee_size_range": {
                  "type": "string",
                  "description": "The employee size range of the company associated with the job posting"
                },
                "company_industry": {
                  "type": "string",
                  "description": "The industry of the company associated with the job posting, as taken from its LinkedIn company profile"
                },
                "company_domain": {
                  "type": "string",
                  "description": "The website domain of the company associated with the job posting"
                },
                "linkedin_username": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The LinkedIn handle of the company associated with the job posting"
                },
                "company_name": {
                  "type": "string",
                  "description": "The name of the company associated with the job posting"
                },
                "company_logo": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The URL of the logo of the company associated with the job posting",
                  "format": "uri"
                }
              },
              "required": [
                "id",
                "title",
                "normalized_job_title",
                "regions",
                "region",
                "description",
                "displayed_url",
                "remote",
                "snapshot_date",
                "created_at",
                "updated_at",
                "inactive",
                "company_employee_size_range",
                "company_industry",
                "company_domain",
                "company_name"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "page": {
                "type": "integer",
                "description": "Current page number"
              },
              "per_page": {
                "type": "integer",
                "description": "Number of items per page"
              },
              "total_pages": {
                "type": "integer",
                "description": "Total number of pages"
              },
              "total_items": {
                "type": "integer",
                "description": "Total number of items"
              }
            },
            "required": [
              "page",
              "per_page",
              "total_pages",
              "total_items"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "jobs",
          "pagination"
        ],
        "additionalProperties": false
      },
      "meta": {
        "type": "object",
        "description": "Additional response metadata (status, paging).",
        "additionalProperties": true
      }
    },
    "required": [
      "data"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Advanced: Direct CLI

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

```bash theme={null}
deepline tools execute bloomberry_search_job_postings --payload '{}' --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.                      |

## Cost

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