Skip to content
EximAgent Docs

Scale and batching

One call per list, never one call per row. Batching tiers, the 1000-row cap, worker concurrency, and how to size a run before starting it.

One call per list, never one call per row. Looping a single-entity command over a list is the single most expensive mistake available in this CLI — it burns time, rate budget, and context for no gain.

eximagent enrich company --inputs companies.ndjson

One call in, one streamed batch result out, one context fill.

Sizing a run

RowsApproach
1–10Single call, or bulk — either is fine
10–50Bulk only
50–200Bulk, and shortlist before touching contacts
200+Bulk, with aggressive shortlisting first

The shortlist step is what keeps a large run affordable. Contact discovery across an unfiltered 200-row list spends most of the budget on companies you were never going to contact.

Hard caps

  • 1000 rows per --inputs call. Above that the call fails with INVALID_ARG; split into sequential bulk calls.
  • 25 server-side workers. Passing a higher --concurrency is silently clamped, and the started event reports concurrencyClamped: true.
  • Default concurrency is 10 and reduces automatically under upstream rate pressure.

Long runs

Bulk enrichment over 200+ rows, and any confirmed search run, can take several minutes. The client timeout defaults to 180s — raise it with EXIMAGENT_TIMEOUT_MS or re-run with --stream to watch progress live.