Sherlock is a job aggregation engine that searches many job boards in parallel and exposes the results through API, CLI, GraphQL, and MCP integrations.
- Search across 160+ job sources
- Normalized results with deduplication
- Optional AI-based relevance scoring
- Email digests and scheduler support
- Modular source packages
npm install
npm run build
npm run start:devThe API runs on http://localhost:3001.
Create a .env file if you want email digests or AI scoring:
EMAIL_GMAIL_USER=your-email@gmail.com
EMAIL_GMAIL_PASSWORD=your-app-password
EMAIL_RECIPIENT_EMAIL=you@example.com
GEMINI_API_KEY=your-gemini-api-key
SCHEDULER_ENABLED=true
SCHEDULER_TIME=0 9 * * *Search globally using the location parameter.
Searches US and Canada using the location parameter.
Support 65+ countries via the country parameter. Use location to narrow within a country.
| Argentina | Australia* | Austria* | Bahrain |
| Bangladesh | 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 | UAE | UK* | USA* |
| Uruguay | Venezuela | Vietnam* |
* indicates Glassdoor support
Searches internationally using searchTerm only.
India-specific. Supports INR salary parsing (Lakhs/Crores).
Bangladesh-specific.
| Source | ATS Platform | Method | Notable Users |
|---|---|---|---|
| Greenhouse | Greenhouse | REST API | Airbnb, Coinbase, Datadog, DoorDash, HubSpot, Notion, Stripe |
| Lever | Lever | REST API | Netflix, Shopify, KPMG, Eventbrite, Atlassian |
| Workday | Workday | REST API | Amazon, Salesforce, Target, Bank of America, Visa |
| Ashby | Ashby | REST API | Ramp, Figma, Linear, Vercel, Plaid |
| SmartRecruiters | SmartRecruiters | REST API | Visa, Bosch, LinkedIn, Skechers, Equinox |
| Jobvite | Jobvite | REST API | Logitech, Schneider Electric, Zappos |
| Workable | Workable | GraphQL API | Sephora, Bain Capital, Forbes |
| SAP SuccessFactors | SAP SuccessFactors | OData API + HTML fallback | Siemens, Accenture, Deloitte, EY |
| Oracle Taleo | Oracle Taleo | REST API (JSON) | JPMorgan Chase, PepsiCo, Intel, Cisco |
| iCIMS | iCIMS | Playwright + JSON gateway | UPS, Uber, Johnson & Johnson, Target |
| ADP Recruiting | ADP Workforce Now | REST API | Major enterprises across industries |
| UKG (UltiPro) | UKG Pro Recruiting | REST API | Major healthcare and manufacturing organizations |
| Rippling | Rippling | REST API | |
| Recruitee | Recruitee | REST API | |
| Teamtailor | Teamtailor | REST API | |
| BambooHR | BambooHR | REST API (JSON) | |
| Personio | Personio | XML feed | |
| JazzHR | JazzHR | HTML scraping | |
| Breezy HR | Breezy HR | REST API | |
| Comeet | Comeet | REST API | |
| Pinpoint | Pinpoint | REST API | |
| Manatal | Manatal | REST API | 160K+ organizations (Asia-Pacific, global SMB) |
| Paylocity | Paylocity | REST API (GUID) | 30K+ US mid-market companies |
| Freshteam | Freshworks | REST API (Bearer) | 1K-5K companies globally |
| Bullhorn | Bullhorn | REST API (Corp Token) | 10K+ staffing agencies (#1 staffing ATS) |
| Trakstar Hire | Trakstar | REST API (Basic Auth) | 5K+ companies (formerly RecruiterBox) |
| HiringThing | HiringThing | REST API (Basic Auth) | 500+ companies (white-label ATS) |
| Loxo | Loxo | REST API | 1K-3K recruiting firms |
| Fountain | Fountain | REST API (Bearer) | 300+ enterprises (high-volume hourly hiring) |
| Deel | Deel | REST API (Bearer) | 35K+ customers (global hiring/EOR platform) |
| Phenom | Phenom People | REST API | 900+ enterprises (Boeing, Hilton, Nestle, Verizon) |
| Jobylon | Jobylon | JSON Feed | Hundreds of Nordic companies |
| Homerun | Homerun | REST API (Bearer) | Thousands of European SMBs |
European-focused job board with free JSON API (arbeitnow.com/api/job-board-api). Supports page-based pagination. No authentication required.
Popular remote job board. Uses RSS feed (weworkremotely.com/remote-jobs.rss) — parsed without external XML libraries. Category-specific feeds also available. No authentication required.
Recruitee ATS integration. Per-company public API at {slug}.recruitee.com/api/offers. Provides salary data when available. Requires companySlug parameter.
Teamtailor ATS integration. Per-company career page API. Requires companySlug parameter.
US government job board with free API. Requires USAJOBS_API_KEY and USAJOBS_EMAIL environment variables. Register at developer.usajobs.gov. Returns full descriptions with salary data from position remuneration fields. Credentials can also be passed per-request via the auth.usajobs field in the request body.
Multi-country job aggregator covering 12+ countries. Requires ADZUNA_APP_ID and ADZUNA_APP_KEY environment variables. Register at developer.adzuna.com. Free tier limited to 25 requests/min and 250 requests/day. Uses the country parameter to select the appropriate API endpoint. Credentials can also be passed per-request via the auth.adzuna field in the request body.
UK-focused job board. Requires REED_API_KEY environment variable. Register at reed.co.uk/developers. Uses HTTP Basic Auth. Provides salary data in GBP. Credentials can also be passed per-request via the auth.reed field in the request body.
Job aggregator covering 70+ countries. Requires JOOBLE_API_KEY environment variable. Register at jooble.org/api/about. Uses POST requests with the API key in the URL path. Salary data parsed from string format. Credentials can also be passed per-request via the auth.jooble field in the request body.
Job aggregator covering 80+ countries with locale-based searches. Requires CAREERJET_AFFID environment variable. Register at careerjet.com/partners. Requires clientIp parameter for proper operation (falls back to 127.0.0.1). Supports the proxies parameter for residential IP rotation. Credentials can also be passed per-request via the auth.careerjet field in the request body.
Indeed is generally the most reliable source with minimal rate limiting.
LinkedIn is the most restrictive — it typically rate-limits around the 10th page from a single IP. Using proxies is strongly recommended.
Google Jobs requires specific search syntax. For best results, search for Google Jobs in your browser, apply filters, and use the resulting search query as
googleSearchTerm.
All job boards cap results at approximately 1,000 jobs per search query.
"engineering intern" software summer (java OR python OR c++) 2025 -tax -marketing
npm run buildFound a bug? Want to add a job source? Have feature ideas?
- Issues: Report bugs or request features
- Pull Requests: Fix bugs or add new job sources
- Discussion: Talk about ideas before implementing
Sherlock is built with NestJS and TypeScript:
- Modular design — Each job source is an independent package
- Concurrent execution — All sources run in parallel
- Request optimization — Smart caching, rate limiting, proxy rotation
- Post-processing — Salary enrichment, deduplication, AI scoring
MIT — Use Sherlock freely. We built it because job hunting is exhausting, and everyone deserves a better way to find work.
Built with NestJS, TypeScript, and caffeine ☕