Skip to main content

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.

1

Install JobSpy

If you haven’t installed JobSpy yet, install it with pip:
pip install -U python-jobspy
Python 3.10 or higher is required. See Installation for full details.
2

Import and call scrape_jobs()

Import scrape_jobs from the jobspy package and run your first search:
import csv
from jobspy import scrape_jobs

jobs = scrape_jobs(
    site_name=["indeed", "linkedin", "zip_recruiter", "google"],
    search_term="software engineer",
    google_search_term="software engineer jobs near San Francisco, CA since yesterday",
    location="San Francisco, CA",
    results_wanted=20,
    hours_old=72,
    country_indeed="USA",
)
scrape_jobs() runs all specified boards concurrently and returns a single Pandas DataFrame.
Start with indeed — it is currently the best-performing scraper with no rate limiting. LinkedIn is the most restrictive and typically rate limits around the 10th page with a single IP address.
3

View results

Print a summary and preview the first few rows:
print(f"Found {len(jobs)} jobs")
print(jobs.head())
The DataFrame contains the following key columns:
ColumnDescription
idPlatform-specific job identifier
siteJob board the posting came from (e.g. indeed, linkedin)
job_urlURL to the job posting
job_url_directDirect employer application URL, when available
titleJob title
companyCompany name
locationCity, state, and/or country as a display string
date_postedDate the job was posted
job_typeEmployment type: fulltime, parttime, internship, contract
salary_sourcedirect_data or description (where salary was found)
intervalSalary pay period: yearly, monthly, weekly, daily, hourly
min_amountMinimum salary amount
max_amountMaximum salary amount
currencyCurrency code (e.g. USD)
is_remoteWhether the job is remote
descriptionFull job description (Markdown by default)
4

Export results

Save your results to CSV or Excel for further analysis.
import csv

jobs.to_csv(
    "jobs.csv",
    quoting=csv.QUOTE_NONNUMERIC,
    escapechar="\\",
    index=False,
)
Use quoting=csv.QUOTE_NONNUMERIC and escapechar="\\" when exporting to CSV. Job descriptions often contain commas, quotes, and newlines that will break a plain CSV export.
Your job results are now saved and ready for filtering, analysis, or loading into a database.

Complete example

Here is the full working script from start to finish:
import csv
from jobspy import scrape_jobs

jobs = scrape_jobs(
    site_name=["indeed", "linkedin", "zip_recruiter", "google"],
    search_term="software engineer",
    google_search_term="software engineer jobs near San Francisco, CA since yesterday",
    location="San Francisco, CA",
    results_wanted=20,
    hours_old=72,
    country_indeed="USA",
)

print(f"Found {len(jobs)} jobs")
print(jobs.head())

# Export to CSV
jobs.to_csv("jobs.csv", quoting=csv.QUOTE_NONNUMERIC, escapechar="\\", index=False)

# Export to Excel
jobs.to_excel("jobs.xlsx", index=False)

Next steps

scrape_jobs() reference

Full parameter reference for scrape_jobs(), including filtering, proxy, and LinkedIn options

Job board guides

Per-board usage notes, rate limit behavior, and country support

Build docs developers (and LLMs) love