HRMS migration
Field-level mapping, validation, and rollback between Personio and Crelate. We move data and schema; workflows are rebuilt natively in Crelate.
Personio
Source
Crelate
Destination
Compatibility
10 of 12
objects map 1:1 between Personio and Crelate.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Personio and Crelate serve different primary functions: Personio is an all-in-one HRIS whose recruiting module is a secondary capability, while Crelate is a purpose-built ATS and recruiting CRM for staffing firms and in-house talent teams. Companies moving from Personio to Crelate are typically doing so because Personio's applicant tracking system lacks the pipeline depth, search flexibility, and workflow customization that specialized recruiting teams require. We extract recruiting data from Personio's API including Positions, Applications, and candidate records, map them to Crelate's Jobs, Candidates, Contacts, and Companies, and load via Crelate's REST API with lookup resolution. The main extraction risk is Personio's 300 requests per minute rate limit on the Employees endpoint and the documented inability of the API to retrieve custom_attributes on job application forms; we address both during discovery. We do not migrate Personio absence workflows, onboarding approval chains, or performance review templates as code; these do not transfer to Crelate's recruiting-specific data model and we document them for your admin to rebuild.
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 Crelate, 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 (Job Posting)
Crelate
Job
1:1Personio Recruiting Positions map to Crelate Job records. The Personio position title, department, location, status, and hiring manager transfer to Crelate's job_name, department, location, status, and AssignedTo fields. We extract position metadata via the Personio API and POST to Crelate's Jobs endpoint (POST /api3/jobs). Job status mapping follows the customer's agreed mapping table: Personio's Active/Draft/Closed maps to Crelate's Open/Paused/Closed. Note that Crelate Jobs are distinct from Crelate Job Orders in its legacy model; we target the current Jobs API.
Personio
Application (Candidate)
Crelate
Candidate
1:1Personio Applications linked to Recruiting Positions map to Crelate Candidate records. Standard fields including name, email, phone, application date, status, and source migrate. Candidate records in Crelate are linked to the destination Job via the submission history. We use the Crelate Candidate endpoint (POST /api3/candidates) with email as the dedupe key. Custom application form attributes are a known gap — see the gotchas section.
Personio
Application Status
Crelate
Candidate Status + Stage
lossyPersonio application stages (Applied, Screening, Interview, Offer, Hired, Rejected) map to Crelate's candidate status workflow on the Job. We build a status mapping table during scoping that aligns Personio's stage names to Crelate's configurable pipeline stages per Job. Status transitions and rejection reasons transfer to Crelate's activity log.
Personio
Employee (core HR record)
Crelate
Contact
1:1Personio Employees map to Crelate Contact records if the migration scope includes internal employee data or if former employees are being imported as candidate prospects. Employee name, email, department, job title, manager, and employment dates transfer. We extract via GET Employees (rate-limited at 300 req/min) and POST to Crelate's Contacts endpoint. If the customer is only migrating recruiting data, the Employee-to-Contact mapping is optional and scoped during discovery.
Personio
Department
Crelate
Department (tag or field)
1:1Personio Departments transfer as Crelate tags on Job and Candidate records, or as a custom Department picklist field on Contact if the customer requires org-structure reporting in Crelate. We preserve the department hierarchy as a flat tag list during migration, with the customer's admin confirming the preferred tagging strategy during scoping.
Personio
Document (Employee file)
Crelate
Document attachment on Contact/Company
1:1Personio employee documents (contracts, certificates, ID scans) stored against the Employee record can be attached to the corresponding Crelate Contact record as document links. Document naming conventions vary by company in Personio, so we map file names to a consistent Crelate document type structure (Contract, Certificate, ID, Other). Documents are downloaded from Personio via the document retrieval API and uploaded to Crelate's document storage linked to the Contact record.
Personio
Absence Record
Crelate
Not migrated to Crelate
1:1Personio Absence records (vacation, sick leave, time-off balances) do not map to Crelate's ATS/CRM data model. Crelate does not have an absence or time-off management module. If the customer needs to retain absence history for compliance or reporting, we export absence records as a CSV inventory delivered alongside the migration. The customer's HR team retains absence data in Personio's read-only state or exports to a separate HR system.
Personio
Payroll Record
Crelate
Not migrated to Crelate
1:1Personio Payroll records (salary, bonus, compensation entries, effective-dated changes) do not migrate to Crelate. Crelate is a recruiting ATS/CRM and does not have a payroll module. We export payroll data as a typed CSV with effective_date preserved and deliver it to the customer's finance or HR team for import into their payroll system of record.
Personio
Performance Review
Crelate
Not migrated to Crelate
1:1Personio Performance Reviews and Goals (OKRs) do not migrate to Crelate. Crelate does not support a performance management data model. We export review status, ratings, and goal progress as a CSV inventory for the customer's HR team. The customer's admin rebuilds performance review templates in their chosen performance management tool (Personio, Lattice, BambooHR, or another HRIS) post-migration.
Personio
Custom Attributes (Employee)
Crelate
Custom Fields on Contact
lossyPersonio custom employee attributes (attributes not in the standard Personio employee schema) map to Crelate custom fields on Contact. We discover all custom attributes via Personio's API schema introspection and create matching Crelate custom fields under Settings > Core Records > Contacts before migration. Field types are mapped: text attributes to Crelate Text fields, date attributes to Crelate Date fields, numeric attributes to Crelate Number (Decimal) fields.
Personio
Custom Attributes (Application)
Crelate
Custom Fields on Candidate or Activity Form
1:1Personio custom_attributes on job application forms are a known API gap — the Personio API does not expose these fields. We ask the customer during scoping to provide the full list of custom application form fields and a data export (screen scrape, manual export, or the customer's own record). We map these to Crelate custom fields on the Candidate record or as Activity Form questions with field mappings to the Contact. The customer must enumerate the field names and data manually; we cannot extract them via API.
Personio
Recruiting Reports / Analytics
Crelate
Not migrated
1:1Personio recruiting pipeline analytics and reports are not migrated because the data is known to contain discrepancies. Crelate's native reporting (Advanced Reports and Analytics on the Business plan) replaces these from the date of go-live. We advise the customer to treat Personio's recruiting analytics as historical reference rather than authoritative data and to verify figures against actual application records before migration scoping begins.
| Personio | Crelate | Compatibility | |
|---|---|---|---|
| Recruiting Position (Job Posting) | Job1:1 | Fully supported | |
| Application (Candidate) | Candidate1:1 | Fully supported | |
| Application Status | Candidate Status + Stagelossy | Fully supported | |
| Employee (core HR record) | Contact1:1 | Fully supported | |
| Department | Department (tag or field)1:1 | Fully supported | |
| Document (Employee file) | Document attachment on Contact/Company1:1 | Fully supported | |
| Absence Record | Not migrated to Crelate1:1 | Fully supported | |
| Payroll Record | Not migrated to Crelate1:1 | Fully supported | |
| Performance Review | Not migrated to Crelate1:1 | Fully supported | |
| Custom Attributes (Employee) | Custom Fields on Contactlossy | Fully supported | |
| Custom Attributes (Application) | Custom Fields on Candidate or Activity Form1:1 | Fully supported | |
| Recruiting Reports / Analytics | Not migrated1: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.
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
Crelate gotchas
120 req/min API rate limit throttles bulk migrations
20 custom field per-entity cap forces data model decisions
15,000-record export ceiling on single operations
Sequences and automation workflows do not migrate
API key is a querystring parameter, not a header
Pair-specific challenges
Migration approach
Discovery and data inventory
We audit the Personio account across the recruiting module (Positions, Applications, Candidates), core HR (Employees, Departments, Documents), and any custom application form fields. We extract a schema snapshot via the Personio API and conduct a data inventory call with the customer's admin to enumerate custom attributes, confirm field values, and identify any data quality issues (duplicate records, missing fields, incorrect dates). The output is a written migration scope document covering all objects in scope, all objects not migrating, and the custom attribute enumeration form the customer must complete.
Crelate schema preparation
We set up the Crelate destination environment before migration begins. This includes creating custom fields on Contact, Company, Job, and Candidate records to match Personio custom attributes, configuring Job pipeline stages to align with Personio position statuses, and setting up user roles and API access under Settings > Advanced Settings > User Roles. Crelate requires API access to be explicitly enabled per user; we confirm the migration service account has API access and capture the API key from Settings > My Settings & Preferences.
Personio data extraction with rate-limit handling
We extract data from Personio using the REST API at developer.personio.de. For the Employees endpoint, we implement paginated extraction with exponential backoff to respect the 300 req/min rate limit. For Recruiting Positions, we extract via the recruiting/positions endpoint and merge with application data. We handle the custom_attributes gap by mapping the customer-provided enumeration to a staging table. All dates are normalized to ISO 8601 during extraction. The first extraction serves as the mapping baseline; the second extraction (scheduled near cutover) captures any changes made during the migration window.
Transformation and lookup resolution
We transform Personio records to Crelate schema in a staging environment. This includes mapping application statuses to Crelate pipeline stages, resolving Contact-to-Company lookups by matching company names to existing Crelate Company Ids, splitting candidate records by application status for targeted insertion, and mapping custom attributes to their corresponding Crelate custom fields. Any Personio custom application fields are merged from the customer-provided data enumeration into the candidate record. We generate a transformation report showing source value, transformed value, and any records that failed mapping rules for customer review.
Test migration and validation
We run a full test migration into the customer's Crelate sandbox or a designated test environment before production. The customer's recruiting leads review a sample of migrated candidate records, verify pipeline stage assignments, confirm document attachments, and spot-check custom field values against the Personio source. We correct any mapping errors and re-run the test migration. The customer signs off on the test results before we schedule the production cutover. Crelate's own documentation recommends this step and we align with that best practice.
Production migration and cutover
We schedule the production migration during a low-activity window (Crelate recommends evenings or weekends). We freeze new Personio recruiting writes during cutover, run the final extraction, apply the transformation, and insert records into Crelate in dependency order: Companies first (for lookup resolution), then Contacts, then Jobs, then Candidates with their Job submission links. We run a post-migration reconciliation report comparing record counts and spot-checking field values. We deliver the migration inventory document listing all objects migrated, all objects excluded, and a written handoff for any workflows or approval chains requiring rebuild in Crelate.
Platform deep dives
Personio
Source
Strengths
Weaknesses
Crelate
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 Crelate.
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 Crelate migration scoping. Not seeing yours? Book a call.
Walk through your Personio to Crelate 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 Crelate
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.