Search the web by meaning instead of by keyword.
Exa is a contact enrichment tool, and one of the 52 tools hyreflow connects to Claude, ChatGPT and other AI assistants. Through hyreflow, an AI agent can run 7 actions, all of which look something up. Paid Exa actions cost 0.1 to 40 credits per request, from your hyreflow credit balance, so you need no Exa account.
Exa is a search engine built for machines. You describe what you are looking for and it finds pages that match the idea, then hands over the actual text. It is how the agent researches a company, finds lookalikes, or answers something no database holds.
Exa is discovery and research. It finds and reads; enrichment turns what it found into people you can contact.
With hyreflow connected, you ask for the outcome in plain language and the assistant runs Exa for you. For example:
In a hyreflow run, Exa is most often paired with Apollo, GitHub, TheirStack and Firecrawl.
turn the companies Exa found into named contacts
go from a technical article to the engineer who wrote it
check whether the companies Exa surfaced are hiring
pull the full page when a summary is not enough
Through hyreflow, an AI agent can run 7 Exa actions, all of which look something up. Paid Exa actions cost 0.1 to 40 credits per request, from your hyreflow credit balance, so you need no Exa account.
| Exa action | What it does | Cost through hyreflow |
|---|---|---|
| Find similar | Looks something up | 0.2 credits per request |
| Search | Looks something up | up to 0.3 credits per request |
| Start agent run | Looks something up | up to 40 credits per request |
| Answer | Looks something up | 0.1 credits per request |
| List agent runs | Looks something up | free |
| Get agent run | Looks something up | free |
| Get contents | Looks something up | 0.1 credits per request |
One credit is priced on the pricing page. The full price list for every tool is in the pricing tables.
39 hyreflow skills call Exa as part of the run. A skill is a whole pipeline your agent already knows, end to end.
use whenyou have a spec and want search strings you can paste into LinkedIn, Google or your ATS, without hand-typing forty title variants
use whenyou can point at one person and say more like this, faster than you can write the brief that describes them
use whenthe role is hard, the obvious search is exhausted, and you need to prove to a client that you have covered the market
use whena company's own team page already lists the people you want, and the databases hardly know the firm exists
use whenan industry event has published its speakers and the people on stage look like the hire your client wants
use whenyou have a live role and want a shortlist you would actually send to the client, not a raw export
hyreflow ships a written playbook for Exa, 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 Exa docs →Routing layer for Exa API work. WHAT/guardrails here; HOW in reference/endpoints.md
and lib/exa.py. Full docs cached at reference/docs/exa/raw/llms-full.txt.
https://api.exa.aix-api-key (Exa → Dashboard → API Keys). Env EXA_API_KEY; never hardcode.search/find_similar return up to num_results (provider-capped); raise it or refine the query for more.search(query, type=, category=, num_results=, contents=) — neural/auto search. type: auto|neural|keyword|fast|deep. category: company | research paper | news | linkedin profile | etc. Pass contents={"text": True} to get page text in one call.get_contents(urls, text=, ...) — cleaned page text/highlights/summary for URLs.find_similar(url, num_results=) — expand from a seed URL (lookalike pages/companies).answer(query, text=) — cited LLM answer grounded in Exa results.request(method, path, json=) + cached docs.Every search / get_contents / find_similar / answer call is charged, including one that matches nothing — Exa prices the request it accepted. The card price covers the base request; results beyond the first 10, a per-result summary, extra content types, more URLs, and a deep/deep-reasoning type each raise it. Keep num_results tight, ask only for the content types you will read, and prefer one search with contents over separate calls. Agent runs are charged when they complete (a failed/cancelled run is not charged; auto effort has no cap — set an explicit effort and bound outputSchema arrays with maxItems when spend must be predictable). No outreach side-effects — read-only research tool, so no send guardrails (just spend awareness).
Use Exa for discovery + research in the recruiting funnel: find candidate/company pages and signals → pull text → hand structured findings to enrichment (Apollo/Lusha/etc.) or to an ATS write. Pairs with the rest of the sourcing pipeline.
Field-shape note: these are vendor-native operational notes. The client returns the raw vendor JSON and uses the method names in this file — read field shapes accordingly (no normalized-wrapper /
result.data.prefix).
type vs category are independent: type = search strategy (auto/fast/neural/deep); category = result-type filter (company/people/news/financial report). type:"news" is a 422 error - use category:"news".search/contents first and inspect citations; treat answer as the synthesis layer, not the first retrieval step, when precision matters.numResults on pilots, widen only if recall is low.lib/exa.pyImport: from lib.exa import Exa → instantiate Exa() (reads key from env). Base: https://api.exa.ai. Generic passthrough: request(method, path, *, params, json).
answer(query: str, *, text: bool = False, **opts) -> dict — POST /answer — LLM answer grounded in Exa search results, with citations.budget_remaining() -> dict — Remaining Exa balance — NOT callable by a workspace. It reads a Hyreflow-side Exa balance rather than the caller's own account, so connecting your own Exa key does not unlock it; the engine refuses it on the workspace path regardless of BYOK.find_similar(url: str, *, num_results: int = 10, **opts) -> dict — POST /findSimilar — find pages semantically similar to a seed URL.get_agent_run(run_id: str) -> dict — GET /agent/runs/{run_id} — fetch an Exa Agent run's status and result.get_contents(urls: list[str], *, text: bool = True, **opts) -> dict — POST /contents — fetch cleaned page content for URLs (text/highlights/summary).list_agent_runs(*, limit: int = 10, **opts) -> dict — GET /agent/runs — list recent Exa Agent runs (id/status/createdAt/request).ping() -> dict — BYOK key-verification probe. Exa's usage endpoint needs an api-key id in the path, so this fires the cheapest real search (1 result) to confirm the key authenticates — NOT free, ~1 search charge on the caller's own Exa account.search(query: str, *, num_results: int = 10, type: str | None = None, category: str | None = None, contents: dict | None = None, **opts) -> dict — POST /search — neural/auto web search. type: auto|neural|keyword|fast|deep.start_agent_run(query: str, *, output_schema: dict | None = None, effort: str | None = None, input: dict | None = None, data_sources: list | None = None, previous_run_id: str | None = None, **opts) -> dict — POST /agent/runs — start an async Exa Agent research/list-build run; returns a run id to poll.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 Exa for you. hyreflow exposes 7 Exa actions this way.
No. hyreflow holds the Exa account and bills each action from your hyreflow credits.
Paid Exa actions cost 0.1 to 40 credits per request, from your hyreflow credit balance, so you need no Exa account. 2 actions are free. hyreflow can show the cost of a paid action before it runs.
Add the hyreflow MCP server to your assistant and sign in. hyreflow calls the Exa API directly and exposes its actions as tools the assistant can run, so there is no separate Exa server to install.
Connect hyreflow to Claude or ChatGPT and ask for the outcome. It reads the playbook above before it makes a single call.