Overview
ThescrapeJobs() function is the main entry point for JobSpy JS. It scrapes one or more job boards in parallel and returns a unified result set with job postings from all requested sites.
Function Signature
Core Parameters
Job boards to scrape. Accepts site keys as strings or
Site enum values.Supported sites: linkedin, indeed, glassdoor, google, google_careers, zip_recruiter, bayt, naukri, bdjobsSite names are normalized—"ziprecruiter", "zip_recruiter", and "zip-recruiter" all work.Job title or search query.
Job location. Can be a city, state, country, or “Remote”.
Maximum number of results per site. Total results may be up to
results_wanted × number_of_sites.Search Filters
Filter for remote jobs only.
Filter by employment type.Valid values:
fulltime, parttime, contract, internship, temporaryNot all job types are supported on every site. LinkedIn supports
fulltime, parttime, internship, contract, and temporary. Indeed supports fulltime, parttime, contract, and internship.Search radius in miles from the specified location.
Filter for easy-apply jobs (supported on LinkedIn, Indeed, Glassdoor).
Only return jobs posted within the last N hours.
Description & Format
Format for job descriptions.Options:
markdown, html, plainFetch full job descriptions from LinkedIn. Requires an extra HTTP request per job (slower).
Fetch full descriptions by visiting Indeed job pages or direct links.
Site-Specific Options
Override
search_term for the Google scraper only. Useful for customizing Google’s broader search syntax.Filter LinkedIn results to specific company IDs.
Salary & Compensation
Convert all salary figures to annual equivalents.
- Hourly rates are multiplied by 2,080 (40 hours/week × 52 weeks)
- Monthly salaries are multiplied by 12
- Weekly salaries are multiplied by 52
- Daily salaries are multiplied by 260
Pagination
Skip the first N results (pagination offset).
Deduplication & Profiles
Named profile for deduplication tracking. When specified, JobSpy tracks which jobs you’ve already seen and filters them out on subsequent runs.
See the Profiles & Deduplication guide for details on how state tracking works.
Path to state file for deduplication. Defaults to
jobspy.json in the current directory.Skip deduplication filtering (state is still updated).
Output & Logging
Logging verbosity level.
0— Errors only1— Warnings and errors2— All logs (info, warnings, errors)
Return Value
The function returns aScrapeJobsResult object:
jobs— Array of job postings (see Job Fields below)totalScraped— Total number of jobs scraped before deduplicationnewCount— Number of new jobs after deduplication (same asjobs.lengthwhen using profiles)profile— Profile metadata (only present when usingprofileparameter)
Job Fields
Each job in thejobs array is a FlatJobRecord with these fields:
| Field | Type | Description |
|---|---|---|
id | string | Unique job ID with site prefix (e.g. "li-123", "in-abc") |
site | string | Source site key (e.g. "linkedin", "indeed") |
title | string | Job title |
company | string | Company name |
location | string | Formatted as "City, State, Country" |
job_url | string | Canonical job URL on the board |
job_url_direct | string | Direct employer/ATS URL (if available) |
date_posted | string | ISO date "YYYY-MM-DD" |
job_type | string | Comma-separated (e.g. "fulltime, contract") |
is_remote | boolean | Whether the job is remote |
description | string | Full job description (formatted per description_format) |
min_amount | number | Minimum salary/pay amount |
max_amount | number | Maximum salary/pay amount |
interval | string | Pay interval: "yearly", "hourly", etc. |
currency | string | Currency code (e.g. "USD", "EUR") |
salary_source | string | "direct_data" or "description" |
emails | string | Comma-separated emails extracted from description |
job_level | string | Seniority level (LinkedIn only) |
job_function | string | Job function category (LinkedIn only) |
company_industry | string | Industry classification |
company_url | string | Company page on the job board |
company_url_direct | string | Company’s own website URL |
company_logo | string | Company logo URL |
listing_type | string | E.g. "sponsored" |
Examples
Basic Search
Multiple Sites
Remote Jobs with Salary Filter
Recent Jobs Only
LinkedIn Company Filter
With Profile Deduplication
Behavior
Parallel Scraping
All sites are scraped concurrently usingPromise.allSettled(). If one site fails, the others still return results. Failed scrapers are silently skipped.
Result Sorting
Results are sorted by:- Site name (alphabetical)
- Date posted (newest first, within each site)
Error Handling
verbose: 2 to see detailed logs for debugging:
See Also
- Fetching Job Details — Fetch full details for a single job
- Authentication — Using credentials for authenticated scraping
- Proxies — Proxy rotation and configuration
- Countries — International job search support
