Skip to content

alpharomercoma/ts-jobspy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TypeScript Job Scraper πŸ“

ts-jobspy is a job scraping library for JavaScript/TypeScript with the goal of aggregating jobs from popular job boards with one tool.

This is a TypeScript port of python-jobspy.

Features

  • Scrapes job postings from LinkedIn & Indeed concurrently
  • Returns structured job data as an array of objects
  • Proxies support to bypass blocking
  • Works with both JavaScript and TypeScript

Installation

npm install ts-jobspy
# or
yarn add ts-jobspy
# or
pnpm add ts-jobspy

Node.js version >= 20.0.0 required

Usage

import { scrapeJobs } from 'ts-jobspy';
import fs from 'fs';

const jobs = await scrapeJobs({
  siteName: ['indeed', 'linkedin'],
  searchTerm: 'software engineer',
  location: 'San Francisco, CA',
  resultsWanted: 20,
  hoursOld: 72,
  countryIndeed: 'USA',

  // linkedinFetchDescription: true // gets more info such as description, direct job url (slower)
});

console.log(`Found ${jobs.length} jobs`);
fs.writeFileSync('jobs.json', JSON.stringify(jobs, null, 2));

Example Output

site company title location datePosted description jobUrl jobUrlDirect salarySource interval minAmount maxAmount currency isRemote
indeed Adobe Software Development Engineer San Jose, CA, US 2026-01-02 Our Company
Changing the world through digital experiences...
https://www.indeed.com/viewjob?jk=17cf2... https://careers.adobe.com/us/en/job/ADOBUSR1633... direct_data yearly 139000 257550 USD false
linkedin Google Software Engineer, Infrastructure, User Personalization Mountain View, CA 2025-12-31 Minimum qualifications: Bachelor's degree ... https://www.linkedin.com/jobs/view/4326... https://careers.google.com/jobs/results/10592... description yearly 141000 202000 USD false
linkedin Twitch Software Development Engineer San Francisco, CA 2026-01-01 About Us
Twitch is the world's biggest live streaming service...
https://www.linkedin.com/jobs/view/4319... null description yearly 99500 200000 USD false

Parameters for scrapeJobs()

Optional
β”œβ”€β”€ siteName (string | string[]):
β”‚    linkedin, indeed
β”‚    (default is all available)
β”‚
β”œβ”€β”€ searchTerm (string)
β”‚
β”œβ”€β”€ location (string)
β”‚
β”œβ”€β”€ distance (number):
β”‚    in miles, default 50
β”‚
β”œβ”€β”€ jobType (string):
β”‚    fulltime, parttime, internship, contract
β”‚
β”œβ”€β”€ proxies (string | string[]):
β”‚    in format ['user:pass@host:port', 'localhost']
β”‚    each job board scraper will round robin through the proxies
β”‚
β”œβ”€β”€ isRemote (boolean)
β”‚
β”œβ”€β”€ resultsWanted (number):
β”‚    number of job results to retrieve for each site specified in 'siteName'
β”‚
β”œβ”€β”€ easyApply (boolean):
β”‚    filters for jobs that are hosted on the job board site
β”‚
β”œβ”€β”€ descriptionFormat (string):
β”‚    markdown, html (default is markdown)
β”‚
β”œβ”€β”€ offset (number):
β”‚    starts the search from an offset
β”‚
β”œβ”€β”€ hoursOld (number):
β”‚    filters jobs by the number of hours since the job was posted
β”‚
β”œβ”€β”€ linkedinFetchDescription (boolean):
β”‚    fetches full description and direct job url for LinkedIn (slower)
β”‚
β”œβ”€β”€ linkedinCompanyIds (number[]):
β”‚    searches for linkedin jobs with specific company ids
β”‚
β”œβ”€β”€ countryIndeed (string):
β”‚    filters the country on Indeed (see supported countries below)
β”‚
β”œβ”€β”€ enforceAnnualSalary (boolean):
β”‚    converts wages to annual salary
β”‚
└── caCert (string)
     path to CA Certificate file for proxies

Limitations

β”œβ”€β”€ Indeed limitations:
β”‚    Only one from this list can be used in a search:
β”‚    - hoursOld
β”‚    - jobType & isRemote
β”‚    - easyApply
β”‚
└── LinkedIn limitations:
     - Rate limits at ~10th page. Proxies are recommended for large scrapes.

Supported Countries for Job Searching

LinkedIn

LinkedIn searches globally & uses only the location parameter.

Indeed

Indeed supports most countries. The countryIndeed parameter is required. Use the location parameter to narrow down by city/state.

Argentina Australia Austria Bahrain
Belgium Brazil Canada Chile
China Colombia Costa Rica Czech Republic
Denmark Ecuador Egypt Finland
France Germany Greece Hong Kong
Hungary India Indonesia Ireland
Israel Italy Japan Kuwait
Luxembourg Malaysia Mexico Morocco
Netherlands New Zealand Nigeria Norway
Oman Pakistan Panama Peru
Philippines Poland Portugal Qatar
Romania Saudi Arabia Singapore South Africa
South Korea Spain Sweden Switzerland
Taiwan Thailand Turkey Ukraine
United Arab Emirates UK USA Uruguay
Venezuela Vietnam

Notes

  • Indeed is the best scraper currently with minimal rate limiting.
  • All job board endpoints are capped at around 1000 jobs on a given search.
  • LinkedIn is the most restrictive and usually rate limits around the 10th page. Proxies are recommended.

Frequently Asked Questions

Q: Why is Indeed giving unrelated roles? A: Indeed searches the description too.

  • use - to remove words
  • use "" for exact match

Example of a good Indeed query:

searchTerm: '"engineering intern" software summer (java OR python OR c++) 2025 -tax -marketing'

Q: Received a response code 429? A: This indicates you have been rate limited. We recommend:

  • Wait some time between scrapes (site-dependent)
  • Try using the proxies parameter to rotate IP addresses

JobPost Schema

JobPost
β”œβ”€β”€ title
β”œβ”€β”€ company
β”œβ”€β”€ companyUrl
β”œβ”€β”€ jobUrl
β”œβ”€β”€ jobUrlDirect
β”œβ”€β”€ location
β”œβ”€β”€ isRemote
β”œβ”€β”€ description
β”œβ”€β”€ jobType: fulltime, parttime, internship, contract
β”œβ”€β”€ compensation
β”‚   β”œβ”€β”€ interval: yearly, monthly, weekly, daily, hourly
β”‚   β”œβ”€β”€ minAmount
β”‚   β”œβ”€β”€ maxAmount
β”‚   β”œβ”€β”€ currency
β”‚   └── salarySource: direct_data, description (parsed from posting)
β”œβ”€β”€ datePosted
└── emails

LinkedIn specific
└── jobLevel

LinkedIn & Indeed specific
└── companyIndustry

Indeed specific
β”œβ”€β”€ companyAddresses
β”œβ”€β”€ companyNumEmployees
β”œβ”€β”€ companyRevenue
β”œβ”€β”€ companyDescription
└── companyLogo

Roadmap

Note: Only LinkedIn and Indeed scrapers are currently working. Support for Glassdoor, ZipRecruiter, Google, and other job boards is coming soon.

Future features planned:

  • Glassdoor support - Scraper currently under maintenance
  • ZipRecruiter support - US/Canada job board (under maintenance)
  • Google Jobs support - Global job search (under maintenance)
  • Additional job boards - Bayt, Naukri, BDJobs (under maintenance)

Credits

This package is a TypeScript port of python-jobspy.

TypeScript Port Author:

Original python-jobspy Authors:

License

MIT License - see LICENSE for details.

About

TypeScript job scraper for LinkedIn, Indeed, Glassdoor, ZipRecruiter & more - rewritten from python-jobspy

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors