Loxo
Recruiting ATS/CRM — read jobs, people & companies, create candidates, attach them to jobs. Agency-scoped, production writes.
Use Loxo as an ATS write target: read jobs, people and companies, create candidates, and link candidates to jobs. It is the destination for sourced + enriched candidates, and the source of your target-account list for company-first BD.
Free (BYOK). ATS/CRM operations cost no credits. Loxo is agency-scoped — connect it from the dashboard Integrations page with your API key and agency slug (e.g. acme). Pasting your full Loxo URL (acme.loxo.co) works too — the slug is its first label.
Capabilities
| Tool | Does | Cost |
|---|---|---|
list_jobs | Paginated jobs (page, per_page) | Free |
get_job | Single job by id | Free |
list_people | Paginated people / candidates | Free |
list_companies | Companies / accounts by cursor, with a Lucene query | Free |
iter_companies | Walk the whole account list, following the cursor | Free |
get_company | Single company by id — website (url), custom fields | Free |
update_company | Edit a company (create_company to add one) | Free |
list_dynamic_fields | The agency's custom-field definitions | Free |
create_person | Create a person record | Free |
apply_to_job | Add a candidate to a job (multipart) | Free |
list_job_candidates | Candidates on a job, with pipeline stage | Free |
Guidance
- Adding a candidate to a job is
apply_to_job(POST /jobs/{id}/apply), notcreate_job_candidate(deprecated alias) — it ismultipart/form-datawith requiredemail+name+phone(optionalresumefile). - These are production ATS writes — pilot one record, confirm the result, then bulk.
- Handoff: enriched candidates →
create_person/apply_to_jobto assign them to a job. - Jobs paginate with
page/per_page. People and companies paginate by cursor: pass thescroll_ideach response returns, with aper_pageup to 100, and a Lucenequeryto filter (name:acme AND city:denver).iter_companiesfollows the cursor for you. - A company's agency custom fields arrive as
custom_hierarchy_1..6{id, value}pairs, and each slot means something different per agency. Read the definitions withlist_dynamic_fields, then map the slots to their names withcompany_custom_fields(company, labels). - Company-first BD:
iter_companies→ each account'surl→ career-page scraping for their live roles → contacts through the sourcing waterfall.
hyreflow tools execute loxo apply_to_job \
--payload '{"job_id":"1234","email":"[email protected]","name":"Ada Lovelace","phone":"+15555550123"}'Loxo is an ATS sink, not a waterfall member — wire it as the final push step after source → enrich → verify.
Rate limits & bulk writes
Loxo does not publish a fixed RPM, so the adapter defaults to a conservative 60 requests / minute.
Use create_people_batch, create_jobs_batch and create_companies_batch for large pushes.
See Bulk pushes to ATS / recruiting CRM.