Bulk pushes to ATS / recruiting CRM
Rate-limited batch helpers, API limits, and cost gating for high-volume writes to Bullhorn, JobAdder, Loxo, Recruiterflow, Vincere, Atlas and Recruit CRM.
When you enrich or source thousands of records and push them into an ATS/CRM, Hyreflow uses sequential, rate-limited batch helpers. Each adapter paces calls to the vendor's published limit and keeps going on individual record failures, so a single bad row does not abort the whole run.
ATS/CRM writes are free on Hyreflow — they never consume credits. The enrich cost estimate shown before a run only covers enrichment/reveal steps (email finder, agent calls, etc.).
Rate limits and batch helpers by CRM
| CRM | Default RPM | Limit key | Batch helper examples | Notes |
|---|---|---|---|---|
| Bullhorn | 1,500 | OAuth Client ID | create_candidates_batch, create_client_contacts_batch, create_client_corporations_batch, create_job_orders_batch | 1,500 req/min per OAuth app. 429 → wait 1s and retry. |
| JobAdder | 120 (2/sec) | refresh token | add_candidates_batch, add_companies_batch, add_contacts_batch, add_jobs_batch | Public limit not published; 120/min is a safe default. |
| Loxo | 60 | API key + agency slug | create_people_batch, create_jobs_batch | No published cap; default is conservative. |
| Recruiterflow | 60 | API key | add_candidates_batch, add_contacts_batch, add_clients_batch, create_jobs_batch | No published cap; conservative default. |
| Vincere | 60 | tenant + API key | create_candidates_batch | No published cap; conservative default. |
| Atlas | 60 | API key | create_people_batch, create_companies_batch, create_projects_batch, create_opportunities_batch | No published cap; conservative default. |
| Recruit CRM | 60 | API key | create_candidates_batch, create_contacts_batch, create_companies_batch | Accounts with >6 licenses can do 10 req/min per license. See Recruit CRM rate limits. |
| Spott | 600 | API key | create_candidates_batch, create_clients_batch, create_notes_batch | Spott's published limit — not a conservative default. See Spott rate limits. |
If your CRM plan is provisioned for a higher rate limit than the default above, contact us and we'll raise the pacing on your workspace.
How batch helpers behave
- Sequential, not parallel — CRMs throttle by token/client, so requests are serialized to avoid 429s.
- Token-scoped pacing — the limiter is shared per credential, so multiple short-lived instances do not burst above the cap.
- Continue on failure — one invalid payload returns in
failedrather than stopping the run. Usestop_on_error=Trueto abort early. - Return shape — every batch call returns
{created: [...], failed: [{payload, error, status}], total, elapsed_ms}.
hyreflow tools execute bullhorn create_candidates_batch \
--payload '[{"firstName":"Ada","lastName":"Lovelace","email":"[email protected]"}, ...]'Batched reads & updates (batch)
The typed create_*_batch helpers cover inserts. To run get / search / update over many records with
the same pacing + {failed, total, elapsed_ms} summary, every CRM exposes one generic batch method that
fans a single method call across a list of inputs. Each entry is either a plain value → method(value), or
{"args": [...], "kwargs": {...}} for methods that take more than one argument (like update).
# bulk fetch by id
hyreflow tools execute recruit-crm batch \
--payload '{"method":"get_candidate","calls":["slug_1","slug_2","slug_3"]}'
# bulk update — each call passes (slug, payload)
hyreflow tools execute recruit-crm batch \
--payload '{"method":"update_candidate","calls":[
{"args":["slug_1",{"first_name":"Ada","email":"[email protected]"}]},
{"args":["slug_2",{"first_name":"Grace","email":"[email protected]"}]}
]}'
# bulk search / lookup
hyreflow tools execute jobadder batch \
--payload '{"method":"search_by_email","calls":["[email protected]","[email protected]"]}'The return shape is {results: [...], failed: [{call, error, status}], total, elapsed_ms}.
Deletes are not supported. batch refuses any destructive method, and the CRM adapters expose no
record-delete operation — pushes and edits only.
Before a bulk push
- Run
hyreflow enrich --estimateto see the worst-case credit cost and confirm the workspace balance. - If the balance is too low, the CLI shows a checkout link or the dashboard surfaces an add-credits prompt.
- Pilot one record, then scale to 100s/1,000s with the batch helper.
hyreflow enrich --file leads.csv --with "bullhorn.create_candidates_batch" --yes