HRMS migration
Field-level mapping, validation, and rollback between JazzHR and Crelate. We move data and schema; workflows are rebuilt natively in Crelate.
JazzHR
Source
Crelate
Destination
Compatibility
7 of 12
objects map 1:1 between JazzHR and Crelate.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from JazzHR to Crelate is a platform consolidation for teams that have outgrown JazzHR's reporting limitations and limited candidate search. Crelate combines ATS, recruiting CRM, and sourcing in one platform with a stronger candidate database and query engine. We extract JazzHR data through its REST API with cursor-based pagination across the 100-result cap, stream document attachments before the 2-hour-30-minute URL expiry window, and remap JazzHR Prospects (the candidate-job association record) into Crelate's Activity log against the corresponding Contact and Job. Custom fields including the startDate field with its specific camelCase key and YYYY-MM-DD formatting require explicit type mapping to Crelate's custom field schema, which must be pre-created before import. We do not migrate JazzHR Workflows, job board syndication connections, or hiring pipeline stage configurations as live automations; we deliver a written inventory of these for your admin to rebuild in Crelate.
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 JazzHR 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.
JazzHR
Candidate
Crelate
Contact
1:1JazzHR Candidate profiles (name, email, phone, address, work history, education with educationLevelCodes) map to Crelate Contact records. The email field serves as the primary dedupe key. Education history is stored in Crelate's Activity log or as structured entries rather than as a native sub-object; we create Education-type activities with institution, degree, and date fields. The 36 enumerated educationLevelCode values from JazzHR are mapped to their literal string equivalents before insert.
JazzHR
Job
Crelate
Job
1:1JazzHR Jobs (title, location, description, salary range, status, department, hiring lead, board codes) map directly to Crelate Jobs. We preserve the job status and map department assignments using the department taxonomy migrated separately. Board codes identifying where jobs were posted are stored as a custom text field on the Crelate Job so the admin can see which boards were active without recreating those connections.
JazzHR
Prospect
Crelate
Contact + Activity
1:manyJazzHR Prospects represent the candidate-job association with a status, source, referral, and apply date. Crelate does not have a Prospect object; candidate-job associations are expressed as Activities on the Contact record linked to the Job. We create an Activity record (type: Application, status: matched to JazzHR prospect status) for every Prospect, preserving the source, referral, and apply date. The prospect_id is held as a custom reference field on the Activity for reconciliation.
JazzHR
Department
Crelate
Custom Field (Department)
lossyJazzHR Departments are returned as a filterable entity in the Jobs API and represent a taxonomy that must exist in Crelate before Job import. We migrate the full department list and create corresponding custom picklist values or a tagged grouping in Crelate. Job-to-department assignments are then mapped to those pre-created values so that reporting by department is immediately functional post-migration.
JazzHR
Hiring Lead
Crelate
User
1:1Every JazzHR job carries a hiring_lead_id tied to a user. We extract the hiring lead reference, resolve it against the destination Crelate User table by email, and assign the Job to the corresponding user. If no matching Crelate User exists, we assign the Job to a migration placeholder user and flag the record in the reconciliation report for the admin to resolve before go-live.
JazzHR
Workflow / Pipeline Stage
Crelate
Activity Log + Status
lossyJazzHR workflows define per-job candidate stages (e.g., Applied, Phone Screen, Interview, Offer). Crelate does not enforce per-job workflow stages in the same way; candidate pipeline status is tracked via Activities and custom Status fields on Contact. We create a custom picklist on Contact (e.g., jz_pipeline_stage__c) with the JazzHR stage names and map candidate stage history as chronological Activity records. We deliver a written map of every JazzHR workflow stage sequence for the admin to configure in Crelate.
JazzHR
Custom Fields
Crelate
Custom Fields
lossyJazzHR supports custom fields on profiles and candidate exports, including the specific startDate field using camelCase key notation and YYYY-MM-DD formatting. Crelate requires custom fields to be pre-created in the Settings area before any data import; we create the matching custom fields in Crelate (with correct type: Date for date fields, Text for string fields, Number for numeric fields) using Crelate's logical name API during the schema preparation phase before any Contact records are loaded.
JazzHR
Document / Attachment
Crelate
Attachment
1:1JazzHR delivers document attachments as base64-encoded blobs via the Candidate Export Webhook with a 2-hour-30-minute public URL expiry. We stream all attachments immediately upon receipt rather than queuing them, decode the base64 payloads, and upload to Crelate's attachment storage linked to the corresponding Contact record. This requires real-time processing during the export phase; attachments not processed within the expiry window are flagged as missing and reported separately.
JazzHR
Source and Referral
Crelate
Custom Fields
1:1JazzHR stores source and referral as free-text and codified strings on the Prospect record. We preserve them as-is and map them to Crelate custom text fields (jz_source__c, jz_referral__c) on the Contact. The admin can use these for segmentation, reporting, or to create Crelate Activity types to track sourcing attribution.
JazzHR
Job Board Codes
Crelate
Custom Field
lossyEach JazzHR Job carries board codes identifying where it was posted (Indeed, LinkedIn, ZipRecruiter, etc.). We extract the board code list, store it as a custom text field (jz_board_codes__c) on the Crelate Job, and flag which boards were active. We do not recreate job board connections during migration; the admin rebuilds syndication in Crelate or via a third-party distributor post-migration.
JazzHR
Company (if applicable)
Crelate
Company
1:1JazzHR does not have a native Company/Account object; company affiliation is typically embedded in the candidate record's work history. For migrations where companies are stored as custom fields or in candidate notes, we extract them, deduplicate by name, and create Crelate Company records. These are then linked to Contacts via the Company-Contact relationship so that Crelate's CRM reporting on Companies and client relationships functions post-migration.
JazzHR
Engagement / Note
Crelate
Activity
1:1JazzHR engagement notes (internal candidate communications, call notes, interview feedback stored as notes) migrate to Crelate Activity records of type Note or Phone Call linked to the Contact. We preserve the original timestamp as ActivityDate for timeline ordering. Crelate's Activity log serves the same function as JazzHR's engagement timeline, making this a direct object-to-object migration.
| JazzHR | Crelate | Compatibility | |
|---|---|---|---|
| Candidate | Contact1:1 | Fully supported | |
| Job | Job1:1 | Fully supported | |
| Prospect | Contact + Activity1:many | Fully supported | |
| Department | Custom Field (Department)lossy | Fully supported | |
| Hiring Lead | User1:1 | Fully supported | |
| Workflow / Pipeline Stage | Activity Log + Statuslossy | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| Document / Attachment | Attachment1:1 | Fully supported | |
| Source and Referral | Custom Fields1:1 | Mapping required | |
| Job Board Codes | Custom Fieldlossy | Mapping required | |
| Company (if applicable) | Company1:1 | Fully supported | |
| Engagement / Note | Activity1: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.
JazzHR gotchas
Job cap cliff between Hero and Plus plans
API 100-result pagination cap
Apply API bearer tokens expire in 48 hours
Document URLs expire 2.5 hours after export event
TLS 1.2 enforced as of January 2024
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 audit
We run a full audit of the JazzHR account via the REST API, extracting all Jobs, Candidates, Prospects, custom fields, departments, and hiring leads. We count total records, identify any custom field schemas, flag documents attached to candidate profiles, and assess the document volume for streaming capacity planning. We also identify any JazzHR accounts that may be approaching or exceeding their active job plan cap, since post-migration Crelate onboarding cost is influenced by the data volume extracted.
Crelate custom field schema creation
Before any data moves, we create all required custom fields in Crelate (jz_source__c, jz_referral__c, jz_board_codes__c, jz_pipeline_stage__c, startDate as a Date field, and any account-specific custom fields from JazzHR). We use Crelate's Settings API to create fields with correct types, assign logical names, and set display order. This step must complete before record import because Crelate drops unrecognized custom field values silently during data load.
Department and User preparation
We migrate the JazzHR department taxonomy to Crelate, creating the corresponding values in a Department custom picklist or grouping. We extract every distinct hiring_lead_id and resolve it against the destination Crelate User table by email. Any hiring leads without a matching Crelate User are placed in a reconciliation queue for the admin to provision before Job import begins.
Candidate and Company base load
We load JazzHR Companies (extracted from candidate work history and custom fields) into Crelate Companies first, using company name as the dedupe key. We then load Candidates as Crelate Contacts, linking them to Companies where a match exists and setting the email address as the primary Contact dedupe key. Education history from JazzHR's 36-level educationLevelCodes enum is mapped to literal string values and stored as Education-type Activities on the Contact.
Prospect-to-Activity remapping and Job load
We process every JazzHR Prospect record as a Crelate Activity (type: Application or custom equivalent) linked to the corresponding Contact and Job. This preserves the source, referral, apply date, and prospect status. Jobs are loaded with their department assignments, salary range, location, and hiring lead resolved to the Crelate User. The board codes from JazzHR are stored in jz_board_codes__c as a text reference for the admin to use when rebuilding syndication.
Document streaming and attachment linking
We process the JazzHR Candidate Export Webhook in real time, immediately streaming any base64 document attachments and uploading them to Crelate's attachment storage linked to the correct Contact. We validate attachment count against the candidate count to confirm all documents were received. Any URLs that expire before download are flagged as missing in the migration report.
Cutover, validation, and workflow inventory delivery
We freeze writes to JazzHR during the final delta migration window, pull any records modified since the initial extract, and load the delta into Crelate. We run a reconciliation report comparing JazzHR record counts against Crelate record counts across all object types. The admin reviews and signs off. We deliver the written inventory of JazzHR workflow stage sequences, custom field schema, and board code references for rebuild in Crelate. We do not rebuild workflows, automations, or job board connections as part of the migration scope.
Platform deep dives
JazzHR
Source
Strengths
Weaknesses
Crelate
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 1 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 JazzHR and Crelate.
Object compatibility
1 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
JazzHR: Not publicly documented in API docs..
Data volume sensitivity
JazzHR 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 JazzHR to Crelate migration scoping. Not seeing yours? Book a call.
Walk through your JazzHR 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 JazzHR
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.