Skip to content

Job Sources

gysosin edited this page Oct 8, 2026 · 1 revision

Job sources

Source How Filter Change it in
Company career boards Public Greenhouse, Ashby and Lever job APIs, read directly Engineering titles, remote and open to India (or worldwide / APAC / plain "Remote"), posted in the last 30 days BOARDS in app/boards.py
Instahyre The site's public search API, then the JSON-LD on each job page "Work From Home", postings from the last 30 days QUERIES, YEARS in app/instahyre.py
LinkedIn The bundled linkedin-search CLI Location India, remote, posted in the last 14 days, 20 per query LINKEDIN_QUERIES in app/pipeline.py
freehire The bundled freehire-search CLI Remote, India and global, last 14 days FREEHIRE_QUERIES in app/pipeline.py

Company career boards

These are the employers' own listings: no aggregator, no reposter, no stale copies. Each entry in BOARDS is (ats, token, company name):

("greenhouse", "gitlab", "GitLab"),
("ashby", "notion", "Notion"),
("lever", "<token>", "<Company>"),

The token is the name in the company's job-board URL:

ATS Job board URL Token
Greenhouse job-boards.greenhouse.io/gitlab gitlab
Ashby jobs.ashbyhq.com/notion notion
Lever jobs.lever.co/acme acme

To check a token works: curl -s https://boards-api.greenhouse.io/v1/boards/<token>/jobs | head -c 300 (Ashby: https://api.ashbyhq.com/posting-api/job-board/<token>, Lever: https://api.lever.co/v0/postings/<token>?mode=json).

Title rules (engineering()): keeps engineer, developer, architect, SRE, scientist, ML/AI, DevOps roles; drops sales, account, manager, director, recruiting, intern, marketing, design, QA/test and support roles.

Location rules (remote_for_india()): drops anything marked hybrid, on-site or in-office; needs a remote signal; then accepts India and Indian cities, worldwide / global / APAC / Asia, or plain "Remote". "Indiana, USA" does not count as India.

Blocked aggregators and reposters

AGGREGATORS in app/pipeline.py lists about 40 names (Jobgether, Weekday, Turing, Crossover, Toptal, Mercor, Braintrust, Uplers, Talent500, Hirist, Lensa, Jooble, Dice, staffing firms ...). A job is dropped when one appears as a whole word in its company name or its link, which also catches jobs reposted under the client's name. The triage prompt drops "hiring for our client" listings too.

Targeting another country

The defaults target remote roles open to India. To change that:

  1. scrape() in app/pipeline.py: change "--location", "India" for LinkedIn and the freehire --country IN.
  2. app/boards.py: change the INDIA pattern to your country and cities, and the docstring.
  3. app/instahyre.py is India-only; remove it from scrape() if it does not apply.
  4. Your deal-breakers in CLAUDE.md (location, hours, salary floor) drive triage, scoring and drafting.

Adding a new job site

Write a small module like app/instahyre.py that returns jobs as {id, title, company, url, location, portal} (plus description if you have the full text), add it to scrape(), and add a branch in details() if the text needs a second request. Respect the site's robots.txt and terms.

Clone this wiki locally