> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/speedyapply/JobSpy/llms.txt
> Use this file to discover all available pages before exploring further.

# Enums & types

> Reference for all enums and type definitions used in JobSpy, including job boards, job types, compensation intervals, and supported countries.

## Site

Represents a supported job board. Use string values or the enum directly with the `site_name` parameter of `scrape_jobs()`.

| Enum member          | String value      |
| -------------------- | ----------------- |
| `Site.LINKEDIN`      | `"linkedin"`      |
| `Site.INDEED`        | `"indeed"`        |
| `Site.ZIP_RECRUITER` | `"zip_recruiter"` |
| `Site.GLASSDOOR`     | `"glassdoor"`     |
| `Site.GOOGLE`        | `"google"`        |
| `Site.BAYT`          | `"bayt"`          |
| `Site.NAUKRI`        | `"naukri"`        |
| `Site.BDJOBS`        | `"bdjobs"`        |

```python theme={null}
from jobspy import scrape_jobs
from jobspy.model import Site

# Using strings
jobs = scrape_jobs(site_name=["linkedin", "indeed"])

# Using the enum
jobs = scrape_jobs(site_name=[Site.LINKEDIN, Site.INDEED])

# Mixing both
jobs = scrape_jobs(site_name=[Site.LINKEDIN, "indeed", "zip_recruiter"])
```

***

## JobType

Represents the employment type of a job posting. Pass the string value to `scrape_jobs()` via the `job_type` parameter.

| Enum member          | Primary string value | Usage in `scrape_jobs()` |
| -------------------- | -------------------- | ------------------------ |
| `JobType.FULL_TIME`  | `"fulltime"`         | `job_type="fulltime"`    |
| `JobType.PART_TIME`  | `"parttime"`         | `job_type="parttime"`    |
| `JobType.CONTRACT`   | `"contract"`         | `job_type="contract"`    |
| `JobType.TEMPORARY`  | `"temporary"`        | `job_type="temporary"`   |
| `JobType.INTERNSHIP` | `"internship"`       | `job_type="internship"`  |
| `JobType.PER_DIEM`   | `"perdiem"`          | —                        |
| `JobType.NIGHTS`     | `"nights"`           | —                        |
| `JobType.OTHER`      | `"other"`            | —                        |
| `JobType.SUMMER`     | `"summer"`           | —                        |
| `JobType.VOLUNTEER`  | `"volunteer"`        | —                        |

```python theme={null}
from jobspy import scrape_jobs

# Filter for full-time jobs
jobs = scrape_jobs(
    site_name="indeed",
    search_term="software engineer",
    job_type="fulltime",
)
```

<Note>
  `FULL_TIME` includes localized equivalents from multiple languages (e.g., `"vollzeit"`, `"tempsplein"`, `"全职"`) to handle international job boards. When filtering with `job_type="fulltime"`, you should still pass the English string.
</Note>

***

## CompensationInterval

Represents the pay frequency for a salary or wage. Appears in the `interval` column of the output DataFrame and in the `Compensation.interval` field of the `JobPost` model.

| Enum member                    | String value |
| ------------------------------ | ------------ |
| `CompensationInterval.YEARLY`  | `"yearly"`   |
| `CompensationInterval.MONTHLY` | `"monthly"`  |
| `CompensationInterval.WEEKLY`  | `"weekly"`   |
| `CompensationInterval.DAILY`   | `"daily"`    |
| `CompensationInterval.HOURLY`  | `"hourly"`   |

```python theme={null}
from jobspy import scrape_jobs

jobs = scrape_jobs(
    site_name=["indeed", "zip_recruiter"],
    search_term="data analyst",
    enforce_annual_salary=True,  # convert all intervals to yearly
)

# Filter for hourly jobs
hourly_jobs = jobs[jobs["interval"] == "hourly"]
```

***

## DescriptionFormat

Controls the format of job descriptions returned by `scrape_jobs()`. Pass the string value to the `description_format` parameter.

| Enum member                  | String value | Description                           |
| ---------------------------- | ------------ | ------------------------------------- |
| `DescriptionFormat.MARKDOWN` | `"markdown"` | HTML converted to Markdown (default)  |
| `DescriptionFormat.HTML`     | `"html"`     | Raw HTML as returned by the job board |
| `DescriptionFormat.PLAIN`    | `"plain"`    | Plaintext with HTML tags stripped     |

```python theme={null}
from jobspy import scrape_jobs

# Get descriptions as plain text
jobs = scrape_jobs(
    site_name="linkedin",
    search_term="product manager",
    description_format="plain",
)
```

***

## SalarySource

Indicates where the salary data for a given job was sourced from. Appears in the `salary_source` column of the output DataFrame.

| Enum member                | String value    | Description                                                        |
| -------------------------- | --------------- | ------------------------------------------------------------------ |
| `SalarySource.DIRECT_DATA` | `"direct_data"` | Salary was provided directly by the job board's structured data    |
| `SalarySource.DESCRIPTION` | `"description"` | Salary was extracted by parsing the job description text (US only) |

The `salary_source` column is `None` when no salary information could be found.

***

## Country

Used with the `country_indeed` parameter to target a specific country on Indeed and Glassdoor. Pass the country name as a lowercase string.

JobSpy supports **60+ countries**. The table below lists a selection of commonly used ones. For the complete list, refer to the [supported countries guide](/guides/supported-countries).

| Country      | String value for `country_indeed`      | Indeed | Glassdoor |
| ------------ | -------------------------------------- | ------ | --------- |
| USA          | `"usa"` or `"us"` or `"united states"` | Yes    | Yes       |
| UK           | `"uk"` or `"united kingdom"`           | Yes    | Yes       |
| Canada       | `"canada"`                             | Yes    | Yes       |
| Australia    | `"australia"`                          | Yes    | Yes       |
| Germany      | `"germany"`                            | Yes    | Yes       |
| France       | `"france"`                             | Yes    | Yes       |
| India        | `"india"`                              | Yes    | Yes       |
| Netherlands  | `"netherlands"`                        | Yes    | Yes       |
| Spain        | `"spain"`                              | Yes    | Yes       |
| Brazil       | `"brazil"`                             | Yes    | Yes       |
| Mexico       | `"mexico"`                             | Yes    | Yes       |
| Singapore    | `"singapore"`                          | Yes    | Yes       |
| Hong Kong    | `"hong kong"`                          | Yes    | Yes       |
| Italy        | `"italy"`                              | Yes    | Yes       |
| Ireland      | `"ireland"`                            | Yes    | Yes       |
| Switzerland  | `"switzerland"`                        | Yes    | Yes       |
| New Zealand  | `"new zealand"`                        | Yes    | Yes       |
| Japan        | `"japan"`                              | Yes    | No        |
| China        | `"china"`                              | Yes    | No        |
| Saudi Arabia | `"saudi arabia"`                       | Yes    | No        |

```python theme={null}
from jobspy import scrape_jobs

# Search for jobs in Germany on Indeed
jobs = scrape_jobs(
    site_name="indeed",
    search_term="software engineer",
    location="Berlin",
    country_indeed="germany",
)

# Search in the UK on both Indeed and Glassdoor
jobs = scrape_jobs(
    site_name=["indeed", "glassdoor"],
    search_term="product manager",
    location="London",
    country_indeed="uk",
)
```

<Note>
  LinkedIn searches globally and ignores `country_indeed`. ZipRecruiter only searches the US and Canada and also ignores this parameter. Bayt searches internationally and ignores `country_indeed` as well.
</Note>

<Note>
  Countries marked with `*` in the [supported countries guide](/guides/supported-countries) also support Glassdoor. Pass the exact country string shown above — the match is case-insensitive.
</Note>
