← all tools
Recruiting CRM

Loxo

Push candidates into Loxo and attach them to the right job.

Loxo is a recruiting CRM, and one of the 52 tools hyreflow connects to Claude, ChatGPT and other AI assistants. Through hyreflow, an AI agent can run 21 actions: 10 that look something up and 11 that create or change records. Loxo runs on your own Loxo account: hyreflow charges no credits for it, and Loxo bills you as before.

Cost per callBYOK · vendor billed
Your own keyrequired
CategoryRecruiting CRM

Loxo is where the work gets recorded. Your agent creates candidate records, reads your live jobs, and links people to the roles they are up for. These are real writes to a production system, so it does one and shows you before it does the rest.

Loxo is the destination. Everything the pipeline produced ends up filed here.

What can you ask Claude or ChatGPT to do with Loxo?

With hyreflow connected, you ask for the outcome in plain language and the assistant runs Loxo for you. For example:

  • “Add these candidates and attach them to the job”
  • “What roles are open? Source a longlist for the hardest one with AI Ark”
  • “Is this person already in the system before I spend a credit on Lusha?”
  • “Attach this shortlist to the role and file the Granola notes”

Which tools work well with Loxo?

In a hyreflow run, Loxo is most often paired with AI Ark, Lusha, Granola and HeyReach.

  • AI Ark

    source against the roles already open in Loxo

  • Lusha

    enrich only the candidates Loxo does not already hold

  • Granola

    meeting notes filed onto the candidate

  • HeyReach

    run LinkedIn outreach off a Loxo shortlist

Which Loxo actions can an AI agent run through hyreflow?

Through hyreflow, an AI agent can run 21 Loxo actions: 10 that look something up and 11 that create or change records. Loxo runs on your own Loxo account: hyreflow charges no credits for it, and Loxo bills you as before.

Loxo actionWhat it doesCost through hyreflow
Apply to jobCreates or changes a recordno hyreflow credits
Create companies batchCreates or changes a recordno hyreflow credits
Create companyCreates or changes a recordno hyreflow credits
Create jobCreates or changes a recordno hyreflow credits
Create jobs batchCreates or changes a recordno hyreflow credits
Create people batchCreates or changes a recordno hyreflow credits
Create personCreates or changes a recordno hyreflow credits
Create person eventCreates or changes a recordno hyreflow credits
Company custom fieldsLooks something upno hyreflow credits
Update companyCreates or changes a recordno hyreflow credits
Show all 21 Loxo actions →
Loxo actionWhat it doesCost through hyreflow
Update jobCreates or changes a recordno hyreflow credits
Update personCreates or changes a recordno hyreflow credits
List activity typesLooks something upno hyreflow credits
List companiesLooks something upno hyreflow credits
List dynamic fieldsLooks something upno hyreflow credits
List job candidatesLooks something upno hyreflow credits
List jobsLooks something upno hyreflow credits
List peopleLooks something upno hyreflow credits
Get companyLooks something upno hyreflow credits
Get jobLooks something upno hyreflow credits
Get personLooks something upno hyreflow credits

One credit is priced on the pricing page. The full price list for every tool is in the pricing tables.

Which hyreflow skills use Loxo?

16 hyreflow skills call Loxo as part of the run. A skill is a whole pipeline your agent already knows, end to end.

Sourcing

Ask the people you placed for referrals into a live role

use whenyou have years of placements in your database and no habit of asking those people who else is good

JobAdderSpottLoxoLeadMagicFullEnrichEnrichleyhyreflow AgentLemlist
starts from your database · 7 stepsget the prompt →
Sourcing

Find the candidates already sitting in your own ATS

use whena role comes in and you want to know who you already have before you pay to source anyone new

Recruit CRMBullhornVincereLoxoRecruiterflowJobAdderAtlashyreflow Agent
starts from a job spec · 6 stepsget the prompt →
Sourcing

Score one candidate against every open role in your ATS

use whena strong applicant comes in for the wrong job, and your team is working dozens of other roles they might fit

Recruit CRMBullhornVincereLoxoRecruiterflowJobAdderAtlashyreflow AgentAI Ark
starts from a candidate · 7 stepsget the prompt →
Signals

Find the people you placed years ago who hire for their own team today

use whenthe people you placed years ago are running teams, and your database still files them as candidates

Recruit CRMJobAdderRecruiterflowLoxoLushaLeadMagicProspeoEnrichleyhyreflow Agent
starts from your database · 8 stepsget the prompt →
Signals

Get back in touch with candidates who were promoted or changed job

use whenyour database is full of people you have not spoken to in years, and you do not know which of them have been promoted or changed employer since

LushaLeadMagicFullEnrichLemlistRecruit CRMBullhornLoxoVincereJobAdder
starts from your database · 8 stepsget the prompt →
Database

Fill the missing emails and mobiles in your CRM

use whenyour ATS or CRM is full of people you cannot reach because the email, mobile or LinkedIn field is empty

Recruit CRMLoxoJobAdderRecruiterflowAtlasLeadMagicFullEnrichProspeoEnrichley
starts from your database · 8 stepsget the prompt →

See all 16 skills that use Loxo →

How does an AI agent know how to use Loxo?

hyreflow ships a written playbook for Loxo, and the agent loads it before the first call. Auth, rate limits, what each call costs, which actions need your approval, and the mistakes worth avoiding. It is the difference between an agent that knows the tool and one that guesses at it.

Read the Loxo docs →
Show the raw playbookwritten for the agent

HOW in lib/loxo.py.

Auth & config (agency-scoped)

  • Base URL: https://app.loxo.co/api/{LOXO_AGENCY_SLUG} — Loxo is agency-scoped. The host is fixed; an agency subdomain 404s.
  • Env: LOXO_API_KEY (Bearer), LOXO_AGENCY_SLUG (bare slug, e.g. acme — a pasted URL/domain is reduced to its first label). Never hardcode.
  • Paths CONFIRMED from loxo.readme.io (2026-06-01). Jobs paginate via page/per_page; people and companies paginate via scroll_id (+ a Lucene query). Index: reference/docs/loxo/raw/endpoints.md.

Operations

Jobs: list_jobs, get_job, create_job, update_job. People: list_people, get_person, create_person, update_person. Activity log (notes, replies, calls): list_activity_types, create_person_event. Companies (accounts): list_companies, iter_companies, get_company, create_company, update_company, plus list_dynamic_fields + company_custom_fields for the agency's custom fields. Job↔candidate: list_job_candidates (GET /jobs/{id}/candidates), apply_to_job (POST /jobs/{id}/apply).

Notes & guardrail

  • Adding a candidate to a job is apply_to_job (POST /jobs/{job_id}/apply) — multipart/form-data with REQUIRED email+name+phone (+ optional resume file). create_job_candidate is a deprecated alias.
  • Notes and replies go in as person events. Find the note or reply type in list_activity_types and take its numeric id, then call create_person_event with that activity_type_id (required), person_id and notes. With job_id, use a note-type activity: a pipeline-stage type moves the candidate on that job.
  • Production ATS writes — pilot one, confirm, then bulk.
  • list_companies paginates by cursor only: pass the scroll_id each response returns, with a per_page up to 100 — there is no page param. iter_companies(max_records=…) walks the whole account list.
  • A company's agency custom fields arrive as custom_hierarchy_1..6 {id, value} pairs, and each slot holds a different field per agency. Read the definitions once with list_dynamic_fields, then pass a {"custom_hierarchy_3": "Therapeutic area"} map to company_custom_fields(company, labels).

Handoff

ATS write target: enriched candidates → create_person / apply_to_job (assign to a job); reply notes → create_person_event. Company-first BD: iter_companies → each account's url (website) → hyreflow_native career-page scraping for their open roles → contacts via the people_search waterfall.

Callable surface — lib/loxo.py

Import: from lib.loxo import Loxo → instantiate Loxo() (reads key from env). Generic passthrough: request(method, path, *, params, json).

  • apply_to_job(job_id: str, *, email: str, name: str, phone: str, resume: tuple | None = None, **fields) -> Any — POST /jobs/{job_id}/apply — add a candidate to a job. CONFIRMED.
  • batch(method: str, calls: list, *, stop_on_error: bool = False) -> dict — Batched get/search/update/create: run one method over many inputs, rate-limited. Each call is a value -> method(value), or {"args": [...], "kwargs": {...}} for multi-arg methods like update_person(id, payload). Destructive methods (delete) are refused. See lib/_base.run_ops.
  • company_custom_fields(company: dict, labels: dict | None = None) -> dict — Local (no HTTP): a company's custom_hierarchy_1..6 slots as {field_name: value}.
  • create_companies_batch(payloads: list[dict], *, stop_on_error: bool = False) -> dict — POST /companies for many records, rate-limited.
  • create_company(payload: dict) -> Any — POST /companies — create a company (form-encoded, company[...] params). CONFIRMED.
  • create_job(payload: dict) -> Any — POST /jobs — create a job (form-encoded, job[...] params). CONFIRMED.
  • create_job_candidate(job_id: str, payload: dict) -> Any — DEPRECATED alias → apply_to_job (POST /jobs/{id}/apply, multipart).
  • create_jobs_batch(payloads: list[dict], *, stop_on_error: bool = False) -> dict — POST /jobs for many records, rate-limited.
  • create_people_batch(payloads: list[dict], *, stop_on_error: bool = False) -> dict — POST /people for many records, respecting LOXO_RATE_LIMIT_RPM.
  • create_person(payload: dict, *, resume: tuple | None = None, document: tuple | None = None) -> Any — POST /people — create a person (multipart, person[...] params). CONFIRMED.
  • create_person_event(payload: dict) -> Any — POST /person_events — log an activity (note, call, email, reply) on a person (form-encoded, person_event[...] params). CONFIRMED.
    • requires: activity_type_id
    • example: {"activity_type_id":71536,"person_id":123456,"notes":"Replied to outreach: open to a call next week."}
  • get_company(company_id: str) -> Any — GET /companies/{id} — one company, with its website (url) and custom fields. CONFIRMED.
  • get_job(job_id: str) -> Any — GET /jobs/{id}. CONFIRMED.
  • get_person(person_id: str) -> Any — GET /people/{id}. CONFIRMED.
  • iter_companies(*, per_page: int = 100, max_records: int = 1000, cursor: str | None = None, **params) -> _base.PagedResult — GET /companies — follow the scroll cursor until the account list is exhausted. CONFIRMED.
  • list_activity_types(**params) -> Any — GET /activity_types — the agency's activity types (call, email, note, …); their ids feed create_person_event. Optional workflow_id filter. CONFIRMED.
  • list_companies(**params) -> Any — GET /companies — search/list companies (accounts, employers). CONFIRMED.
  • list_dynamic_fields() -> Any — GET /dynamic_fields — the agency's custom (dynamic) field definitions. CONFIRMED.
  • list_job_candidates(job_id: str, **params) -> Any — GET /jobs/{job_id}/candidates — candidates on a job, with pipeline stage. CONFIRMED.
  • list_jobs(**params) -> Any — GET /jobs — paginated (page, per_page). CONFIRMED.
  • list_people(**params) -> Any — GET /people — paginated people/candidates (scroll_id/per_page/query). CONFIRMED.
  • update_company(company_id: str, payload: dict) -> Any — PUT /companies/{id} (form-encoded, company[...] params). CONFIRMED.
  • update_job(job_id: str, payload: dict) -> Any — PUT /jobs/{id} (form-encoded, job[...] params). CONFIRMED.
  • update_person(person_id: str, payload: dict) -> Any — PUT /people/{id} (form-encoded, person[...] params). CONFIRMED.

Questions about Loxo and hyreflow

Can I use Loxo inside Claude or ChatGPT?

Yes. hyreflow is a connector for Claude, ChatGPT and other AI assistants. Once hyreflow is connected, you ask for the outcome in plain language and the assistant calls Loxo for you. hyreflow exposes 21 Loxo actions this way.

Do I need my own Loxo account to use it with hyreflow?

Yes. Loxo runs on your own Loxo account. You connect it to hyreflow once, hyreflow charges no credits for the calls, and Loxo bills you as before.

What does Loxo cost through hyreflow?

Loxo runs on your own Loxo account: hyreflow charges no credits for it, and Loxo bills you as before.

How do I connect Loxo to an AI agent over MCP?

Add the hyreflow MCP server to your assistant and sign in. hyreflow calls the Loxo API directly and exposes its actions as tools the assistant can run, so there is no separate Loxo server to install.

Connect hyreflow to your assistant →

Put Loxo to work from one prompt

Connect hyreflow to Claude or ChatGPT and ask for the outcome. It reads the playbook above before it makes a single call.