# st.openJob

This action allows you to open a LinkedIn job and optionally retrieve its details.

## Constraints

> ⏺️ **Root Start:** allowed, when `jobUrl` parameter is provided.

> ⬆️ **Parent Actions:** [st.doForJobs](/docs/action-st-do-for-jobs).

> ⬇️ **Child Actions:** N/A.

## Parameters

```json
{
  "actionType": "st.openJob",
  "label": "job1",
  "jobUrl": "https://www.linkedin.com/jobs/view/4416248954/",
  "basicInfo": true
}
```

- `label` (optional) – custom label for tracking this action in workflow completion.
- `jobUrl` (required for root start, omitted for parent start) – LinkedIn job URL. When `st.openJob` is used under [`st.doForJobs`](/docs/action-st-do-for-jobs), the URL is injected from the parent search result.
- `basicInfo` (optional, default: `false`) – when set to `true`, the action includes job details in the result.

## Result options

1. **Successful job opening with `basicInfo` set to `true`:**

```json
{
  "actionType": "st.openJob",
  "label": "job1",
  "success": true,
  "data": {
    "jobId": "4416248954",
    "jobUrl": "https://www.linkedin.com/jobs/view/4416248954/",
    "title": "Senior Product Manager",
    "companyName": "Example Company",
    "companyUrl": "https://www.linkedin.com/company/example-company",
    "location": "San Francisco, CA",
    "postedDate": "1w",
    "applicantsCount": 84,
    "workplaceType": "remote",
    "employmentType": "Full-time",
    "salary": {
      "currency": "usd",
      "minAmount": 140000,
      "maxAmount": 180000,
      "period": "yearly"
    },
    "description": "Example job description text.",
    "applyUrl": "https://www.linkedin.com/jobs/view/4416248954/apply/",
    "easyApply": true
  }
}
```

- `label` – included only if specified in the action parameters.
- `data` – job details.
  - `jobId` – LinkedIn job identifier.
  - `jobUrl` – normalized LinkedIn job URL.
  - `title` – job title.
  - `companyName` – company name, if available.
  - `companyUrl` – normalized LinkedIn company URL, if available.
  - `location` – free-form job location, if available.
  - `postedDate` – compact relative date, such as `1w`, `3d`, or `2mo`, if available.
  - `applicantsCount` – number of applicants, if LinkedIn shows it.
  - `workplaceType` – workplace type label as shown by LinkedIn (such as `remote`, `hybrid`, or `on-site`), if available. Not one of the `workplaceTypes` filter values.
  - `employmentType` – employment type label as shown by LinkedIn (such as `Full-time`), if available. Not one of the `employmentTypes` filter values.
  - `salary` – parsed salary range, if LinkedIn shows one.
    - `currency` – lowercase currency code, such as `usd`, `eur`, or `gbp`.
    - `minAmount` – minimum amount in the parsed range.
    - `maxAmount` – maximum amount in the parsed range.
    - `period` – salary period. Possible values are `yearly`, `monthly`, and `hourly`.
  - `description` – job description text, if available.
  - `applyUrl` – Easy Apply or external application URL, if available.
  - `easyApply` – boolean indicating whether the job uses LinkedIn Easy Apply.

2. **Successful job opening with `basicInfo` set to `false`:**

```json
{
  "actionType": "st.openJob",
  "label": "job1",
  "success": true
}
```

- `label` – included only if specified in the action parameters.
- The action opens the job but does not include job details in the result.

3. **Failed job opening:**

```json
{
  "actionType": "st.openJob",
  "label": "job1",
  "success": false,
  "error": {
    "type": "jobNotFound",
    "message": "The job could not be opened or no longer exists."
  }
}
```

- `label` – included only if specified in the action parameters.
- `error.type` – enum with the following possible values:
  - `jobNotFound` – the job could not be opened or no longer exists.
