HRMS migration
Field-level mapping, validation, and rollback between Martian Logic and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Martian Logic
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 13
objects map 1:1 between Martian Logic and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Martian Logic and Bullhorn serve different operational models. Martian Logic is a full HRIS built around a position-centric data model where org charts, compensation, and employment changes derive from Position relationships rather than standalone objects. Bullhorn is a recruitment CRM and ATS with no native payroll, no org chart, and no HRMS core — it is purpose-built for staffing agencies managing candidates, clients, jobs, and placements. Migrating from Martian Logic to Bullhorn requires reconstructing the position hierarchy as a custom object, splitting the Martian Logic Employee record into Bullhorn Candidate and ClientContact based on current employment status, and mapping onboarding e-form JSON payloads field-by-field into Bullhorn Custom Objects (limited to 2-10 depending on Bullhorn edition). Integration Connector configurations, workflow automation, and payroll push mappings do not migrate; we document them for manual rebuild in Bullhorn. Bullhorn's documented REST API and 24x7 support infrastructure make it a viable destination for staffing-first organisations leaving an all-in-one HRIS whose recruitment module is secondary to its core HRMS capabilities.
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 Martian Logic 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.
Martian Logic
Employee
Bullhorn ATS & CRM
Candidate and ClientContact
1:manyMartian Logic Employees with an active employment status and a history of recruitment activity map to Bullhorn Candidate records. Employees with no recruitment activity but an ongoing employment relationship map to Bullhorn ClientContact records if they represent client organisations, or remain as Candidate records with a custom employment_status__c field. We split on the Martian Logic employment status property and the presence of ATS conversion events. The original Employee record ID is preserved as ml_employee_id__c on the Bullhorn record for audit reconciliation.
Martian Logic
Candidate (ATS module)
Bullhorn ATS & CRM
Candidate
1:1Martian Logic's ATS Candidates — records in the recruitment pipeline before or after conversion — map directly to Bullhorn Candidate. We extract candidate status history, application dates, interview scores, and source attribution from the Martian Logic ATS module and map these to Bullhorn's Candidate status, dateAdded, candidateSource, and custom rating fields. If the candidate was converted in Martian Logic, the conversion event is preserved as a note and the converted flag is set on the Bullhorn Candidate.
Martian Logic
Position
Bullhorn ATS & CRM
Custom Object: Position__c
1:1Martian Logic Positions are first-class objects linked to employees, driving the org chart and compensation. Bullhorn has no native position entity. We create a Position__c custom object (via Bullhorn Support ticket before migration) and map Position ID, title, department, level, FTE status, and the direct supervisor position ID. The position-to-position reporting chain is walked during extraction to reconstruct the full hierarchy, then written as parent_Position__c lookup references in Bullhorn. Bullhorn Enterprise and Front Office Growth editions allow up to 10 custom objects; Position__c consumes one slot.
Martian Logic
Org Chart
Bullhorn ATS & CRM
Custom Object: Position__c (hierarchy)
lossyThe Martian Logic org chart is a derived view of Position relationships, not a standalone object. We walk the Position-to-Position reporting chain during extraction, resolve any archived or soft-deleted positions (orphaned nodes), and build the hierarchy as parent_Position__c lookups in the Position__c custom object. If positions have been improperly terminated in Martian Logic, orphaned nodes are flagged in the discovery report for the customer to resolve before migration.
Martian Logic
Compensation / Remuneration Records
Bullhorn ATS & CRM
Custom Object: Compensation__c
1:1Martian Logic Compensation is stored within or linked to Positions via the Role and Remuneration Library — base salary, allowances, pay frequency, and effective dates. Bullhorn has no native compensation object. We create a Compensation__c custom object with fields for base_salary__c, pay_frequency__c, effective_date__c, allowance_type__c, and allowance_amount__c, linked to the Position__c custom object. If multiple compensation records exist per position (historical changes), all effective-dated records are migrated with a compensation_effective_from__c field.
Martian Logic
Onboarding Packs / E-forms
Bullhorn ATS & CRM
Custom Object (per pack configuration)
1:manyE-forms completed during onboarding are stored as JSON payloads per employee. Field names, types, and mandatory/optional status differ per employer pack configuration — there is no fixed schema. We parse each payload individually during extraction and map each field to Bullhorn custom object fields. Multiple pack configurations result in multiple custom objects, each mapped to the Candidate record via lookup. Field types (date, text, checkbox, dropdown) are matched to Bullhorn edit types during schema creation. This mapping consumes custom object slots; Bullhorn ATS Growth is capped at 2 custom objects, making migrations with three or more e-form packs only viable on Bullhorn ATS, Core, or Enterprise tiers.
Martian Logic
Employment Changes
Bullhorn ATS & CRM
Custom Object: EmploymentChange__c
1:1Change of Staff Conditions records are effective-dated transactions with change type, old value, new value, and reason. Martian Logic stores these as a transaction log per employee. Bullhorn has no native employment history object. We create an EmploymentChange__c custom object with fields for change_type__c, old_value__c, new_value__c, effective_date__c, reason__c, and a Candidate lookup. All change records are migrated as a flat per-employee change log. The customer should decide whether to display this as a dedicated tab in Bullhorn or keep it as an internal reference.
Martian Logic
Recruitment Requisitions
Bullhorn ATS & CRM
JobOrder
1:1Martian Logic Requisition Workflow records (hiring requests before candidate assignment) map to Bullhorn JobOrder. We extract requisition title, requesting manager, approved headcount, status, and date created. Open requisitions become Bullhorn JobOrder records with status = Open; closed requisitions are migrated as historical records with status = Closed. The job title maps to title, and the requesting manager maps to the Bullhorn User lookup by email match.
Martian Logic
Performance Reviews
Bullhorn ATS & CRM
Custom Object: PerformanceReview__c
1:1Martian Logic Performance Review templates and completed reviews are stored against employees. Bullhorn has no native performance management object. We create a PerformanceReview__c custom object with fields for review_cycle__c, template_name__c, rating__c, goals__c, reviewer__c, and Candidate lookup. Mapping to Bullhorn is constrained by the destination's review template model; we document the review cycle structure and note that rebuilding review templates in Bullhorn requires the customer's admin to configure a new workflow or use a third-party performance module.
Martian Logic
Payroll Integrations
Bullhorn ATS & CRM
Documentation (no data migration)
lossyIntegration Connectors in Martian Logic push employee data to third-party payroll systems and store field-to-field mapping configurations. These connector mappings are Martian Logic configuration artefacts and do not export from the platform. We document every active connector's mapping during discovery — source field, destination system, destination field — and deliver this as a written connector inventory for the customer's admin to manually re-establish in their target payroll system. We do not migrate payroll integration field mappings as data.
Martian Logic
Compliance Records
Bullhorn ATS & CRM
Custom Object: Compliance__c
1:1Martian Logic Compliance modules track regulatory requirements and attestations per employee — certification status, expiry dates, and attestation records. We create a Compliance__c custom object with fields for compliance_type__c, status__c, expiry_date__c, last_attested_date__c, and Candidate lookup. Bullhorn has no native compliance enforcement mechanism; migrated compliance status and expiry dates are stored as reference data, and the customer should configure renewal alerts in Bullhorn workflows or a separate compliance tool post-migration.
Martian Logic
Employee Self-Service Access
Bullhorn ATS & CRM
Custom Fields on Candidate
1:1ESS access levels and role permissions are stored per employee or per role in Martian Logic. Bullhorn uses a role-based permissions model tied to Bullhorn User records, which is separate from Candidate records. We export ESS access levels and role assignments as custom fields on the Candidate record (ess_access_level__c, bullhorn_role_mapping__c) for reference. Bullhorn's access control logic is rebuilt by the customer's admin as part of the Bullhorn setup — we do not migrate ESS roles as Bullhorn roles because the permission models are not equivalent.
Martian Logic
Candidate (before conversion)
Bullhorn ATS & CRM
Lead
1:1Martian Logic Candidates that exist in the ATS pipeline before conversion but represent prospects rather than placed or employed individuals map to Bullhorn Lead records if the customer uses Bullhorn's Lead object for early-stage pipeline tracking. The mapping uses the Martian Logic candidate status at extraction time: pre-conversion statuses map to Lead, post-conversion statuses map to Candidate. Lead scores and source attribution from Martian Logic migrate to Bullhorn Lead custom fields.
| Martian Logic | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate and ClientContact1:many | Fully supported | |
| Candidate (ATS module) | Candidate1:1 | Fully supported | |
| Position | Custom Object: Position__c1:1 | Fully supported | |
| Org Chart | Custom Object: Position__c (hierarchy)lossy | Mapping required | |
| Compensation / Remuneration Records | Custom Object: Compensation__c1:1 | Mapping required | |
| Onboarding Packs / E-forms | Custom Object (per pack configuration)1:many | Mapping required | |
| Employment Changes | Custom Object: EmploymentChange__c1:1 | Mapping required | |
| Recruitment Requisitions | JobOrder1:1 | Mapping required | |
| Performance Reviews | Custom Object: PerformanceReview__c1:1 | Mapping required | |
| Payroll Integrations | Documentation (no data migration)lossy | Mapping required | |
| Compliance Records | Custom Object: Compliance__c1:1 | Mapping required | |
| Employee Self-Service Access | Custom Fields on Candidate1:1 | Mapping required | |
| Candidate (before conversion) | Lead1:1 | 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.
Martian Logic gotchas
No publicly documented API endpoint reference
Onboarding e-form payloads are configuration-dependent JSON
Position hierarchy drives the org chart, not a standalone object
Payroll integration field mappings must be re-created in the destination
No bulk export tool — employee data export mirrors candidate export
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 data audit
We audit the Martian Logic instance across active modules (Core HR, ATS, Onboarding, Performance, Compliance), custom field count on Employee and Position objects, e-form pack configuration inventory, Integration Connector list, and employment change record volume. We pair this with a Bullhorn edition assessment: Bullhorn ATS Growth (2 custom objects), Bullhorn ATS or Core (2 custom objects), or Front Office Growth/Enterprise (10 custom objects). The discovery output is a written migration scope, a Bullhorn edition recommendation, and a Bullhorn Support ticket list for custom object creation.
Position hierarchy extraction and orphaned node cleanup
We walk the Martian Logic Position-to-Position reporting chain manually (Martian Logic has no dedicated org chart API) to reconstruct the full hierarchy before any record migration begins. We identify archived or soft-deleted positions that create orphaned nodes and flag these for the customer's HR admin to resolve in Martian Logic before extraction. The cleaned position list becomes the basis for the Position__c custom object schema in Bullhorn, including parent_Position__c lookup references.
E-form payload parsing and custom object schema design
We parse each onboarding e-form pack's JSON payload individually, extract all field names and types, and map them to Bullhorn custom object field definitions. If the e-form pack count exceeds the customer's Bullhorn edition custom object limit, we document consolidation options (section-header groupings, multi-use fields) and the customer chooses a strategy before schema creation. Bullhorn Support tickets are submitted for each custom object; Bullhorn sets up the custom object schema, then we validate the field list and data types before importing any Candidate records.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn Sandbox or staging environment using production-like data volume. The customer's HR and recruitment leads reconcile record counts across all object types, spot-check 25-50 random Candidate and Position records against the Martian Logic source, and verify the Position hierarchy renders correctly in Bullhorn as a custom object list view. Any schema corrections, field mapping adjustments, or orphaned position resolutions happen in this phase. Sign-off on the sandbox migration is required before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Position__c custom object (hierarchy established first, with parent lookups resolved), then Employee-to-Candidate and Employee-to-ClientContact split (using employment status and ATS conversion event as split criteria), Compensation__c records linked to Position__c, EmploymentChange__c linked to Candidate, Compliance__c linked to Candidate, Onboarding e-form custom objects linked to Candidate, Recruitment Requisitions mapped to JobOrder, and Performance Reviews mapped to PerformanceReview__c. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and rebuild handoff
We freeze Martian Logic writes during cutover, run a final delta migration of any records modified during the migration window, then enable Bullhorn as the system of record for recruitment operations. We deliver the Integration Connector inventory document, the Workflow and Automation rebuild guide (these do not migrate as code), and the Bullhorn role-permission rebuild guide for ESS access levels. We support a one-week hypercare window for reconciliation issues. Bullhorn ESS access levels and role permissions are rebuilt by the customer's Bullhorn admin post-migration as a separate configuration task.
Platform deep dives
Martian Logic
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Martian Logic and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Martian Logic and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between Martian Logic and Bullhorn ATS & CRM.
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
Martian Logic: Not publicly documented.
Data volume sensitivity
Martian Logic 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 Martian Logic to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Martian Logic 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 Martian Logic
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.