feat: integrate Workable as a new ATS provider - #214
Conversation
Add an adapter for Workable-hosted careers pages via the public apply.workable.com job-board API (v3 search + v2 detail), with ogen client, seed roster, debug CLI, and MCP wiring.
6da8947 to
d530edd
Compare
| return JobSummary{ | ||
| JobID: j.Shortcode, | ||
| Title: j.Title, | ||
| Location: workableLocationText(j.Location), |
There was a problem hiding this comment.
[P2] Include secondary job locations
The summary formats only j.Location and ignores j.Locations. A live PeopleCert search filtered to London returns jobs whose output location says Tokyo or Stuttgart because London is secondary; Detail has the same omission. Combine distinct visible primary and secondary locations.
| } | ||
| jobs := make([]dumpJob, 0, len(items)) | ||
| for _, j := range items { | ||
| jobs = append(jobs, workableDumpJob(slug, j)) |
There was a problem hiding this comment.
[P1] Preserve body-only keyword matches
Workable’s query searches posting bodies, but workableDumpJob leaves description empty before searchDump reapplies the query. Live query=engineer returns 9 upstream matches while MCP returns only 4, dropping valid body-only results. Populate description text—likely through detail requests—before residual filtering, or avoid discarding upstream full-text matches.
Summary
apply.workable.comjob-board API (POST /api/v3/.../jobssearch, filters facets,GET /api/v2/.../jobs/{shortcode}detail).cmd/workabledebug CLI.verify-companies, README provider list, and OpenAPI Makefile targets.Design notes
search_jobs_by_company(not dedicated tools).region/cityoften null on live accounts); OpenAPI usesOptNilString.Test plan
go test ./...make validate-openapicmd/workablesearch for persado (nullregion) and zego--city London