ATS & HRMS migration guide

The Definitive Guide to Migrating to Crelate

Crelate is a combined ATS + recruiting CRM whose import model rewards teams that stamp External Primary Keys on day one, pre-create custom picklists and Workflow stages, and load Contacts before Jobs before Activities.

22 min read 9 sections Updated May 27, 2026
Crelate
Employees
Compensation
Benefits
Time Off
Org Structure
Performance

Inside this guide

What you'll learn, section by section

  1. 01

    Why teams migrate to Crelate

    The four shapes a Crelate migration takes, and what makes the platform easier — or harder — than the category average.

  2. 02

    The Crelate data model you need to map into

    Contacts, Companies, Jobs, Placements, Activities, Smart Tags — and the External Primary Key you'll wire on every record.

  3. 03

    Pre-migration prep — the work before you touch Crelate

    What must be true on the source, the destination, and across the team before the first row hits Import Data+.

  4. 04

    Import mechanisms: Import Data+ and bulk resume import

    Two primary paths in, each with different limits and shapes. Picking the wrong one is how mid-migrations stall at scale.

  5. 05

    Mapping your data into Crelate

    The longest section — because field mapping is where almost every Crelate migration that fails actually breaks.

  6. 06

    The pitfalls that derail Crelate migrations

    Specific failure modes — ranked by impact, each tied to the exact Crelate mechanism that breaks.

  7. 07

    Validation and cutover

    What to verify after the import job, in what order — and how to fail safely when something is wrong.

  8. 08

    Migration partners and tools

    Crelate Professional Services, ETL vendors, specialist migration shops — what each is good for and how to choose.

  9. 09

    Frequently asked questions

    The questions every Crelate migration team works through before they sign the scope.

Section 01

Why teams migrate to Crelate

The four shapes a Crelate migration takes, and what makes the platform easier — or harder — than the category average.

Crelate is a Talent Relationship Management platform paired with an Applicant Tracking System, positioned as a combined ATS + CRM for the recruiting and staffing market 1. The product ships in two editions — Crelate Recruit for staffing agencies and Crelate Hire for in-house corporate recruiting teams — both sitting on the same underlying data model of Contacts, Companies, Jobs, Activities and Placements 10.

The typical Crelate customer is a small-to-mid recruiting agency or in-house talent team — 5 to 150 recruiters — that wants a single system covering candidate search, client management, job-pipeline workflow and outreach without standing up a Bullhorn-scale admin function. Compared with Bullhorn, Crelate positions on lower setup cost and a faster time-to-productive; compared with Greenhouse or Lever, it positions on staffing-agency depth — Tearsheets, Client Portal, configurable Workflow stages and an ATS+CRM combined model 12.

The shapes of migration that actually land on Crelate fall into four patterns. First, homegrown-database replacements — agencies moving off Access, Airtable or a bespoke SQL Server tool that grew beyond its limits. Second, legacy-ATS swaps, where the source is PCRecruiter, Avionté, JobAdder or a 1990s-vintage product whose data model and UI no longer fit modern recruiting 9.

Third, Bullhorn or Greenhouse exits, where total cost of ownership or product fit drives the move and the source schema is rich but the entity model needs reshaping into Crelate's Contact-on-a-Job pattern 7. Fourth, M&A consolidation, where an acquired agency runs on a different ATS and the parent standardises on Crelate. Each shape has a different difficulty profile: a homegrown-database migration is mostly data cleanup; a Bullhorn migration is mostly entity-shape translation.

What makes migrating *to* Crelate easier than the category average is Import Data+, the native UI wizard that accepts XLSX and CSV, supports saved Field Maps for re-runs, and exposes a Preview / Invalid / Error Summary review step before any row commits 29. The platform also offers a managed migration service operated by Crelate's own Professional Services team, with the explicit claim of having performed thousands of ATS migrations from 40+ source platforms 10.

What makes it harder than the average is the External Primary Key model — Crelate's upsert key is a customer-set field that has to be populated on every source row before the first import, or every re-run inserts duplicates 2. The picklist-internal-value distinction, Workflow Stage definitions, and ownership-versus-source-tracking field semantics all need explicit decisions before any row lands.

Custom reports, saved Searches, Workflow notification rules and email templates do not import — they are rebuilt from documentation. Teams that scope for that rebuild work up front finish on time; teams that assume parity do not.

Teams that scope for the rebuild work up front finish on time; teams that assume parity do not.

Section 02

The Crelate data model you need to map into

Contacts, Companies, Jobs, Placements, Activities, Smart Tags — and the External Primary Key you'll wire on every record.

Crelate platform Contacts Companies Deals Tickets Tasks Notes
Standard objects orbit the platform; every association can be many-to-many with optional labels.

Crelate's ATS + CRM is built around a small set of recruiting-specific records, each with default and custom fields, and associations that connect them.

Before you can map a field on the source side, you need to know which destination record type the row belongs on, what fields it requires, and which value will serve as its upsert key. The table below summarises the core records you will touch.

Object Stores Required on import Tier
Contact Candidates, clients, hiring managers, vendors — every person record First name, last name; Contact Type drives downstream views All editions
Company Client companies, candidate employers, vendors Name; Company Type optional but drives filters All editions
Job Open requisitions and pipeline records for recruiting work Job title, Company, primary recruiter (Owner) All editions
Placement Confirmed hire / contract assignment outcomes Contact, Job, Start date, Placement Type Crelate Recruit primarily; Hire variant on Crelate Hire
Activity (Note, Call, Email, SMS, Task, Appointment) Engagement and audit timeline on every parent record Activity Type, Activity Date, parent association All editions
Workflow Stage Pipeline position of a Contact on a Job (e.g. Submitted, Interviewing, Offer) Pre-created in Settings → Workflows; configurable per Job All editions; up to 20 custom stages per Workflow [132]
Smart Tags / Categories Skills, industries, certifications, geographic specialties Pre-created in Settings → Custom Picklists Multi-value tag system across Contact, Company and Job
Resume / File Attachment Resume documents, contracts, signed offer letters Parent Contact + file binary Bulk resume import capped at 250 files per batch [36]

Crelate's upsert key is the External Primary Key — a customer-set text field on Contact, Company and Job that you populate from the source platform's primary key (or a UUID), then nominate as the *identifier* in the Import Data+ wizard so the import behaves as upsert rather than insert 262. Without an External Primary Key, the importer falls back to a name + email heuristic that creates duplicates on re-run.

Plan for External Primary Key on day one: stamp the source primary key into every row before export, and use it on every subsequent re-run, reconciliation query and Activity association so updates are deterministic.

Custom fields in Crelate are configured under Settings → Custom Fields per record type. The catalogue below covers what you can model and the limits that apply 72.

Field type Limits Notes
Short Answer (text) Single-line text Searchable across the Advanced Search index 94
Long Answer (text block) Multi-line text Use for paragraph-length notes, addresses, structured legacy text
Numeric / Monetary Number with optional currency formatting Supports range filters (e.g. salary range) in Advanced Search 72
Date / Date-Time Standard date or date + time Drives Advanced Search Dates category; verify timezone handling per field
Picklist (Custom Picklist) Defined per field in Settings → Custom Picklists Internal value vs display label distinction matters 74
Checkbox Boolean Single yes/no flag
Smart Tag (multi-value tag) Defined per tag category Multi-value; pre-create parent values to avoid silent drops
Lookup (record reference) Reference to another Crelate record by Id / Name Lookups carry Id, FirstName, LastName triples — preserve all three on import 30

Relationships in Crelate are modelled as lookups between records (Contact↔Company employment, Job↔Company, Job↔primary Recruiter) and as Workflow Stage memberships that place a Contact on a Job at a particular pipeline position 132. Lookups round-trip as three-field objects with Id, FirstName and LastName; preserving all three on import is what keeps display strings correct in the Crelate UI 30.

There is no native cascade-delete: deleting a parent Contact, Company or Job does not delete child Activities, Notes or Placements automatically. If your source platform relied on cascade behaviour, reproduce it via scripted cleanup.

Section 03

Pre-migration prep — the work before you touch Crelate

What must be true on the source, the destination, and across the team before the first row hits Import Data+.

The single best predictor of a clean Crelate migration is how much work you do on the source side before the first Import Data+ button is pressed. Crelate's own guidance on ATS migrations explicitly calls out data quality, mapping clarity and customer responsiveness as the three variables that determine whether a project lands in two weeks or six 135138.

The single best predictor of a clean migration is how much work you do before the first Import Data+ button is pressed.

Treat the source export as raw material that needs shaping to Crelate's expected formats — email lowercased, phone normalised, picklist values rewritten to destination Custom Picklist values, dates in MM/DD/YYYY or ISO-8601, owners resolved to Crelate usernames, and the External Primary Key stamped onto every row.

Source-side prep

  • Audit and dedup the source candidate database before export — email-case-only duplicates, role-based addresses and obviously stale records (last-touched 5+ years ago, never placed) should be pruned now, not after they land in Crelate66.
  • Stamp the External Primary Key on every Contact, Company and Job row in the source export. Use the source platform's primary key or a UUID and keep it stable across re-runs — this single value is what makes Import Data+ behave as upsert rather than insert 262.
  • Normalise picklist values for Contact Type, Company Type, Job Status, Workflow Stage and every custom picklist — Crelate's Import Data+ matches on the value defined in Settings → Custom Picklists, and rows targeting undefined values are flagged in the Invalid Imports report rather than silently dropped 6274.
  • Decide resume-file scope. Each candidate has zero, one or many resumes. Decide latest-only, all-versions, or none — the resume leg is its own pipeline that runs *after* Contact rows land, capped at 250 resumes per batch 36139.
  • Convert source rich-text Notes to plain text ahead of time — Crelate Activity bodies do not preserve embedded images, charts or pasted Outlook HTML formatting reliably, so flatten or convert to Markdown before the load.

Destination-side prep

  • Stand up the Crelate account with the right edition — Crelate Recruit for agency workflows, Crelate Hire for in-house corporate recruiting. The two share the data model but differ on Job Portal, Client Portal and Placement workflows 136.
  • Provision users first under Settings → User Roles, set the default recruiter role and create any custom roles before importing — owner assignment falls back to the import-running user when a referenced owner does not exist 69104.
  • Pre-create every custom field in Settings → Custom Fields on the right record type with the right field type — Numeric, Date, Picklist and Long Answer have different downstream search behaviours and you cannot freely change type after the field has rows on it 72.
  • Pre-create every Custom Picklist in Settings → Custom Picklists — every drop-down value that a source row targets must exist in the destination first, or the row appears in the Invalid Imports tab during preview 6274.
  • Pre-build every Workflow in Settings → Workflows with the full stage list (capped at 20 stages per Workflow) before loading any Jobs or candidate-on-job records — Workflow Stage names are the field rows match against 132.

People prep

Cutover only works if humans cooperate. Lock down a source-system freeze window — typically 24 to 72 hours for teams whose recruiters live in the system. Train recruiters on Contact search, Workflow Stage transitions and the Activity tab before go-live. A typical small-agency Crelate migration runs two to four weeks of elapsed time 135138; data depth, custom-picklist count and resume volume drive the upper end. Crelate's own onboarding emphasises customer responsiveness as the largest single driver of project length 137.

Section 04

Import mechanisms: Import Data+ and bulk resume import

Two primary paths in, each with different limits and shapes. Picking the wrong one is how mid-migrations stall at scale.

Crelate exposes load paths that depend on dataset size and record-type mix. Import Data+ is the native UI wizard for spreadsheet loads. The dedicated Importing Resumes flow handles bulk resume parsing.

Import Data+

The native Import Data+ wizard lives at Menu → Import → Import Data from Excel 32. It accepts XLS, XLSX and CSV files — colour fills, merged cells and pivoted layouts must be removed before upload 33. The flow: pick the target record type, upload the file, accept or override the auto-mapping, nominate the External Primary Key column as identifier, save the Field Map for re-use, and step through Preview, Invalid Imports and Error Summary tabs before committing 62.

The platform documentation states Import Data+ handles up to 50,000 records per spreadsheet import 101. For datasets above that ceiling, split into multiple files. The Preview, Invalid Imports and Error Summary tabs are the single most-important quality gate in the wizard — a row that lands in *Invalid Imports* has failed validation, which is usually a custom-picklist value the destination does not recognise 62.

Importing Resumes

Resume bulk import lives at Menu → Import → Import new Contacts 36139. The wizard accepts up to 250 resume files at a time, parses each through Crelate's resume parser, and creates Contact records pre-populated with parsed name, email, phone, employment history and skill tags. You can apply tags, assign a Source, set the Owner and attach to a Job in the same step 139.

The parser is the strength and the trap: on a clean account it dramatically reduces typing, but on a migration where you already have Contact rows in Crelate, parser-driven re-population can overwrite values you carefully migrated from the source. The pattern most teams use is: load Contacts via Import Data+ first with the External Primary Key, then attach resumes as binary attachments (no parser) keyed off the same External Primary Key.

Rule

Under 50,000 Contacts/Companies/Jobs on standard fields → Import Data+. Resume backfill under 250 files → Importing Resumes wizard.

Section 05

Mapping your data into Crelate

The longest section — because field mapping is where almost every Crelate migration that fails actually breaks.

SOURCE CRELATE FirstName, LastName firstname, lastname AccountName company AnnualRevenue annualrevenue Owner.Email hubspot_owner_id CreatedDate createdate
Field-mapping flow — every source field resolves to a destination property or an explicit drop.

Mapping is where every ATS migration earns its scars. The schema decisions in your mapping spreadsheet determine whether recruiters find candidates on day two, whether placement reports work on day five, and whether the team trusts the data by day thirty.

Work record-type by record-type in strict import order: Companies first (so Contacts and Jobs can lookup against them), then Contacts (so Jobs can name a primary recruiter and Activities can attach), then Jobs (so candidate-on-Job rows can attach), then Workflow Stage assignments, then Placements, then Activities and Notes, and resumes and file attachments last.

Candidates — Contacts and the candidate database

The candidate database in Crelate is the Contact entity filtered by Contact Type. There is no separate Candidate object as in Bullhorn — the same record can be a candidate today and a hiring-manager client tomorrow, with Contact Type and Smart Tags driving the recruiter's view 136140. The implication for mapping: source candidate and source contact tables both land on Contact, with Contact Type as the disambiguator.

Common source → Crelate Contact mapping

Source Destination
  • candidate_id / contact_id
    External Primary Key (upsert key)

    Stamp source primary key here; nominate as identifier in Import Data+ 62

  • first_name / last_name
    First Name / Last Name

    Required; preserve case as candidate-entered

  • email
    Email

    Lowercase, trim, validate; not the primary upsert key in Crelate

  • phone / mobile
    Phone

    Crelate does not enforce E.164; normalise upstream for Advanced Search 94

  • candidate vs contact distinction
    Contact Type

    Drives default views and dashboards — pre-create Contact Type values 136

  • owner / recruiter
    Owner (User lookup)

    Map by username; unresolved owners default to the import-running user 104

  • skills / tags
    Smart Tags (Skill / Specialty categories)

    Multi-value; pre-create parent values in Settings → Custom Picklists

  • source / referral_source
    Source field + Source picklist

    Drives Advanced Search Past Activity filter 94

  • gender / ethnicity / veteran / disability
    EEOC custom fields on Contact

    Sensitive; confirm retention and consent policies first 146

Companies and the client-side records

Common source → Crelate Company mapping

Source Destination
  • company_name
    Company Name

    Required

  • company_id
    External Primary Key on Company

    Upsert key for cross-reference from Job and Contact

  • industry
    Industry picklist

    Pre-create values in Settings → Custom Picklists

  • company type (client / candidate-employer / vendor)
    Company Type

    Drives default views in the Companies grid 102

  • billing contact
    Billing Contact lookup

    Resolves to a Contact record by name — load Contacts before this step 30

  • parent / subsidiary
    Parent Company lookup

    Run as a second pass after all companies have External Primary Keys

Jobs, Workflow Stages and the candidate pipeline — the ATS deep dive

The job-requisition pipeline in Crelate is built around Jobs with Workflow Stages that hold candidate position in the pipeline 132. A Job is the open requisition (e.g. *Senior RN, Boston*), and candidates move through pre-defined stages such as *New Lead, Submitted, Phone Screen, Interview, Offer, Placed, Rejected*. Crelate's Workflow stage cap is 20 stages per Workflow 132.

Recreate every Workflow Stage in Settings → Workflows *before* loading any Job records. Rows that target an undefined Workflow Stage end up in Invalid Imports during the Preview step 62. If your source pipeline has more than 20 stages, collapse adjacent low-volume stages into a single Crelate stage during transform — typical compressions merge *Internal Review* and *Internal Submission* into one bucket, or *First Interview* and *Second Interview* into a generic *Interviewing* stage.

Common source → Crelate Job + Workflow mapping

Source Destination
  • job_id / requisition_id
    External Primary Key on Job

    Upsert key; required for downstream candidate-on-Job rows

  • job_title
    Job Title

    Required

  • client_id
    Company lookup via External Primary Key

    Company row must exist first or the Job lookup fails 30

  • primary_recruiter
    Owner (User lookup)

    Map by username; unowned Jobs default to import-running user

  • job_status
    Job Status picklist (Open, Filled, Closed)

    Pre-create in Settings → Custom Picklists

  • candidate_on_job rows
    Candidate-on-Job placement at Workflow Stage

    Multi-step: supply Contact + Job + Stage Id together

  • stage_history
    Sequence of Workflow Stage update events per transition

    Crelate stage history is built by repeated updates, not by importing a history table

Application stage transition history is one of the most-asked-about pieces of an ATS migration and one of the least-supported on import. Crelate stamps stage-change history through repeated update events — there is no path to load a pre-built stage-history table directly. To preserve the timeline, capture each transition as (contact_id, job_id, stage, timestamp, user) and replay in date order, accepting that the *modifying user* will be the importing user, not the original recruiter.

Alternatively, store the legacy stage history verbatim in a Long Answer custom field on the Job-Contact join (or as a structured Activity Note) so the timeline stays searchable, and let live stage history accrue forward from cutover.

Interview feedback and Scorecards

Crelate Hire ships an Interview Loops & Templates feature where each interview step carries an assigned Scorecard with categorised questions and rating fields 133134. Source scorecard data from Greenhouse, Lever or similar platforms does not map natively — the practical pattern is to land structured scorecard responses into a Long Answer custom field on the candidate-on-Job join (preserving the question / rating / interviewer triples as text), and to use Crelate's native Interview Forms going forward from cutover 134.

If interview feedback is critical to search and reporting, pre-create the destination Question Categories under Interview Form Questions before the load so scorecard ratings can be replayed against the right category groupings 134.

Candidate sources, EEOC and Smart Tags

Candidate source tracking in Crelate lives on the Contact's *Source* field plus an optional *Source Type* picklist, and feeds the Advanced Search Past Activity filter which is the primary reporting surface for source effectiveness 94. Pre-create every source value (Indeed, LinkedIn Recruiter, employee referral, agency partner) in Settings → Custom Picklists, then resolve source labels to Crelate Source values via a lookup table during transform. Mismatched source labels appear as invalid rows during Preview 62.

EEOC data (ethnicity, gender, veteran, disability status) lives on dedicated custom fields you create under Settings → Custom Fields on Contact. Treat EEOC fields as sensitive personal data: confirm the source export is permitted under your retention policy, that lawful basis exists under GDPR if any EU candidates are involved, and that the destination's privacy posture matches 146147.

Smart Tags are Crelate's tagging system — Skills, Specialties, Industries, Certifications, Geographic specialties. They attach to Contact, Company and Job. Pre-create the Smart Tag categories and the parent values in Settings → Custom Picklists, then resolve source tag labels to Crelate tag values via a lookup table during transform. Smart Tag mismatches drop silently on import — verify against Custom Picklists, not against the Contact-record UI 74.

Resumes and file attachments

Resume and attachment migration is its own pipeline that runs *after* Contact rows land. The Import Data+ wizard does not handle files; the supported paths are: (a) the Importing Resumes wizard, capped at 250 files per batch and parser-driven 36139; (b) attaching each binary directly to a Contact with the External Primary Key as the key and parser re-population suppressed; and (c) the Crelate Chrome Extension and email-forwarding paths for self-service backfill 101.

For large resume estates (tens of thousands of files), the pattern most agencies adopt is: keep originals in S3 or Azure Blob, load only the latest resume into Crelate with parser disabled, and store the archive deep link in a Long Answer URL custom field on the Contact. Confirm per-attachment file-type and size caps against the destination account configuration before the bulk run.

Notes, Tasks, Appointments and historical activity

Crelate supports Activities — Notes, Calls, Emails, SMS, Tasks and Appointments — with original timestamps preserved by setting the *Activity Date* field explicitly on creation. The Import Data+ wizard targets Contact, Company and Job rows; Activities must go through the Activity-aware variant of the import flow 101. Each Activity row carries an Activity Type, body, Activity Date, owner, and one or more associations to parent records via External Primary Key 102.

Activity bodies do not preserve rich-text formatting reliably — pasted Outlook HTML, embedded images and charts may render inconsistently. Convert source rich-text bodies to plain text or a Markdown-style structured format during transform, and keep the original rich-text body archived in S3 with a deep link in the Activity body if downstream search depends on it.

Custom-field mapping strategy

Resist the urge to map every source custom field one-to-one. Migrate only the custom fields used by an active recruiter workflow, Advanced Search or report in the last 12 months 66. Excess fields weaken Custom Picklist governance, slow Advanced Search indexing, and make Crelate Reporting harder to wire.

For picklist fields whose source values do not match the destination, either: (1) extend the destination Custom Picklist with the missing values, (2) collapse adjacent values during transform, or (3) introduce a parallel Long Answer custom field holding the legacy value verbatim. Calculated / formula fields do not import — Crelate has no formula type, so source formulas must be replicated on each write or pre-computed before export 72.

Audit trail, ownership and original timestamps

Crelate maintains an audit trail on the Activity tab of each Contact, Company and Job record, with the modifying user recorded as the user that initiated the change 102. *Activity Date* on Notes, Calls, Emails, SMS, Tasks and Appointments can be set explicitly on creation — backdated Activities show up correctly on the timeline and the Advanced Search Past Activity filter 94.

System-managed created-at and modified-at on Contact, Company and Job records cannot be overwritten on standard imports — they are stamped to import day. If you need to preserve the original audit trail, the pattern is to create *Legacy Created Date* and *Legacy Modified Date* custom Date fields on every record type and populate them from the source export. All historical-period reports should be wired against the legacy fields.

Owner assignment during import works only if the username exists at the moment of import; rows whose owner cannot be resolved are imported with the import-running user as owner, silently breaking per-recruiter Past Activity reporting 104. Pre-provision every Crelate user account before the Contact, Company, Job and Activity loads.

Section 06

The pitfalls that derail Crelate migrations

Specific failure modes — ranked by impact, each tied to the exact Crelate mechanism that breaks.

High impact

Importing without an External Primary Key turns every re-run into a duplicate

Crelate's upsert key is the customer-set External Primary Key on Contact, Company and Job 2. Without it, Import Data+ falls back to a name + email heuristic that misses email-case differences and creates duplicates on every re-run. Stamp source primary keys (or UUIDs) on every export row before the first import, nominate the column as the identifier in the wizard, and validate by running a 10-row dry-import and re-importing the same file — duplicate rows mean the identifier was not picked up correctly 62. 2

High impact

Custom Picklist mismatches dump rows into Invalid Imports silently

Crelate picklist fields — Contact Type, Company Type, Job Status, Workflow Stage, every Custom Picklist — match on the value defined in Settings → Custom Picklists. Rows targeting a value the destination does not recognise land in the Invalid Imports tab of the Preview step rather than being committed, with no field-level error in the UI 6274. Pre-create every destination picklist value, build a source-value → destination-value lookup, and confirm the lookup against a live picklist export before loading at scale. 62

High impact

Resume Parser overwrites curated Contact fields on bulk resume import

The Importing Resumes wizard parses each resume and re-populates First Name, Last Name, Email, Phone and Skill Smart Tags from the resume content 139. If you load Contact rows via Import Data+ first and then bulk-import resumes through the parser-driven path, parsed values can overwrite the values you carefully migrated. The fix is to load Contacts first with the External Primary Key, then attach resumes as binary attachments with the parser disabled — keying each attachment off the External Primary Key. 139

High impact

Workflow Stage cap at 20 forces source pipeline collapse

Crelate caps a single Workflow at 20 custom stages, set under Settings → Workflows 132. Source ATS pipelines with 25+ stages — common on Greenhouse or Lever installations with multiple interview rounds — cannot be migrated one-to-one. Map collapsed stages in your transform layer (typically merging *First Interview*, *Second Interview* and *Final Interview* into *Interviewing*; *Internal Review* and *Internal Submission* into *Submitted*), document the compressions explicitly, and warn recruiters in training that pipeline granularity differs from the source. 132

Medium impact

Lookup fields lose their display string if Id alone is supplied

Crelate's lookup fields — Owner, Billing Contact, Primary Company, Recruiter — round-trip as Id/FirstName/LastName triples 30. Naive integration code that sends just the Id sees the lookup populated in the database but missing the display string in the UI until the cache rebuilds. Always send the full triple on writes, and validate by reading the record back and checking the display field renders correctly. 30

Medium impact

Created-at and Modified-at cannot be overwritten on standard imports

Crelate stamps system-managed created-at and modified-at to import day on Import Data+ loads — there is no UI override and direct overwrites to these columns are rejected or ignored on standard record types. Teams discover this on day two when filtering Contacts by *Created Date* returns everything stamped to import day. The mitigation is to create *Legacy Created Date* and *Legacy Modified Date* custom Date fields on every record type, populate them from the source export, and rewrite all historical-period reports to use the legacy fields. 102

Medium impact

Activity history is built by replay, not by table import

Crelate exposes no path to upload a pre-built stage-history or audit-history table directly — Activities and Workflow Stage changes are recorded through individual writes that each generate a history row 94102. Preserving the original timeline means replaying every transition in date order, accepting that the *modifying user* will be the importing user rather than the original recruiter, and budgeting load time accordingly. For large estates, store legacy history verbatim in a Long Answer field as a fallback search surface. 102

Medium impact

Smart Tag mismatches silently drop on import

Smart Tags in Crelate — Skills, Specialties, Industries, Certifications — match on the value defined in Settings → Custom Picklists. A source tag that does not exist in the destination picklist drops on import with no error surfaced to the operator 74. Pre-create every tag value first, then resolve source labels via a lookup table during transform. After the load, run a reconciliation query that counts distinct Smart Tags per Contact against the source — non-zero drops mean the lookup missed values. 74

Low impact

EEOC field migration without consent or retention audit

Candidate ethnicity, gender, veteran and disability fields are sensitive personal data under GDPR and US EEOC reporting requirements 146147. Loading them into a new Crelate account without checking the destination's data-retention configuration and the original collection consent is the kind of mistake that surfaces in a compliance audit, not in QA. Confirm EEOC fields are in scope with legal before exporting, document the lawful basis for each field, and verify the destination account meets the same SOC2 / GDPR posture as the source 146. 146

Section 07

Validation and cutover

What to verify after the import job, in what order — and how to fail safely when something is wrong.

1 Read-only Source goes write-frozen 2 Final delta Export incremental changes 3 Import Load into Crelate 4 Validate Reconcile + spot-check 5 Cut over Users on new system
Cutover sequencing — five gated phases between source read-only and full user access.

Validation is the bridge between Import Data+ finishing and recruiters being allowed in. A three-stage validation works best: a 10 percent pilot load with recruiter spot-checks, the full load with real-time row-count monitoring, and a 30-day audit driven by Advanced Search and Reporting125. The most reliable signal is recruiters verifying their own desks — they know what right looks like better than any reconciliation script.

Build a reconciliation queries spreadsheet that compares source and destination on each of these counts. Anything outside a 0.5 percent variance gets investigated before users get login access.

  • Total Contacts imported vs source — minus deliberately excluded rows (stale, opt-out, duplicate emails).
  • Total Companies imported vs source — checking that name-based collapse did not over-merge separate client records.
  • Total Jobs per status vs source, plus **sum of *Salary* per Job Status** — a non-trivial dollar variance signals a status-mapping error or a currency-precision drop.
  • Candidate counts per Workflow Stage per Job vs source — confirms the pipeline shape per requisition matches after stage compression.
  • Total Placements per Placement Type (Contract, Contract-to-Hire, Perm) and **sum of *Pay Rate* per period** — drives billing-side reporting from day one.
  • Activities per type (Notes, Calls, Emails, SMS, Tasks, Appointments) imported vs source — and a date-bucketed comparison to confirm *Activity Date* round-tripped.
  • Owner distribution per record type — group by Owner.username and confirm no record landed unowned that should not have 104.
  • External Primary Key integrity — count distinct External Primary Keys per record type; any nulls or duplicates indicate the upsert key was not consistently set 2.

On top of reconciliation, run a manual spot-check protocol: pick 30 random Contacts across Contact Types and verify each field against the source UI. Pick five high-value Jobs and trace the full association graph — Company, Owner, candidates at each Workflow Stage, recent Activities, Placement. If discrepancies show up in three or more of the 30, halt the load, fix the root cause, and re-run by External Primary Key upsert.

Crelate does not ship a native bulk-undo. The recovery path runs through Bulk Operations — multi-select on the Contact, Company or Job grid lets you mass-delete, mass-reassign, or mass-update by selection 102. The practical rollback strategy: stamp every imported row with an *Import Batch ID* Long Answer custom field, and if catastrophe strikes, filter by that batch ID in the grid and bulk-delete the affected rows before re-running the load cleanly.

The other guardrails: export everything from Crelate to a backup file before the import starts (Crelate has no rollback button, so a self-managed backup is the only safety net), keep the source system live for at least 30 days post-cutover, and stage the Decommission of the source for 30 to 90 days out, never the same day.

Cutover sequencing: (1) source ATS goes read-only and the desk is notified; (2) a final delta export captures everything changed during the test window; (3) delta is loaded via Import Data+ against the External Primary Key; (4) reconciliation runs; (5) recruiters get login access and a 48-hour hyper-care window with the migration lead on call; (6) source decommission is scheduled 30 to 90 days out, never same-day.

Section 08

Migration partners and tools

Crelate Professional Services, ETL vendors, specialist migration shops — what each is good for and how to choose.

Crelate's in-house Professional Services team operates migrations end-to-end from over 40 source platforms, with the explicit claim of thousands of completed ATS data migrations 152137. The team handles export-side coordination, mapping, parser configuration and validation, and typically runs two to six weeks of elapsed time depending on dataset depth and customer responsiveness 135138.

Crelate's published migration approach follows a Discovery → Development → Test pattern: a consultative scoping call, mapping development against the source export, and an iterative test cycle before the final cutover 137. For agencies that want a hands-off migration with a single accountable team, Crelate Professional Services is the default path and is bundled into most subscription tiers as an onboarding-services line item 152153.

On the ETL and iPaaS side, Fivetran, Airbyte, Workato and Integrate.io all have catalogues that include recruiting and CRM-adjacent connectors. None ship a first-class Crelate connector at the time of writing, so their role in a Crelate migration is the staging layer — landing source data into a warehouse (Snowflake, BigQuery), running SQL transformations to normalise picklist values and resolve owner usernames, then pushing into Crelate.

Workato and Integrate.io are the common picks where the migration is bundled with workflow automation rebuilds; Fivetran and Airbyte are the common picks for warehouse-first teams that want to reverse-ETL into Crelate.

Managed-migration cost ranges vary widely. A clean homegrown-database-to-Crelate load of under 25,000 Contacts with no resume backfill and standard fields only typically lands in the $2,000–$8,000 range as a Professional Services line item on top of the Crelate license, which starts at $119 per user per month 153154. A Bullhorn-to-Crelate or Greenhouse-to-Crelate project with stage-history replay, custom fields, resume backfill at scale and Activity history typically runs $10,000–$40,000, driven by record count, Workflow stage compression depth and resume-file volume.

For teams that want to outsource the migration end-to-end, FlitStack specialises in ATS migrations into Crelate and handles the field mapping, External Primary Key design, Workflow Stage compression, resume-file pipeline, stage-history replay and validation work described in Sections 5 and 7. Pricing is fixed-fee, based on record count and source platform, with separate line items for stage-history replay and resume-file depth so the scope is transparent before signature.

This is one of several legitimate paths — the right choice for any given team depends on whether they want Crelate's own Professional Services bundled with onboarding, an iPaaS-first approach with Fivetran or Workato as the long-term sync layer, or a specialist migration vendor with platform-independent accountability. Explore FlitStack →

Section 09

Frequently asked questions

The questions every Crelate migration team works through before they sign the scope.

References

Sources

  1. 1 Crelate platform overview
  2. 2 Import Data+ — Crelate, Inc. Help Center
  3. 9 What is an ATS Data Migration? — Crelate
  4. 10 Crelate Professional Services — Customer Success
  5. 12 Crelate Recruit — Client Portal for Recruiters
  6. 30 Crelate Developer Guide — Crelate Help Center
  7. 32 Import Data+ — Beginning your Import
  8. 33 Spreadsheet Import Troubleshooting — Crelate Help Center
  9. 36 Importing Resumes — Crelate Help Center
  10. 62 Import Data+ — Mapping, Identifier and Reviewing your Import
  11. 66 Data Cleanup Best Practices (BEFORE IMPORT) — HubSpot Community
  12. 69 User Roles — Crelate Help Center
  13. 72 Best Practices: Custom Fields — Crelate Help Center
  14. 74 Using a Picklist in Crelate — Crelate Help Center
  15. 94 Advanced Search — Crelate Help Center
  16. 101 Master Guide — Importing Data — Crelate Help Center
  17. 102 Bulk Operations — Crelate Help Center
  18. 104 Assigning Record Ownership — Crelate Help Center
  19. 125 Post-Migration Validation and Optimization Guide — Microsoft Learn
  20. 132 Creating your Workflow Stages — Crelate Help Center
  21. 133 Interview Loops & Templates — Crelate Help Center
  22. 134 Interview Form Questions — Crelate Help Center
  23. 135 ATS Data Migration Best Practices — Crelate
  24. 136 Crelate Recruit edition — Client Portal and Contact Types
  25. 137 Don't Let Fear Stop Your ATS Data Migration — Crelate
  26. 138 The Recruiters Guide to ATS Data Migrations — Crelate (PDF)
  27. 139 Importing Resumes — bulk import up to 250 at once
  28. 140 ATS Data Migration definition and process — Crelate
  29. 146 Security Policy — Crelate (SOC1/SOC2, HIPAA, ISO27001)
  30. 147 What rules apply if my organisation transfers data outside the EU? — European Commission
  31. 152 Crelate Professional Services — migration developers
  32. 153 Crelate Pricing 2026 — TrustRadius
  33. 154 Crelate Software Pricing, Alternatives & More 2026 — Capterra

Need help running this migration?

FlitStack AI runs Crelate migrations end-to-end.

Fixed-fee pricing, a hands-on migration engineer, full field mapping and validation. The work described in this guide — done for you.