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" |
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" | — |
from jobspy import scrape_jobs
# Filter for full-time jobs
jobs = scrape_jobs(
site_name="indeed",
search_term="software engineer",
job_type="fulltime",
)
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.
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" |
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"]
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 |
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.
| 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 |
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",
)
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.
Countries marked with * in the supported countries guide also support Glassdoor. Pass the exact country string shown above — the match is case-insensitive.