Job Search Module
Job search module - scrapes/queries job listings from multiple sources.
Source tiers
- Tier 1 - Always-on free public JSON APIs (no auth):
remote-ok, remotive, arbeitnow, himalayas, jobicy, the-muse
- Tier 2 - RSS feed (no auth):
we-work-remotely
- Tier 3 - API-key required (configure in .env):
adzuna, indeed, ziprecruiter
- Tier 4 - OAuth 2.0 (configure LinkedIn app in .env):
linkedin
- Tier 5 - ATS aggregators (company career pages, public API):
lever, ashby, greenhouse
Job Data Class
- class modules.job_search.Job(title: str, company: str, location: str, url: str, source: str, posted_date: str | None = None, salary: str | None = None, description: str | None = None, applied: bool = False, applied_date: str | None = None, search_term: str = '')[source]
Bases:
objectJob listing data structure.
- applied: bool = False
- applied_date: str | None = None
- company: str
- description: str | None = None
- location: str
- posted_date: str | None = None
- salary: str | None = None
- search_term: str = ''
- source: str
- title: str
- url: str
JobSearcher Class
- class modules.job_search.JobSearcher(config_path: str | None = None)[source]
Bases:
objectSearches job boards for new listings.
- filter_new_jobs(existing_jobs: list[modules.job_search.Job]) list[modules.job_search.Job][source]
Filter out jobs already tracked.
- async search_all() list[modules.job_search.Job][source]
Search all configured/enabled sources in parallel.