HRMS migration
Field-level mapping, validation, and rollback between Folks HR and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Folks HR
Source
Bullhorn ATS & CRM
Destination
Compatibility
7 of 12
objects map 1:1 between Folks HR and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Folks HR to Bullhorn is a platform-type migration: Folks HR is a general Canadian SMB HRIS, and Bullhorn is a recruitment-focused ATS and CRM. The primary migration driver is that staffing and recruitment agencies outgrow Folks HR's recruitment module and consolidate onto Bullhorn for its candidate pipeline, job ordering, client management, and placement tracking. We translate Folks HR Employees into Bullhorn Candidate records, Folks HR Candidates into Bullhorn Candidate records with pipeline status preserved, and Folks HR's org structure and time tracking into Bullhorn custom fields on the appropriate entities. Bullhorn requires every record to have an owner, so we reconcile Folks HR user accounts against Bullhorn users before migration begins. Bullhorn's custom object limits are edition-gated—ATS Growth has no custom objects, ATS and Enterprise allow 10 with 55 fields each—and we surface this constraint during scoping so the customer selects the right Bullhorn tier. Workflows, automation rules, and payroll integration configurations do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Bullhorn's automation framework.
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 Folks HR 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.
Folks HR
Employee
Bullhorn ATS & CRM
Candidate (or Contact via Bullhorn CRM)
1:1Folks HR employee records map to Bullhorn Candidate records with a custom field folks_employee_id__c carrying the original Folks HR employee identifier. Contact information (name, email, phone, address) maps to standard Bullhorn Candidate fields. If the customer also licenses Bullhorn CRM, employee records that represent client contacts map to Bullhorn Contact with a type flag. We preserve the original employment status, start date, and department as custom fields on the Candidate record since Bullhorn's native Candidate object does not have dedicated fields for these HR attributes.
Folks HR
Candidate
Bullhorn ATS & CRM
Candidate
1:1Folks HR candidate records map directly to Bullhorn Candidate records with the pipeline stage translated to the corresponding Bullhorn status value (Applied, Phone Screen, Interview, Offer, Placed). Resume files download individually from Folks HR (no bulk endpoint) and upload to Bullhorn as ContentDocument records linked via ContentDocumentLink to the Candidate. We preserve the full application history and interview score entries as notes attached to the Candidate record.
Folks HR
Job Requisition
Bullhorn ATS & CRM
JobOrder
1:1Folks HR job requisitions map to Bullhorn JobOrder records. The job title, description, requirements, and employment type (full-time, part-time, contract) migrate to Bullhorn JobOrder standard fields. Salary range from Folks HR becomes custom fields on the JobOrder since Bullhorn does not have a native salary range field. We resolve the owning recruiter by matching the Folks HR user email against Bullhorn user accounts.
Folks HR
Leave Request
Bullhorn ATS & CRM
TimeOffRequest (via Bullhorn Onboarding) or Custom Object
1:manyFolks HR leave requests map to Bullhorn's time-off records if Bullhorn Onboarding (formerly Able) is in scope. If Bullhorn Onboarding is not licensed, leave requests migrate as a Bullhorn custom object (LeaveRequest__c) with fields for leave type, start date, end date, status, and employee reference. Leave balance snapshots from Folks HR are stored as a custom field on the Candidate or in a separate accrual table. We flag that Bullhorn's accrual engine must be configured post-migration for ongoing balance calculation.
Folks HR
Time Entry
Bullhorn ATS & CRM
TimeCardEntry (via Bullhorn Time & Expense) or Custom Object
1:1Folks HR time entries map to Bullhorn TimeCardEntry records if Bullhorn Time & Expense (formerly myPeopleNet) is in scope. If not, they migrate as custom object records (TimeEntry__c) with date, hours, cost code, and employee reference. We export all historical timesheet records and map the cost code association to a Bullhorn custom field or custom object lookup depending on the destination configuration.
Folks HR
Performance Review
Bullhorn ATS & CRM
Note or Custom Object on Candidate
lossyFolks HR performance review cycles, review forms, ratings, and reviewer comments are stored as notes or in a custom object (PerformanceReview__c) attached to the corresponding Candidate record in Bullhorn. Bullhorn does not have a native performance review module, so the review data is preserved as structured notes with reviewer name, review date, rating, and comment fields. We discuss the preferred format with the customer during scoping.
Folks HR
Department
Bullhorn ATS & CRM
BusinessSector (custom text) or Custom Object
lossyFolks HR departments map to Bullhorn BusinessSector as a custom text field on the Candidate record, or to a Bullhorn custom object (Department__c) if the customer requires department-level reporting in Bullhorn. Bullhorn's standard BusinessSector field is a free-text field with no validation, so we coordinate with the customer on whether to use it directly or create a controlled custom object.
Folks HR
User Account
Bullhorn ATS & CRM
User
1:1Folks HR user accounts map to Bullhorn User records by email match. Role-based permissions (admin, manager, employee) translate to Bullhorn role assignments, though Bullhorn's permission model differs from Folks HR's. Owners without a matching Bullhorn User go to a reconciliation queue, and the customer's Bullhorn admin provisions missing users before record import resumes since Bullhorn requires an owner on every record.
Folks HR
Document (Employee File)
Bullhorn ATS & CRM
ContentDocument
1:1Folks HR employee documents (contracts, tax forms, certifications) download individually via API (no bulk endpoint) and upload to Bullhorn as ContentDocument records linked via ContentDocumentLink to the corresponding Candidate record. For large document archives (hundreds of files), we sequence downloads across multiple sessions to stay within Folks HR's 60 requests per minute API limit and prioritize high-value documents first. We surface this constraint during scoping so the customer can set document prioritization.
Folks HR
Document (Recruitment Attachment)
Bullhorn ATS & CRM
ContentDocument on Candidate or JobOrder
1:1Folks HR candidate resumes, offer letters, and recruitment attachments map to Bullhorn ContentDocument records linked to the Candidate or JobOrder. Resume files download individually from Folks HR and attach to the Bullhorn Candidate record with the Description field set to the original Folks HR attachment type (Resume, Cover Letter, Offer Letter, etc.). We preserve the original file name and any Folks HR file ID as metadata for audit trail purposes.
Folks HR
Custom Field (Employee Profile)
Bullhorn ATS & CRM
CustomText, CustomDate, or CustomFloat on Candidate
lossyFolks HR custom fields on employee profiles map to Bullhorn custom fields on the Candidate object. Field type translation is determined during scoping: text fields become CustomText1-50, date fields become CustomDate1-10, numeric fields become CustomFloat1-10. Bullhorn has a 100-character limit on CustomText fields that we check against Folks HR source values, truncating or escalating based on customer preference. Bullhorn's edition limits the number of available custom fields per entity, so we prioritize the customer's most critical custom fields during scoping.
Folks HR
Expense Report
Bullhorn ATS & CRM
Custom Object or Third-Party Expense Tool
lossyFolks HR expense reports with line items, receipts, amounts, and approval status are exported as structured data. Bullhorn does not have a native expense management module. We migrate expense report metadata (report ID, date, total amount, approval status, line item descriptions) to a Bullhorn custom object (ExpenseReport__c) if the customer licenses Bullhorn CRM or ATS with custom objects available. Receipts download individually from Folks HR and are attached as ContentDocument records. If Bullhorn Onboarding with expense features is not in scope, we document the expense data structure for migration to a dedicated expense tool.
| Folks HR | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate (or Contact via Bullhorn CRM)1:1 | Fully supported | |
| Candidate | Candidate1:1 | Fully supported | |
| Job Requisition | JobOrder1:1 | Fully supported | |
| Leave Request | TimeOffRequest (via Bullhorn Onboarding) or Custom Object1:many | Fully supported | |
| Time Entry | TimeCardEntry (via Bullhorn Time & Expense) or Custom Object1:1 | Fully supported | |
| Performance Review | Note or Custom Object on Candidatelossy | Fully supported | |
| Department | BusinessSector (custom text) or Custom Objectlossy | Fully supported | |
| User Account | User1:1 | Fully supported | |
| Document (Employee File) | ContentDocument1:1 | Fully supported | |
| Document (Recruitment Attachment) | ContentDocument on Candidate or JobOrder1:1 | Fully supported | |
| Custom Field (Employee Profile) | CustomText, CustomDate, or CustomFloat on Candidatelossy | Fully supported | |
| Expense Report | Custom Object or Third-Party Expense Toollossy | 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.
Folks HR gotchas
API rate limit of 60 requests per minute
Document attachments require individual retrieval
No SSO forces email-based two-factor login
Leave balance calculations not exposed via API
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 Bullhorn edition assessment
We audit the source Folks HR portal for employee count, candidate volume, job requisitions, leave request history, time entry records, document archives, and custom field definitions. We pair this with a Bullhorn edition assessment: ATS Growth ($negotiated) covers basic recruitment without custom objects; ATS ($negotiated) adds 2 custom objects; Front Office Growth or Enterprise adds 10 custom objects and SSO. The discovery output is a written migration scope with record counts per object, a Bullhorn edition recommendation, and a list of any Folks HR data that exceeds Bullhorn field type limits.
User reconciliation and Bullhorn User provisioning
We extract every distinct Folks HR user referenced on employee, candidate, and leave request records and match by email against the Bullhorn destination org's User table. Users without a matching Bullhorn User go to a reconciliation queue. The customer's Bullhorn admin provisions missing users and assigns roles (recruiter, sales, hiring manager, admin) before record migration begins. Bullhorn requires an owner on every record, so this step is a hard dependency before any data moves.
Schema design and Bullhorn custom field pre-creation
We design the destination schema in Bullhorn, creating custom fields on the Candidate object for Folks HR custom employee profile fields, custom objects for leave requests and expense reports if Bullhorn edition permits, and custom fields for org structure (department, location). Bullhorn's custom field API names (CustomText1-50, CustomDate1-10, CustomFloat1-10) are assigned during this phase. If the customer requires more custom fields or custom objects than the Bullhorn edition allows, we escalate to the edition upgrade decision before proceeding.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox environment using a representative data sample. The customer's Bullhorn admin reconciles record counts (candidates in, employees in, job orders in), spot-checks 25-50 random records against the Folks HR source, and validates that custom field values populated correctly. Mapping corrections and character limit issues surface here. Sign-off on the sandbox migration is required before production migration begins.
Document archive sequencing
Folks HR document attachments are retrieved individually via API with no bulk download endpoint. We sequence document downloads across multiple sessions staying within the 60 requests per minute limit, prioritizing employment contracts and offer letters first, then resumes, then supporting documents. We provide the customer with a document priority checklist during scoping and an estimated retrieval timeline based on total document count.
Production migration in dependency order
We run production migration in record order: Bullhorn Users (validated from step 2), JobOrders (from Folks HR job requisitions), Candidates (from Folks HR candidates and employees), leave requests and time entries (to Bullhorn custom objects or Bullhorn Onboarding if licensed), document attachments (ContentDocument via API sequencing), and custom field data. Each phase emits a row-count reconciliation report before the next phase begins. Leave balance snapshots are delivered as a structured CSV for manual entry or accrual engine configuration in Bullhorn.
Cutover, validation, and automation inventory handoff
We freeze Folks HR writes during cutover and run a final delta migration of any records modified during the migration window. We deliver a written inventory of Folks HR workflows, automation rules, and payroll integration configurations with Bullhorn equivalents documented for the customer's admin to rebuild post-migration. We support a one-week hypercare window for reconciliation issues. We do not rebuild Folks HR workflows in Bullhorn Flow or Bullhorn Automation (formerly Herefish) within the migration scope; that is a separate engagement.
Platform deep dives
Folks HR
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Folks HR and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Folks HR and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between Folks HR 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
Folks HR: 60 requests per minute per organization.
Data volume sensitivity
Folks HR 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 Folks HR to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Folks HR 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 Folks HR
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.