HRMS migration
Field-level mapping, validation, and rollback between Recruitly and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Recruitly
Source
Bullhorn ATS & CRM
Destination
Compatibility
10 of 13
objects map 1:1 between Recruitly and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Recruitly to Bullhorn is a step up from a small-to-mid agency platform to the enterprise standard in staffing and recruiting software. Recruitly's schema is relatively flat with custom columns in the Companies module and tier-gated record limits (1,000 to 50,000+ Candidates depending on plan). Bullhorn enforces a structured entity model (Candidate, ClientContact, ClientCorporation, JobOrder, Placement, Opportunity) with a formal custom object setup requiring a support ticket and a limit of 55 fields per custom object on Growth and Enterprise editions. We extract the full Companies column list from Recruitly before export, scope against the target Bullhorn edition for field capacity, provision Bullhorn custom objects upfront via a completed Custom Object Setup Sheet submitted to Bullhorn Support, and align the delta migration to Recruitly's own Friday-end-of-day cutover window. We do not migrate Outreach Campaigns, automation workflows, or AI matching configurations as code; we deliver a written inventory of these for your Bullhorn admin to rebuild in Bullhorn Automation (Herefish) or through Bullhorn's native workflow builder.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Recruitly object lands in Bullhorn ATS & CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Recruitly
Candidate
Bullhorn ATS & CRM
Candidate
1:1Recruitly Candidate records map directly to Bullhorn Candidate. Standard fields (firstName, lastName, email, phone, skills, source, status) transfer via REST API. Custom fields on Candidate require a Bullhorn Support ticket to create customObject1-10 schema before import; we pre-create the custom object definitions during discovery and submit the Custom Object Setup Sheet to Bullhorn Support before the migration phase begins. CV and resume attachments export from Recruitly's Export Data module and attach as ContentDocument records on the Bullhorn Candidate.
Recruitly
Contact
Bullhorn ATS & CRM
ClientContact
1:1Recruitly Contacts (managed under the Sales module) map to Bullhorn ClientContact. The contact's associated Recruitly Company record maps to a Bullhorn ClientCorporation, and the ClientContact.clientCorporation lookup is resolved at import time. Email, phone, title, and owner fields map directly. Recruitly's contact record limits (200 Free, 5,000 Solo, 25,000+ Professional) do not apply at Bullhorn, removing a constraint that often surfaces after migration scoping.
Recruitly
Company
Bullhorn ATS & CRM
ClientCorporation
1:1Recruitly Companies map to Bullhorn ClientCorporation. This mapping requires explicit field extraction from the customer's live Recruitly Companies module because the column configuration can include fields from Sales Analytics, Recruiting Analytics, Billing, General, Recent Activities, and Custom field groups. We extract the full visible column list before export and map each to a corresponding Bullhorn ClientCorporation field. Fields without a Bullhorn equivalent become custom fields on ClientCorporation, subject to the 55-field custom object limit if they exceed standard field capacity.
Recruitly
Job
Bullhorn ATS & CRM
JobOrder
1:1Recruitly Jobs map to Bullhorn JobOrder. The Recruitly job status (open, filled, on hold, cancelled) maps to Bullhorn's jobStatus field. Job requirements, description, and board distribution settings transfer as custom fields or standard JobOrder text fields. Recruitly's tier-based job limits (5 Free, 25 Solo, unlimited Professional) do not apply at Bullhorn, so open job counts above Recruitly Professional limits can be migrated without tier upgrades.
Recruitly
Placement
Bullhorn ATS & CRM
Placement
1:1Recruitly Placements map to Bullhorn Placement. The full lifecycle from offer acceptance through onboarding, guarantee period, and commission tracks as Bullhorn Placement records with corresponding Candidate, JobOrder, and ClientContact lookups. Placement-to-invoice linkage is preserved by mapping Recruitly invoice references to Bullhorn Billing or third-party billing system fields; if Bullhorn Billing is not in scope, we flag the invoice mapping for manual review during cutover. Commission rates and guarantee period details transfer as custom fields on Placement.
Recruitly
Pipeline
Bullhorn ATS & CRM
JobOrder Pipeline (custom field or workflow)
lossyRecruitly candidate pipelines are structured with stages tied to Jobs. Bullhorn does not have a native pipeline Kanban for candidates in the same way Recruitly does; candidate progression through stages maps to JobOrder status values or to a custom pipeline field that we create during Bullhorn schema setup. We preserve stage names, candidate order within stages, and stage-to-stage movement history where available via the Recruitly API. The mapping is configured during discovery and validated in a Bullhorn Sandbox before production migration.
Recruitly
Activity (engagements)
Bullhorn ATS & CRM
Note, Task, Appointment
1:1Recruitly logs engagement activities on Candidates and Contacts as Recent Activities. We export Recent Activities fields from Recruitly and map them to Bullhorn Note, Task (with TaskSubtype), and Appointment (Event) records. The parent record lookup (candidateID or clientContactID) is resolved at migration time so that activities attach to the correct Bullhorn record. Bullhorn's REST API supports notes, tasks, and appointments via the engagement and activity endpoints; we use batch inserts to manage volume. Bullhorn Plugin documentation confirms activities, notes, and appointments are importable objects.
Recruitly
Folder and Saved Search
Bullhorn ATS & CRM
Tag (custom field) or manual grouping
1:1Recruitly Folders and Saved Searches are soft-organisation constructs that do not have a direct Bullhorn equivalent. We export the underlying record sets rather than the folder structure itself, and tag migrated records with the folder name as a custom Candidate or Contact field. We deliver a written reference document mapping each Recruitly folder to the set of Candidate IDs it contained, so the Bullhorn admin can recreate groupings or note which candidates require re-tagging.
Recruitly
Outreach Campaign
Bullhorn ATS & CRM
Bullhorn Automation (Herefish) or third-party tool
lossyRecruitly Outreach Campaigns (email sequences with templates, recipient lists, send history, and open/click metrics) do not migrate as functional campaigns to Bullhorn because Bullhorn's cadence and sequencing features live in Bullhorn Automation (Herefish), a separate add-on. We export campaign templates as reference documents and map recipient lists to Bullhorn Candidate records with a custom campaign-source field. A Bullhorn admin rebuilds the cadence logic in Herefish post-migration. Recruitly's per-tier recipient limits (100 Free, 500 Solo, unlimited Professional) do not apply at Bullhorn.
Recruitly
User and Owner
Bullhorn ATS & CRM
BullhornUser
1:1Recruitly User records and Owner assignments on Candidates, Jobs, and Placements map to Bullhorn BullhornUser. We resolve owners by email match. Any Recruitly Owner without a matching BullhornUser goes to a reconciliation queue for the customer's Bullhorn admin to provision before record import resumes. Inactive Recruitly users are mapped to inactive BullhornUser records to preserve assignment history without granting active login access.
Recruitly
Attachment (CV, cover letter, documents)
Bullhorn ATS & CRM
ContentDocument
1:1CVs, cover letters, and supporting documents attached to Recruitly Candidates and Jobs export from the Recruitly Export Data module (Export Data privilege required) and migrate as Bullhorn ContentDocument records linked via ContentDocumentLink to the parent Candidate or JobOrder. Document format conversion is applied where Recruitly's branded CV format (PDF with watermarking) is not natively supported in Bullhorn; we convert to standard PDF and preserve the original as a secondary attachment if the customer requests.
Recruitly
Invoice and Billing Record
Bullhorn ATS & CRM
Bullhorn Billing or manual mapping
1:1Recruitly placement-linked invoices with line items, payment status, and trust account references require manual mapping review because billing workflows differ significantly between platforms. If Bullhorn Billing or Bullhorn One is in scope, we map invoice records to the Bullhorn Billing entity model. If not, we deliver a written invoice mapping reference and flag the records that require manual entry or third-party accounting system reconciliation post-migration. This is consistently the highest-touch object in the migration scope.
Recruitly
Custom Field
Bullhorn ATS & CRM
CustomObject1-10 (via support ticket)
lossyRecruitly custom fields across all major objects map to Bullhorn customObject1 through customObject10. Bullhorn requires a Support ticket with a completed Custom Object Setup Sheet specifying field display name, description, hint, required status, edit type (text, drop-down, checkbox, picker, etc.), and field values for each custom field. Bullhorn editions restrict the number of searchable custom objects: Growth/Enterprise allows 10 custom objects with 55 fields each; ATS Growth has none. We pre-scope custom field count against the target Bullhorn edition during discovery.
| Recruitly | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Contact | ClientContact1:1 | Fully supported | |
| Company | ClientCorporation1:1 | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Placement | Placement1:1 | Fully supported | |
| Pipeline | JobOrder Pipeline (custom field or workflow)lossy | Fully supported | |
| Activity (engagements) | Note, Task, Appointment1:1 | Fully supported | |
| Folder and Saved Search | Tag (custom field) or manual grouping1:1 | Fully supported | |
| Outreach Campaign | Bullhorn Automation (Herefish) or third-party toollossy | Fully supported | |
| User and Owner | BullhornUser1:1 | Fully supported | |
| Attachment (CV, cover letter, documents) | ContentDocument1:1 | Fully supported | |
| Invoice and Billing Record | Bullhorn Billing or manual mapping1:1 | Fully supported | |
| Custom Field | CustomObject1-10 (via support ticket)lossy | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Recruitly gotchas
Tier-based record limits are migration-critical
API rate limits restrict bulk migration throughput
Export Data privilege gates all bulk exports
Delta migration window is a tight Friday–weekend cutover
Companies module columns require explicit field mapping
Bullhorn ATS & CRM gotchas
ATS Growth edition has no API access
Attachments excluded from CSV bulk exports
Custom Object limits vary sharply by edition
Opportunity pipeline stages are recruitment-specific
Resume parse quality varies by document format
Pair-specific challenges
Migration approach
Discovery and target edition selection
We audit the source Recruitly portal across plan tier, total record counts (Candidates, Contacts, Companies, Jobs, Placements, Activities), custom field definitions, active outreach campaigns, folder and saved search structures, and billing/invoice records. We pair this with a Bullhorn edition review (Starter at $99/user, Growth, Enterprise, or Bullhorn One for billing and payroll). The discovery output is a written migration scope, a custom object count against the target Bullhorn edition's limits, and a Bullhorn Support ticket checklist for custom object provisioning.
Custom object schema provisioning via Bullhorn Support
Before any data export begins, we complete the Bullhorn Custom Object Setup Sheet with field display names, descriptions, hints, required flags, edit types, and field values for every Recruitly custom field that maps to a Bullhorn custom object. We submit the completed spreadsheet to Bullhorn Support as a ticket. Bullhorn Support provisions customObject1-10 on the agreed entities (typically Candidate and ClientCorporation first). Migration cannot proceed past schema validation until Bullhorn confirms custom object setup. This step alone can take 3-7 business days and is the most common cause of timeline slippage.
Export privilege confirmation and full data extraction
We confirm the Export Data privilege with the Recruitly admin and extract all record sets: Candidates (with custom fields and attachments), Contacts, Companies (with the full visible column list), Jobs, Placements, Activities (Notes, Tasks, Appointments), and Invoice/Billing records. Recruitly's API rate limits (100/day Free, 1,000/day Solo) require throttling or batch export via the built-in Export Data module for larger migrations. We run the export into a structured staging directory with one CSV per object type and a manifest file recording record counts per export run.
Sandbox migration and reconciliation
We load the exported data into a Bullhorn Sandbox environment to validate the full mapping before production. Bullhorn Plugin documentation confirms that Bullhorn provides API access for data import once the account is provisioned. We run the full migration in dependency order (ClientCorporation first, then ClientContact, then Candidate, then JobOrder, then Placement, then Activity), reconcile record counts against the Recruitly source, and spot-check 25-50 records per object for field-level accuracy. The customer reviews and approves the Sandbox data before production migration begins.
Production migration in record dependency order
We run production migration in Bullhorn following the validated Sandbox sequence: ClientCorporation (from Recruitly Companies), ClientContact (with ClientCorporation lookup resolved), Candidate (with attachments and custom objects), JobOrder, Placement, Activity history via Bullhorn REST API batch inserts, and Invoice records as conditional scope. Bullhorn's character limits on certain fields (some capped at 100 characters) require field-level truncation during transform. Each phase emits a reconciliation report before the next phase begins. Recruitly writes are frozen during the production migration window.
Cutover, delta migration, and automation rebuild handoff
We freeze Recruitly writes, run the Friday delta export for any records created or modified since the Stage 1 export, apply the delta to Bullhorn, then enable Bullhorn as the system of record. We deliver a written inventory of all Recruitly Outreach Campaigns (with template reference and recipient list), automation workflows, and AI matching configurations that require rebuild in Bullhorn Automation (Herefish) or through Bullhorn's native workflow builder. We do not rebuild automations as code within the migration scope; that is a separate engagement. We support a one-week hypercare window for reconciliation issues raised during the first business week in Bullhorn.
Platform deep dives
Recruitly
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 1 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Recruitly and Bullhorn ATS & CRM.
Object compatibility
1 of 7 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
7-object category — typical timelines run 2–7 days end-to-end.
API constraints
Recruitly: 100 calls/day (Free), 1,000 calls/day (Solo); Professional and Enterprise limits are not publicly documented.
Data volume sensitivity
Recruitly doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Recruitly to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Recruitly to Bullhorn ATS & CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Recruitly
Other ways to arrive at Bullhorn ATS & CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.