HRMS migration
Field-level mapping, validation, and rollback between Teamtailor and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Teamtailor
Source
Bullhorn ATS & CRM
Destination
Compatibility
12 of 14
objects map 1:1 between Teamtailor and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Teamtailor to Bullhorn is a migration from an employer-brand-first ATS to a staffing-agency ATS with embedded CRM. Teamtailor organizes data around Candidates, Jobs, and Applications with department and location taxonomies; Bullhorn organizes around Candidates, Jobs, Clients (Companies), Placements, and Opportunities with a CRM-native data model. The structural difference matters most for companies using Teamtailor's multi-brand feature or storing client records alongside candidate records — Bullhorn separates these into distinct entities that must be reconciled during scoping. We extract Candidates and Applications with full custom field coverage, map Teamtailor departments and locations to Bullhorn's equivalent taxonomies, and preserve interview kit names as Bullhorn notes for your admin to rebuild structured interview guides. Teamtailor automations and trigger rules are not exposed via the public API and do not migrate; we document every active automation visible in the UI for your team to rebuild in Bullhorn's 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 Teamtailor 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.
Teamtailor
Candidate
Bullhorn ATS & CRM
Candidate
1:1Teamtailor Candidates map directly to Bullhorn Candidate records. The HubSpot-equivalent model in Bullhorn, Candidate stores name, email, phone, address, employment history, and education. Teamtailor custom fields on candidates migrate to Bullhorn custom fields on the Candidate entity, which we pre-create during schema design. We resolve the Teamtailor user (recruiter owner) by email match against Bullhorn User and assign OwnerId on insert.
Teamtailor
Job
Bullhorn ATS & CRM
Job
1:1Teamtailor Jobs map to Bullhorn Jobs. The job title, status (active/paused/closed), department, location, and body content transfer directly. Bullhorn Job status values map from Teamtailor's published, paused, and archived statuses. Job custom fields migrate to Bullhorn Job custom fields. We preserve the public job URL from Teamtailor as a reference field for back-links to the original posting.
Teamtailor
Job Application
Bullhorn ATS & CRM
Candidate Job Submission
1:1Teamtailor Job Applications link a Candidate to a Job with a status, source, and timestamps. These map to Bullhorn Candidate Job Submissions, which are the primary join records between Candidate and Job in Bullhorn's ATS model. Application status, rejection reasons, and submission date transfer. We write Applications after both the Candidate and Job exist in Bullhorn to satisfy foreign key constraints.
Teamtailor
Department
Bullhorn ATS & CRM
Department
1:1Teamtailor Departments export as a flat list from the /v1/departments endpoint and map to Bullhorn Department records. Bullhorn uses Department as an organizational taxonomy on Job records. We import departments before Jobs so that the DepartmentId lookup is satisfied at Job insert time.
Teamtailor
Location
Bullhorn ATS & CRM
Office
1:1Teamtailor Locations map to Bullhorn Office records. Bullhorn Office stores geographic data (city, state/region, country) and can be linked to Job and Candidate records. We import Offices before Jobs to satisfy location lookups. If Teamtailor locations contain complex address components, we parse them into Bullhorn's address subfields during the transform step.
Teamtailor
Custom Field (Candidate)
Bullhorn ATS & CRM
Custom Field (Candidate)
1:1Teamtailor candidate custom fields are discovered by sampling candidate records during a discovery pass since Teamtailor does not expose a metadata endpoint. We inspect returned attributes across 25-50 sample records to build the full field list with types inferred from values. Each discovered field is pre-created in Bullhorn with a matching type (text, number, date, picklist) before the Candidate migration phase begins. Fields that exceed Bullhorn's per-entity custom field limit are flagged for Custom Object conversion.
Teamtailor
Custom Field (Job)
Bullhorn ATS & CRM
Custom Field (Job)
1:1Teamtailor job custom fields are scoped to the Job object and discovered alongside candidate custom fields during the same discovery pass. These map to Bullhorn custom fields on the Job entity. Job custom fields are typically fewer than candidate custom fields because Teamtailor's job templates have a more constrained schema. We create Bullhorn fields during schema design before the Job import phase.
Teamtailor
User (Hiring Team)
Bullhorn ATS & CRM
User
1:1Teamtailor Users (recruiters and hiring managers) map to Bullhorn User records by email match. We export the full user list from /v1/users and reconcile against Bullhorn's User table. Any Teamtailor user without a matching Bullhorn User goes to a reconciliation queue for the customer's Bullhorn admin to provision before the Candidate migration phase runs.
Teamtailor
Interview Kit and Question
Bullhorn ATS & CRM
Custom Object or Note
1:1Teamtailor Interview Kits group structured questions tied to jobs. Bullhorn does not have a native Interview Kit equivalent. We export kit names, question text, and question type from Teamtailor's API and write them as Bullhorn Note records linked to the corresponding Job, with the kit name in the Note title for discoverability. The customer's Bullhorn admin uses these as source material to rebuild structured interview guides in Bullhorn.
Teamtailor
Upload and Attachment (Resume, Cover Letter)
Bullhorn ATS & CRM
Candidate Attachment
1:1Teamtailor stores resumes, cover letters, and other files as upload objects with API URLs. We fetch each file from the provided URL and upload it as a Candidate Attachment in Bullhorn using the Bullhorn REST API's attachment endpoints. File type, filename, and upload date are preserved. Attachments are written after the parent Candidate record exists to satisfy the foreign key.
Teamtailor
Candidate Answer (Application)
Bullhorn ATS & CRM
Candidate Custom Field Value
1:1Teamtailor stores candidate answers to job application questions as separate answer objects linked to the application. We extract answers per application by querying /v1/answers with date-bounded pagination to avoid HTTP 500 errors on large datasets. Answers map to Bullhorn custom field values on the Candidate Job Submission record, using the question text as the field label.
Teamtailor
Action and Activity Log
Bullhorn ATS & CRM
Task
1:1Teamtailor Actions (stage changes, status updates, notes logged by recruiters) are exported from /v1/actions with date-bounded pagination. Bullhorn does not have a direct activity log equivalent, so we write Action records as Bullhorn Task entries with a custom field action_type__c carrying the original action type, preserving timestamps for audit. This is not a 1:1 migration of the activity timeline but a structured record of significant candidate interactions.
Teamtailor
Multi-Brand Configuration
Bullhorn ATS & CRM
Scoped Entity Export
lossyTeamtailor's Multi-Brand feature allows separate employer brands with separate career sites and candidate pools under one account. Bullhorn does not have a native multi-brand equivalent; brands are typically modeled as separate Bullhorn accounts or as a Job Classification taxonomy within a single account. We scope the export to a single Teamtailor entity during migration and document the multi-brand structure for the customer to decide whether to run separate Bullhorn accounts per brand or consolidate under one org.
Teamtailor
Candidate Stage (Application Status)
Bullhorn ATS & CRM
Candidate Job Submission Status
lossyTeamtailor application statuses (applied, screening, interview, offer, rejected, hired) map to Bullhorn Candidate Job Submission status values. We create a Bullhorn Status Category or use the existing status workflow to match Teamtailor's pipeline stages. Closed statuses (rejected, hired) map to Bullhorn's isClosed flag.
| Teamtailor | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Job | Job1:1 | Fully supported | |
| Job Application | Candidate Job Submission1:1 | Fully supported | |
| Department | Department1:1 | Fully supported | |
| Location | Office1:1 | Fully supported | |
| Custom Field (Candidate) | Custom Field (Candidate)1:1 | Fully supported | |
| Custom Field (Job) | Custom Field (Job)1:1 | Fully supported | |
| User (Hiring Team) | User1:1 | Fully supported | |
| Interview Kit and Question | Custom Object or Note1:1 | Fully supported | |
| Upload and Attachment (Resume, Cover Letter) | Candidate Attachment1:1 | Fully supported | |
| Candidate Answer (Application) | Candidate Custom Field Value1:1 | Fully supported | |
| Action and Activity Log | Task1:1 | Fully supported | |
| Multi-Brand Configuration | Scoped Entity Exportlossy | Fully supported | |
| Candidate Stage (Application Status) | Candidate Job Submission Statuslossy | 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.
Teamtailor gotchas
API rate limit of 50 requests per 10 seconds can stall bulk exports
Unbounded answers and actions endpoints return HTTP 500 on large datasets
Custom fields are not surfaced in a unified schema endpoint
Automation and trigger rules are not accessible via the public API
API versioning header is required on every request
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 API scoping
We authenticate against Teamtailor's JSON API with the required X-Api-Version header and run discovery across all entity types: Candidates, Jobs, Job Applications, Departments, Locations, Users, and custom field schemas. We sample 25-50 records per entity to discover all active custom field names and types since Teamtailor has no metadata endpoint. We count total records per entity, estimate API extraction time given the 50 req/10s rate limit, and identify any multi-brand sub-entities requiring separate scoping. The output is a written migration scope document with record counts, custom field inventory, and a Teamtailor-side data health assessment.
Destination schema design in Bullhorn
We design the Bullhorn destination schema based on the Teamtailor discovery output. This includes pre-creating Bullhorn custom fields on Candidate, Job, and Candidate Job Submission entities to match the discovered Teamtailor custom field inventory. If the Teamtailor schema exceeds Bullhorn's per-entity custom field limit, we convert overflow fields to Bullhorn Custom Objects. We configure department and office taxonomies, map Teamtailor application statuses to Bullhorn Candidate Job Submission statuses, and set up the interview kit documentation structure (Bullhorn Notes). Bullhorn schema changes deploy into the customer's Sandbox or staging org first for validation.
Sandbox migration and reconciliation
We run a full extraction and load into a Bullhorn Sandbox using production-like data volumes. The customer's recruiting operations lead reviews record counts in Bullhorn (Candidates in, Jobs in, Applications in), spot-checks 25-50 randomly selected candidate records against Teamtailor source data, and validates custom field values. Any mapping corrections, missing fields, or data quality issues are resolved in the sandbox phase. This step prevents discovery of data issues after production cutover.
File attachment extraction
We extract candidate resume and cover letter files from Teamtailor's upload URLs. Each file is fetched with the Teamtailor API token and uploaded to Bullhorn as a Candidate Attachment via Bullhorn's attachment REST endpoints. File types, filenames, and dates are preserved. Attachments are written after the parent Candidate record exists to satisfy foreign key constraints.
Production migration in dependency order
We run the production migration in record-dependency order: Departments and Offices (taxonomies first), then Users (owner reconciliation validated), then Jobs (with DepartmentId and LocationId resolved), then Candidates (with OwnerId resolved and custom fields populated), then Candidate Job Submissions (with CandidateId and JobOrderId resolved and application status mapped), then candidate answers (linked to submission via question text mapping), then interview kit documentation (Bullhorn Notes linked to Job), then actions (Bullhorn Tasks with action_type__c custom field). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze writes in Teamtailor during cutover, run a final delta migration of any records modified during the migration window, then enable Bullhorn as the system of record. We deliver the automation inventory document listing every Teamtailor automation with trigger, conditions, and actions for the customer's Bullhorn admin to rebuild. We support a one-week hypercare window for reconciliation issues. Post-migration admin support, Bullhorn workflow rebuilding, and training are outside standard migration scope and are separate engagements.
Platform deep dives
Teamtailor
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Teamtailor and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Teamtailor and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between Teamtailor 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
Teamtailor: 50 requests per 10 seconds per organization.
Data volume sensitivity
Teamtailor 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 Teamtailor to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Teamtailor 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 Teamtailor
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.