Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## Features

- Scrapes job postings from **LinkedIn**, **Indeed**, **Glassdoor**, **Google**, **ZipRecruiter**, & other job boards concurrently
- Scrapes job postings from **LinkedIn**, **Indeed**, **Glassdoor**, **Google**, **ZipRecruiter**, **Wellfound**, & other job boards concurrently
- Aggregates the job postings in a dataframe
- Proxies support to bypass blocking

Expand All @@ -25,7 +25,7 @@ import csv
from jobspy import scrape_jobs

jobs = scrape_jobs(
site_name=["indeed", "linkedin", "zip_recruiter", "google"], # "glassdoor", "bayt", "naukri", "bdjobs"
site_name=["indeed", "linkedin", "zip_recruiter", "google"], # "glassdoor", "bayt", "naukri", "bdjobs", "wellfound"
search_term="software engineer",
google_search_term="software engineer jobs near San Francisco, CA since yesterday",
location="San Francisco, CA",
Expand Down Expand Up @@ -59,7 +59,7 @@ zip_recruiter Software Developer TEKsystems Phoenix
```plaintext
Optional
├── site_name (list|str):
| linkedin, zip_recruiter, indeed, glassdoor, google, bayt, bdjobs
| linkedin, zip_recruiter, indeed, glassdoor, google, bayt, bdjobs, wellfound
| (default is all)
├── search_term (str)
Expand Down Expand Up @@ -173,6 +173,11 @@ You can specify the following countries when searching on Indeed (use the exact

Bayt only uses the search_term parameter currently and searches internationally

### **Wellfound**

Wellfound (formerly AngelList Talent) searches globally for startup jobs. Uses the `location` parameter and `search_term` for role-based filtering. Specializes in startup and tech company positions.
*Note: The Wellfound scraper natively extracts rich compensation and remote data from the platform's Apollo GraphQL cache. For heavy scraping, passing `proxies` is highly recommended to avoid DataDome rate-limiting.*



## Notes
Expand Down Expand Up @@ -212,6 +217,11 @@ This searches the description/title and must include software, summer, 2025, one

---

**Q: Received a response code 403 on Wellfound?**
**A:** Wellfound uses strict DataDome anti-bot protection. While JobSpy natively impersonates Chrome TLS signatures to bypass this, excessive scraping without rotating IPs will result in a 403 block. We recommend passing a list of `proxies` for heavy scraping.

---

### JobPost Schema

```plaintext
Expand Down
2 changes: 2 additions & 0 deletions jobspy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
desired_order,
)
from jobspy.ziprecruiter import ZipRecruiter
from jobspy.wellfound import WellFound


# Update the SCRAPER_MAPPING dictionary in the scrape_jobs function
Expand Down Expand Up @@ -64,6 +65,7 @@ def scrape_jobs(
Site.BAYT: BaytScraper,
Site.NAUKRI: Naukri,
Site.BDJOBS: BDJobs, # Add BDJobs to the scraper mapping
Site.WELLFOUND: WellFound
}
set_logger_level(verbose)
job_type = get_enum_from_value(job_type) if job_type else None
Expand Down
10 changes: 8 additions & 2 deletions jobspy/exception.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,17 @@ class BaytException(Exception):
def __init__(self, message=None):
super().__init__(message or "An error occurred with Bayt")


class NaukriException(Exception):
def __init__(self,message=None):
def __init__(self, message=None):
super().__init__(message or "An error occurred with Naukri")


class BDJobsException(Exception):
def __init__(self, message=None):
super().__init__(message or "An error occurred with BDJobs")
super().__init__(message or "An error occurred with BDJobs")


class WellfoundException(Exception):
def __init__(self, message=None):
super().__init__(message or "An error occurred with Wellfound")
1 change: 1 addition & 0 deletions jobspy/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ class Site(Enum):
BAYT = "bayt"
NAUKRI = "naukri"
BDJOBS = "bdjobs" # Add this line
WELLFOUND = "wellfound"


class SalarySource(Enum):
Expand Down
Loading