jobspy command provides a comprehensive set of flags for scraping, filtering, and exporting job postings.
Command Structure
-s/--site or use --profile, --init, --list-profiles, --describe, or --id.
Core Search Flags
-s, --site <sites...>
Job boards to scrape. Accepts one or more site keys separated by spaces.
Valid keys: linkedin, indeed, glassdoor, google, google_careers, zip_recruiter, bayt, naukri, bdjobs
Default: All sites (when omitted)
-q, --search-term <term>
Job search query. Used for all sites except Google Jobs (which uses --google-search-term by default).
Example:
--google-search-term <term>
Override search term specifically for Google Jobs. Useful for custom queries like "jobs near [location]".
Example:
-l, --location <location>
Geographic location for the job search. Format varies by site but generally accepts city/state or city/country.
Examples:
-d, --distance <miles>
Search radius in miles from the specified location.
Default: 50
Example:
-n, --results <count>
Number of job results to fetch per site. Alias: --limit
Default: 15
Example:
--offset <offset>
Pagination offset. Start scraping from the Nth result. Useful for batch scraping.
Default: 0
Example:
Filter Flags
-r, --remote
Filter for remote jobs only.
Default: false (includes all locations)
Example:
-t, --job-type <type>
Filter by employment type.
Valid values: fulltime, parttime, contract, internship
Example:
--easy-apply
Filter for jobs with “easy apply” or one-click application.
Default: false
Example:
--hours-old <hours>
Only include jobs posted within the last N hours.
Example:
-c, --country <country>
Country code for Indeed and Glassdoor regional domains.
Default: usa
Supported countries: usa, uk, canada, germany, france, spain, india, australia, brazil, and 60+ more.
Example:
--linkedin-company-ids <ids...>
Filter LinkedIn results to specific companies by their LinkedIn company IDs.
Example:
Output Flags
-o, --output <file>
Output file path. Format is automatically detected from extension:
.json→ JSON array.csv→ CSV with headers
--format <format>
Format for job descriptions in the output.
Valid values: markdown, html, plain
Default: markdown
Example:
--enforce-annual-salary
Convert all salary values to annual equivalents. Hourly and monthly salaries are normalized.
Default: false
Example:
Description Fetching
--linkedin-fetch-description
Fetch full job descriptions for LinkedIn postings. By default, only job previews are scraped. This flag makes an additional request per job to get the complete description.
Default: false
Trade-off: Slower but more complete data.
Example:
--indeed-fetch-description
Fetch full job pages for Indeed postings to extract descriptions from the detail view.
Default: false
Example:
Single Job Fetching
--describe <jobId>
Fetch full details for a single LinkedIn job by ID or URL. Does not perform a search.
Example:
--id <jobId> (requires -s/--site)
Fetch full job details by ID for any supported site.
Example:
Proxy Configuration
-p, --proxies <proxies...>
One or more proxy servers. Format: user:pass@host:port or http://user:pass@host:port
Proxies are rotated across requests for rate limit mitigation.
Example:
Authentication / Credentials
--creds
Enable credential fallback. When anonymous scraping is blocked (e.g., LinkedIn 429 rate limit), the scraper will attempt authenticated scraping using stored credentials.
Default: false
Equivalent: JOBSPY_CREDS=1 environment variable
Example:
- CLI flags (
--linkedin-username,--linkedin-password, etc.) - Profile config (
jobspy.json) - Environment variables (
LINKEDIN_USERNAME,LINKEDIN_PASSWORD, etc.)
Per-Provider Credential Flags
| Flag | Environment Variable | Description |
|---|---|---|
--linkedin-username | LINKEDIN_USERNAME | LinkedIn email/username |
--linkedin-password | LINKEDIN_PASSWORD | LinkedIn password |
--indeed-username | INDEED_USERNAME | Indeed email/username |
--indeed-password | INDEED_PASSWORD | Indeed password |
--glassdoor-username | GLASSDOOR_USERNAME | Glassdoor email/username |
--glassdoor-password | GLASSDOOR_PASSWORD | Glassdoor password |
--ziprecruiter-username | ZIPRECRUITER_USERNAME | ZipRecruiter email/username |
--ziprecruiter-password | ZIPRECRUITER_PASSWORD | ZipRecruiter password |
--bayt-username | BAYT_USERNAME | Bayt email/username |
--bayt-password | BAYT_PASSWORD | Bayt password |
--naukri-username | NAUKRI_USERNAME | Naukri email/username |
--naukri-password | NAUKRI_PASSWORD | Naukri password |
Config Profile Flags
--profile <name>
Run a named profile from jobspy.json. See Config Profiles for details.
Example:
--init
Generate a jobspy.json config file with two sample profiles (frontend and backend).
Example:
--list-profiles
List all profiles in jobspy.json with their last run time and settings.
Example:
--all
Skip deduplication filtering for this run. All jobs are returned, but state is still updated for future runs.
Use case: Re-fetch all jobs without losing dedup history.
Example:
Logging and Verbosity
-v, --verbose <level>
Control log output verbosity.
0— Errors only (default)1— Warnings + errors2— All logs (info, debug, warnings, errors)
Advanced Examples
Batch Scraping with Pagination
Multi-Site with Filters
Credential Fallback with Environment Variables
Google Jobs with Proxy
Exit Codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Error (scraping failed, invalid arguments, etc.) |
Related Pages
Config Profiles
Define reusable search profiles with jobspy.json
Deduplication
Track and filter previously seen jobs
