LeoMed Job Sources — Compliance Policy
Last updated: 2026-07-16
Rule of thumb: if a source hasn't published documentation permitting third-party republishing OR signed a partner agreement with us, we don't touch it. Absence of a robots.txt Disallow is not consent.
Allow-list
A source is on the allow-list if AT LEAST ONE of the following is true:
- Public feed API with third-party permission. The source publishes an API for their listings and documents (or otherwise makes explicit) that third parties may consume it.
- Schema.org JobPosting markup on employer career pages. The employer publishes
<script type="application/ld+json">structured data specifically for aggregators (Google-for-Jobs style). Publishing schema.org JobPosting is an affirmative opt-in to being indexed. - Signed partner agreement. LeoMed has a licensing or partnership agreement in place with the source. Terms of the agreement govern.
Currently allowed
| Source | Route | Basis | Notes |
|---|---|---|---|
| Greenhouse Job Board API | greenhouse.ts | (1) Public REST, per-employer opt-in via board_token | Docs: https://developers.greenhouse.io/job-board.html — no auth required for GET. |
| Lever Postings API | lever.ts | (1) Public REST, ToS explicitly says "may be scraped by third parties" | Docs: https://github.com/lever/postings-api |
| USAJobs.gov Search API | usajobs.ts | (1) Federal open-data API, republishing permitted | Docs: https://developer.usajobs.gov/ — requires free API key registration. Env: USAJOBS_API_KEY, USAJOBS_USER_AGENT. |
| Employer career pages w/ Schema.org JobPosting | schema-org.ts | (2) Publishing <script type="application/ld+json">{"@type":"JobPosting"…} is an affirmative opt-in to aggregator indexing | Adapter shipped 2026-09-26 with empty allow-list. Dana-Farber and Stanford verified as schema-publishing but carry only APP/staff roles, not MD physicians (academic MDs recruited through faculty-affairs channels). All big NCI centers checked (MSK, MD Anderson, Duke, Fred Hutch, Cleveland Clinic, JHU, Mayo, Moffitt) host on JS SPAs (Workday/iCIMS) that don't serve HTML — need a different adapter. Populate seed list with private oncology practices or SmartRecruiters/Workable/JobVite-hosted employers that publish JobPosting. See adapter file for verification protocol. |
| Ashby Job Board API | ashby.ts | (1) Public REST, per-tenant opt-in via orgSlug | Docs: https://developers.ashbyhq.com/reference/publicjobpostingsforjobboard — no auth. Empty seed list; add tenants as oncology-adjacent employers on Ashby are discovered. Newer biotechs / cell-therapy startups are the likely fit. |
| SmartRecruiters Postings API | smartrecruiters.ts | (1) Public REST, per-tenant opt-in via companyId | Docs: https://developers.smartrecruiters.com/reference/list-postings — no auth. Empty seed list; add tenants as oncology-adjacent employers on SmartRecruiters are discovered. Common in mid-size biotech and some community hospital systems. |
| Workable widget API | workable.ts | (1) Public REST widget endpoint intended for customer-controlled external embedding | Endpoint: https://apply.workable.com/api/v1/widget/accounts/{subdomain}. No auth. Empty seed list; add tenants as oncology-adjacent employers on Workable are discovered. Common in small/mid biotechs and independent practices. |
Under negotiation
None yet. Outreach candidates:
- ASCO Career Center — non-profit oncology society; partner-feed conversation.
- ASH Job Center — non-profit hematology society; partner-feed conversation.
- NEJM CareerCenter — publisher-side; has an existing partner-feed program.
- AAMC Career Connect — medical-school association; academic oncology focus.
Add rows here once conversations progress.
No-fly list
Do NOT scrape, crawl, aggregate, or otherwise republish from:
| Source | Reason |
|---|---|
| Indeed | ToS prohibits scraping and redistribution; documented enforcement history. |
| Glassdoor | Same. |
| LinkedIn Jobs | Same; also gate their API behind restricted partner program only. |
| ZipRecruiter | Same. |
| Monster | Same. |
| PracticeLink | Direct competitor job board; ToS prohibits redistribution. |
| Locum staffing firms (LocumTenens, Weatherby, VISTA, CompHealth, Barton, Jackson+Coker, Medicus) | Aggregators are structural competitors to their direct-recruiter model; historical litigation precedent. |
The scrapers for the above sources still exist under lib/scrapers/ (imported but never registered in ALL_SCRAPERS) so historical detail pages and audit-review UI render. They will not run.
Runtime kill switch
Even for allow-listed adapters, scraping is off by default. Set SCRAPERS_ENABLED=true in the environment to run them. On Vercel, add this to production env AFTER confirming the seed employer lists in each adapter file and reviewing the estimated volume + rate on staging.
Changes to this policy
Every allow-list addition needs:
- Written source-side permission (either public docs URL or signed agreement).
- A one-liner in the adapter file's top-of-file docstring citing (1).
- A new row in the "Currently allowed" table above.
If you're not sure, treat the source as no-fly and ask.