HRMS migration
Field-level mapping, validation, and rollback between Personio and Recruit CRM & ATS. We move data and schema; workflows are rebuilt natively in Recruit CRM & ATS.
Personio
Source
Recruit CRM & ATS
Destination
Compatibility
10 of 12
objects map 1:1 between Personio and Recruit CRM & ATS.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Personio to Recruit CRM is a directional shift: Personio is an HRIS-first platform where recruiting is one module within a full employee-lifecycle suite, while Recruit CRM is a dedicated agency ATS built for high-volume sourcing, candidate tracking, and client relationship management. The migration scope is recruiting data only — employee records, payroll, absences, performance reviews, and goals do not map to Recruit CRM's candidate-centric schema. We extract recruiting Positions, Applications, and candidate profile fields from Personio's API, resolve the custom_attributes gap (which Personio does not expose via API), and load candidates into Recruit CRM with stage history intact. Workflows, approval chains, and automations do not migrate as code; we deliver a written inventory for the customer's admin to rebuild inside Recruit CRM's automation 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 Personio object lands in Recruit CRM & ATS, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Personio
Recruiting Position
Recruit CRM & ATS
Job
1:1Personio recruiting Positions (job postings with department, location, status, and hiring manager metadata) map directly to Recruit CRM Job records. The Personio position status (open, paused, closed) maps to Recruit CRM's job status field. We extract the full position metadata including custom fields via the GET Positions endpoint and map each field to the equivalent Recruit CRM job field. Position hierarchy or nested job families in Personio become flat tags or custom fields in Recruit CRM.
Personio
Application
Recruit CRM & ATS
Candidate
1:1Personio Applications (candidates linked to Positions) map to Recruit CRM Candidate records. The application status (new, screening, interview, offer, hired, rejected) maps to Recruit CRM pipeline stage values. We preserve the full application timeline as stage-change entries in Recruit CRM's candidate history. Source attribution (where the candidate came from) migrates to the candidate's source field.
Personio
Application: Custom Attributes
Recruit CRM & ATS
Candidate: Custom Fields
lossyPersonio's custom_attributes on job application forms are NOT accessible via any documented API endpoint — this is a confirmed platform limitation. We explicitly request the customer to provide a list of all custom application form fields and sample data during scoping. We then create matching custom fields in Recruit CRM and map the data manually. Without this step, custom candidate data is silently missed.
Personio
Employee (for hired candidates)
Recruit CRM & ATS
Candidate
1:1When a Personio Application reaches hired status, the candidate is linked to an Employee record in Personio. We extract the hired candidate's employee profile fields (name, contact details, start date, department, manager) and merge them into the Recruit CRM Candidate record as a complete candidate profile. The hire date from Personio maps to Recruit CRM's placement date.
Personio
Document
Recruit CRM & ATS
Candidate: Attached Files
1:1Personio employee documents (CVs, cover letters, certificates, ID scans) stored against the Application or Employee record migrate as files attached to the Recruit CRM Candidate. We map document types (CV, cover letter, reference, certification) to Recruit CRM's file category taxonomy. File naming is normalised to a flat structure during migration since Personio folder hierarchies vary by company configuration.
Personio
Department
Recruit CRM & ATS
Job: Department Tag
1:manyPersonio Departments extracted from the employee and position hierarchy are mapped as tag values on Recruit CRM Job and Candidate records. Since Recruit CRM does not have a standalone departments object (it uses tagging for organisational context), we merge all Personio departments into Recruit CRM's tag vocabulary and apply them to the relevant job and candidate records during migration.
Personio
Absence
Recruit CRM & ATS
Not Migrated
1:1Personio Absence records (vacation, sick leave, entitlement balances per employee) have no equivalent in Recruit CRM. Recruit CRM is a recruiting ATS and does not track employee absences. We flag absence data as out-of-scope during scoping and recommend the customer maintains absence records in Personio or migrates them separately to a dedicated absence management tool if they are leaving Personio entirely.
Personio
Payroll Record
Recruit CRM & ATS
Not Migrated
1:1Personio compensation entries (salary, bonus, effective-dated pay changes) and benefits enrolments have no mapping in Recruit CRM. Recruit CRM has no payroll, compensation, or benefits module. If the customer is leaving Personio entirely, we recommend migrating payroll records to a dedicated payroll platform (such as Payroll by Personio spin-off, Figure, or a local payroll provider) as a separate project.
Personio
Performance Review
Recruit CRM & ATS
Not Migrated
1:1Personio Performance Review cycles, ratings, and review form responses do not map to Recruit CRM's candidate-centric schema. Recruit CRM does not have a performance management module. We flag performance review history as out-of-scope. The customer may choose to export review summaries manually or migrate them to a dedicated performance management platform as a separate project.
Personio
Goals and OKRs
Recruit CRM & ATS
Not Migrated
1:1Personio company-level goals and individual employee objectives have no equivalent in Recruit CRM. Goals, progress percentages, and alignment hierarchies are out-of-scope for this migration. Recruit CRM is designed for candidate and client relationship management, not for OKR tracking against employee performance.
Personio
Workflow and Approvals
Recruit CRM & ATS
Written Inventory Only
1:1Personio approval chains for absence requests, onboarding steps, and document signing are not exposed via the API in a migration-ready format. We do not migrate workflow definitions as code. We deliver a written inventory of every active Personio workflow with its trigger, conditions, actions, and approval chain, plus a recommended Recruit CRM automation builder equivalent for the customer's admin to rebuild.
Personio
Time Tracking
Recruit CRM & ATS
Not Migrated
1:1Personio clock-in/out records, working-hours data, and overtime rules have no equivalent in Recruit CRM. Time tracking data is out-of-scope. The customer should retain time tracking records in Personio or migrate them separately to a dedicated time-tracking platform if leaving Personio entirely.
| Personio | Recruit CRM & ATS | Compatibility | |
|---|---|---|---|
| Recruiting Position | Job1:1 | Fully supported | |
| Application | Candidate1:1 | Fully supported | |
| Application: Custom Attributes | Candidate: Custom Fieldslossy | Fully supported | |
| Employee (for hired candidates) | Candidate1:1 | Fully supported | |
| Document | Candidate: Attached Files1:1 | Fully supported | |
| Department | Job: Department Tag1:many | Fully supported | |
| Absence | Not Migrated1:1 | Fully supported | |
| Payroll Record | Not Migrated1:1 | Fully supported | |
| Performance Review | Not Migrated1:1 | Fully supported | |
| Goals and OKRs | Not Migrated1:1 | Mapping required | |
| Workflow and Approvals | Written Inventory Only1:1 | Fully supported | |
| Time Tracking | Not Migrated1:1 | Mapping required |
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.
Personio gotchas
GET Employees API rate limit of 300 req/min
Custom attributes on recruiting application forms not in API
Domain migration from .de to .com but API stays on .de
Date and number format inconsistencies by locale
Recruiting report figures are not always accurate
Recruit CRM & ATS gotchas
API rate limits are license-scaled and can throttle bulk migration
Custom field schemas vary per organization and require field-level mapping
Files and email attachments require separate extraction and re-upload
Email sequences and automation logic do not transfer between platforms
Pair-specific challenges
Migration approach
Scoping and custom_attributes enumeration
We audit the Personio account for active and historical Positions, Application counts, candidate volume, and any custom application form fields. The customer provides the full list of custom form field names, types, and sample data for every recruiting application form in use. Without this enumeration, custom candidate data cannot migrate. We produce a written scope document confirming which Personio objects map to Recruit CRM, which are out-of-scope, and a record-count estimate for each migrating object.
Data extraction from Personio
We extract recruiting data from Personio via the REST API at developer.personio.de. Positions are extracted first, then Applications with full stage history, then candidate profile fields. For each Application we capture the linked Position, stage status, source attribution, and any application notes. We pull employee records only for candidates who reached hired status to build the full candidate profile in Recruit CRM. Date fields are normalised to ISO 8601 and numeric fields are validated against expected ranges to catch Personio's locale-format inconsistencies before loading.
Schema setup in Recruit CRM
We create custom fields in Recruit CRM to match every enumerated custom_attributes from Personio application forms. We configure job record types, pipeline stages, and tag taxonomies to match the Position and department structure from Personio. Recruit CRM's candidate record structure is reviewed to ensure the standard fields cover the migrating Personio application fields before any data loads begin.
Staging migration and reconciliation
We run a full migration into Recruit CRM using a test environment or a subset of production data. The customer reconciles candidate record counts, spot-checks profile fields against Personio source records, and reviews stage history accuracy. Custom field mapping is validated during this phase. Any field mismatches or missing mappings are corrected before production migration begins. This step prevents data-quality issues from reaching the live system.
Production migration in dependency order
We run production migration in record-dependency order: Job records first (positions must exist before candidates can be linked), then candidate profiles with their attached documents and stage history, then tags and custom field values. We use Recruit CRM's bulk import capabilities with batch chunking for large candidate archives. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation handoff
We freeze writes to the Personio recruiting module during cutover, run a final delta migration of any records modified during the window, then enable Recruit CRM as the system of record for recruiting. We deliver the written workflow and automation inventory document for the customer's admin to rebuild inside Recruit CRM's automation builder. We support a one-week hypercare window where we resolve any data-quality issues raised by the recruiting team.
Platform deep dives
Personio
Source
Strengths
Weaknesses
Recruit CRM & ATS
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 2 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 Personio and Recruit CRM & ATS.
Object compatibility
2 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
Personio: 300 requests per minute on GET Employees endpoint; 15 req/s burst.
Data volume sensitivity
Personio 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 Personio to Recruit CRM & ATS migration scoping. Not seeing yours? Book a call.
Walk through your Personio to Recruit CRM & ATS migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Personio
Other ways to arrive at Recruit CRM & ATS
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.