Context
Deep research pass on 2026-04-24 verified which job-data APIs are truly public (no auth, stable, permissive). Four clear wins surfaced — all simpler than BambooHR/Workday and together covering significantly broader geographic and SMB ground.
Full research in `notes/expansion-research.md` (gitignored).
The four adapters to add
1. Recruitee (#1 priority — cleanest pattern match)
```
GET https://{company}.recruitee.com/api/offers
```
Returns JSON. No auth. Mirrors Greenhouse/Lever/Ashby adapter pattern exactly.
EU SMB coverage, lots of remote-first startups.
2. Personio (#2 priority — EU coverage gap)
```
GET https://{company}.jobs.personio.de/xml?language=en
```
XML format (need to add XML parsing helper — one-time cost). No auth. Strong German/European coverage.
3. Workable — widget endpoint (#3 priority — breadth play)
```
GET https://apply.workable.com/api/v1/widget/accounts/{slug}
```
Returns JSON. No auth. Workable has historically had ~50K customers globally — huge SMB reach.
Note: this is the public widget endpoint, not the full Workable API (which requires OAuth). Fields are lightweight but sufficient for our schema.
4. Teamtailor (#4 priority — Nordic + EU strengthening)
```
GET https://{tenant}.teamtailor.com/jobs.rss?per_page=N
```
RSS 2.0. No auth. Scandinavian and European coverage.
Implementation pattern
Each adapter is one file in `src/adapters/`, follows existing Greenhouse/Lever/Ashby structure:
- `fetchX(slug)` — hit endpoint, normalize to unified schema
- `hasX(slug)` — HEAD request for detect_ats probing
- Register in `src/adapters/index.js`
Add registry file per platform in `registry/`. Seed with 5-10 verified companies each.
What this does NOT change
- Existing three adapters (Greenhouse/Lever/Ashby) untouched
- MCP server surface unchanged (same three tools, same envelope)
- No breaking changes to library API
- No npm publish needed until all four ship (single 0.3.0 bump)
Suggested sequence
Single focused day:
- Recruitee (morning — direct pattern match, ~90 min)
- Workable (afternoon — similar shape, ~90 min)
- Teamtailor (requires RSS parsing helper — ~2 hrs)
- Personio (requires XML parsing — ~2 hrs)
- Test + verify live against 3-5 companies per adapter
- Update README roadmap + docs/filters.md if any new gotchas
- Bump version to 0.3.0, publish both packages
Related issues
Acceptance criteria
Context
Deep research pass on 2026-04-24 verified which job-data APIs are truly public (no auth, stable, permissive). Four clear wins surfaced — all simpler than BambooHR/Workday and together covering significantly broader geographic and SMB ground.
Full research in `notes/expansion-research.md` (gitignored).
The four adapters to add
1. Recruitee (#1 priority — cleanest pattern match)
```
GET https://{company}.recruitee.com/api/offers
```
Returns JSON. No auth. Mirrors Greenhouse/Lever/Ashby adapter pattern exactly.
EU SMB coverage, lots of remote-first startups.
2. Personio (#2 priority — EU coverage gap)
```
GET https://{company}.jobs.personio.de/xml?language=en
```
XML format (need to add XML parsing helper — one-time cost). No auth. Strong German/European coverage.
3. Workable — widget endpoint (#3 priority — breadth play)
```
GET https://apply.workable.com/api/v1/widget/accounts/{slug}
```
Returns JSON. No auth. Workable has historically had ~50K customers globally — huge SMB reach.
Note: this is the public widget endpoint, not the full Workable API (which requires OAuth). Fields are lightweight but sufficient for our schema.
4. Teamtailor (#4 priority — Nordic + EU strengthening)
```
GET https://{tenant}.teamtailor.com/jobs.rss?per_page=N
```
RSS 2.0. No auth. Scandinavian and European coverage.
Implementation pattern
Each adapter is one file in `src/adapters/`, follows existing Greenhouse/Lever/Ashby structure:
Add registry file per platform in `registry/`. Seed with 5-10 verified companies each.
What this does NOT change
Suggested sequence
Single focused day:
Related issues
Acceptance criteria