HRMS migration
Field-level mapping, validation, and rollback between OpenCATS and Zoho Recruit. We move data and schema; workflows are rebuilt natively in Zoho Recruit.
OpenCATS
Source
Zoho Recruit
Destination
Compatibility
11 of 12
objects map 1:1 between OpenCATS and Zoho Recruit.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from OpenCATS to Zoho Recruit is a transition from a self-hosted, zero-cost open-source ATS to a cloud-managed subscription platform with a built-in migration wizard and REST API. OpenCATS exposes no REST or GraphQL API — all data lives in a MariaDB schema we access directly with customer-provided credentials. We extract Candidates, Job Orders, Companies, and Contacts in dependency order, transform each record to Zoho Recruit's required field types, and load via CSV upload or Zoho Recruit's module API. OpenCATS stores resume files as filesystem paths rather than database BLOBs, so we flag the file locations for each Candidate record and hand off a separate SFTP file-transfer runbook for the customer to re-link resumes post-migration. Workflows, Saved Lists, and Reports do not migrate as code; we deliver a written inventory of OpenCATS automations and list memberships for the customer's admin to rebuild in Zoho Recruit's Blueprint and Workflow tools. We do not provide post-migration admin support, training, or workflow rebuild as standard scope.
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 OpenCATS object lands in Zoho Recruit, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
OpenCATS
Candidate
Zoho Recruit
Candidate
1:1OpenCATS Candidate records extract from the MariaDB candidates table with all standard fields (first_name, last_name, email, phone, address, source). Zoho Recruit requires Last Name as a mandatory field — we transform any OpenCATS Candidate with a blank last_name by setting it to 'Not Provided' per Zoho's import guidelines. Skills from OpenCATS are stored as comma-separated tags in the candidate_skills join table; we map these to Zoho Recruit's Skills field or create them as tag entries in Zoho's skill repository during import. Resume file paths are extracted from candidate_attachments and flagged for separate SFTP file transfer post-migration.
OpenCATS
Job Order
Zoho Recruit
Job Opening
1:1OpenCATS Job Orders map to Zoho Recruit Job Openings with joborder_id, title, description, status, and assigned recruiter extracted from the joborder table. OpenCATS job order status values (published, on-hold, closed, cancelled) map to Zoho Recruit's Active, On Hold, Closed, and Cancelled status equivalents. Assigned Recruiter email resolves against the migrated User records to populate the Zoho Recruit Owner field. Job order custom fields migrate to Zoho Recruit custom fields created during schema pre-configuration.
OpenCATS
Company
Zoho Recruit
Client
1:1OpenCATS Companies map to Zoho Recruit Clients. The company_id, name, address, website, and industry fields transfer directly. We resolve the owner recruiter reference from OpenCATS and map it to the Client's Owner field in Zoho Recruit. If OpenCATS stores multiple contacts per company as separate Contact records, we preserve the association via the candidate_company join table before creating individual Contact records in Zoho Recruit linked to the same Client.
OpenCATS
Contact
Zoho Recruit
Contact
1:1OpenCATS Contacts (hiring managers, client representatives, cold call list entries) map to Zoho Recruit Contacts. We extract first_name, last_name, email, phone, title, company_name, and notes. The last_name mandatory constraint applies here as well — any Contact with a blank last_name is set to 'Not Provided'. We resolve the owner recruiter by email match against migrated User records.
OpenCATS
Activity
Zoho Recruit
Activity (Task or Event)
1:1OpenCATS Activity records (notes, call logs, meeting entries) extract from the activity_log table with activity_type, activity_date, subject, and notes content. Call entries map to Zoho Recruit Tasks with TaskSubtype set to Call and call duration preserved. Meeting entries map to Zoho Recruit Events with StartDateTime and EndDateTime from the activity timestamp. Notes content migrates as Zoho Recruit Notes linked to the parent Candidate or Job Opening via ContentDocumentLink. We resolve parent candidate and job order references at migration time using the OpenCATS join table keys.
OpenCATS
Saved List
Zoho Recruit
Task List or Tag
1:1OpenCATS Saved Lists are user-curated candidate groupings stored in the saved_list and saved_list_entry tables. We extract the list name and all member candidate IDs, then create equivalent tag-based groupings in Zoho Recruit by tagging each Candidate record with the list name as a Zoho Recruit tag. List ordering and ranking within the saved list do not transfer. The customer chooses during scoping whether to create Zoho Recruit Tasks from the list entries or use tags only.
OpenCATS
User / Recruiter
Zoho Recruit
User
1:1OpenCATS Users extract from the userconfig table with user_id, username, email, first_name, last_name, and is_admin flag. We match by email against Zoho Recruit User accounts. If a Zoho Recruit account already exists for a given email, that account must be closed or consolidated per Zoho's migration requirements before User records can be imported under that email address. Role-permission structures in OpenCATS map conceptually to Zoho Recruit's recruiter and admin role model but require manual configuration post-migration.
OpenCATS
Candidate Attachment (Resume File)
Zoho Recruit
Candidate Attachment
1:1OpenCATS stores resume files as filesystem paths on the server, not as database BLOBs. We extract every candidate_attachment record containing the file path and build a file inventory with candidate ID and file path. The actual PDF, DOC, and RTF files must be transferred via SFTP or file share to a location Zoho Recruit can access for re-attachment. We provide a CSV mapping file (candidate ID to file path) so the customer's admin can run the file-transfer independently or with our SFTP handoff runbook. This step is not included in the standard migration scope unless explicitly scoped.
OpenCATS
Calendar Event
Zoho Recruit
Event
1:1OpenCATS calendar entries extract from the calendar_event table with event_title, event_date, event_time, and associated candidate or job order IDs. We map event titles, dates, and associations to Zoho Recruit Events. Recurrence patterns, reminders, and all-day flags in OpenCATS do not transfer — Zoho Recruit Events use a simpler event model and these attributes are not preserved. The customer reviews event history post-migration for any events that require manual re-creation.
OpenCATS
Cold Call List Entry
Zoho Recruit
Contact or Candidate
1:1OpenCATS Cold Call List entries are a specialized contact type used for outreach tracking. We extract them as Contact records in Zoho Recruit with a custom field cold_call_list__c set to true so the customer can filter and manage them separately from standard client contacts. Phone number, email, and notes content migrate cleanly; the cold call tracking disposition values migrate to Zoho Recruit Tasks linked to the Contact.
OpenCATS
Candidate-Job Order Association
Zoho Recruit
Candidate-Job Opening Association
1:1OpenCATS tracks which Candidates are associated with which Job Orders via the candidate_joborder join table, including status within the job pipeline (new, phone screen, interview, offered, hired, rejected). We preserve the full pipeline association in Zoho Recruit by creating Job Opening Candidates with the corresponding pipeline stage. The candidate pipeline status values map to Zoho Recruit's candidate status options per job opening.
OpenCATS
Report (custom)
Zoho Recruit
Report (manual rebuild)
lossyOpenCATS Report definitions are generated from live database queries using its own report engine and are not exportable as artifacts. We do not migrate report definitions. We deliver a written inventory of every OpenCATS report with its name, filters, and fields, and the customer's admin rebuilds the equivalent reports in Zoho Recruit's Report Builder. Report data (the underlying record results) is preserved in the migrated records themselves and available for reporting from day one.
| OpenCATS | Zoho Recruit | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Job Order | Job Opening1:1 | Fully supported | |
| Company | Client1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Activity | Activity (Task or Event)1:1 | Fully supported | |
| Saved List | Task List or Tag1:1 | Fully supported | |
| User / Recruiter | User1:1 | Fully supported | |
| Candidate Attachment (Resume File) | Candidate Attachment1:1 | Fully supported | |
| Calendar Event | Event1:1 | Fully supported | |
| Cold Call List Entry | Contact or Candidate1:1 | Fully supported | |
| Candidate-Job Order Association | Candidate-Job Opening Association1:1 | Fully supported | |
| Report (custom) | Report (manual rebuild)lossy | 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.
OpenCATS gotchas
No REST API forces database-direct migration
Resume files are filesystem references, not embedded blobs
One-week import review delay in OpenCATS native imports
MySQL is unsupported — MariaDB is required
Zoho Recruit gotchas
Daily API rate limits are tier-gated and per-user capped
User import hard cap of 2,000 records
Attachment folder hierarchy must be preserved exactly
Resume parsing quota varies by plan and resets daily
Custom fields unavailable in Free and Standard editions
Pair-specific challenges
Migration approach
Database connection and source audit
We establish a secure connection to the customer's OpenCATS MariaDB instance using credentials provided during scoping. We run an audit query across all tables (candidates, joborder, company, contact, activity_log, saved_list, saved_list_entry, userconfig, calendar_event, candidate_attachment) to capture record counts, identify the database engine version (MariaDB vs MySQL), and flag any custom fields or non-standard schemas. The customer confirms server network accessibility and provides an SSH key or VPN credential if the database is not internet-facing. This step produces a written source inventory used to build the migration scope and CSV template.
CSV preparation and field mapping document
We extract every module from MariaDB into structured CSV files matching Zoho Recruit's import column requirements. We build the field mapping document that pairs each OpenCATS database column (candidate_id, last_name, first_name, email, etc.) with its Zoho Recruit equivalent field name. For the Candidate and Contact modules, we apply the last_name transformation rule (blank values set to 'Not Provided'). Skills from the candidate_skills join table are aggregated into a single comma-separated column per candidate. Activity records are split into Task, Event, and Note CSVs based on activity_type. The field mapping document is reviewed and signed off by the customer before any import begins.
Zoho Recruit schema pre-configuration
Before loading any data, we create any custom fields in Zoho Recruit that are needed to receive OpenCATS custom data — for example, fields to store OpenCATS source ID references, cold_call_list flag, or saved list membership tags. We configure the Zoho Recruit user roles and ensure all recruiter and admin User accounts exist (or are flagged for provisioning if emails conflict with existing Zoho accounts). We verify that mandatory fields are correctly set and that any validation rules in Zoho Recruit are either satisfied by the incoming data or are temporarily disabled for the migration run.
Module import in dependency order
We load data into Zoho Recruit in strict dependency order to satisfy foreign-key constraints. Users import first (after email-dedup reconciliation). Clients (from OpenCATS Companies) import next. Contacts and Candidates import with resolved Owner and Client lookups. Job Openings import with Owner resolved and status mapped. Candidate-to-Job Opening associations (pipeline entries) import last so that both the Candidate and the Job Opening exist before the association record is written. Saved List membership is applied as tags on Candidate records after the Candidate import completes. Activity records (Tasks, Events, Notes) import via separate batch CSVs with parent-record lookups resolved by the candidate and job opening IDs written in the prior phases.
File transfer and resume re-linking
We hand off a file-transfer runbook that maps each OpenCATS Candidate record to its resume file path on the source server. The customer's admin executes the SFTP batch transfer to move resume files to a location accessible for Zoho Recruit upload, then uses Zoho Recruit's document attachment UI or bulk attachment tool to re-link each resume to its corresponding Candidate record. We provide the mapping CSV (candidate ID to file path) and the step-by-step instructions. Resume re-linking is a customer-executed action; we do not perform the file transfer or re-link step as standard migration scope unless explicitly scoped.
Cutover, reconciliation, and automation inventory
We run a final reconciliation comparing the source MariaDB record counts against the Zoho Recruit imported record counts for each module. The customer spot-checks 25-50 random records for data accuracy and signs off the migration. We deliver the written automation inventory listing every OpenCATS workflow or recurring task pattern that requires rebuilding in Zoho Recruit's Blueprint or Workflow Rules tools. We do not rebuild automations as part of the migration scope. We provide a one-week hypercare window to resolve any data quality issues raised within seven days of cutover. Ongoing Zoho Recruit admin support, training, and workflow rebuild are separate engagements.
Platform deep dives
OpenCATS
Source
Strengths
Weaknesses
Zoho Recruit
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 OpenCATS and Zoho Recruit.
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
OpenCATS: Not applicable — no public API.
Data volume sensitivity
OpenCATS 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 OpenCATS to Zoho Recruit migration scoping. Not seeing yours? Book a call.
Walk through your OpenCATS to Zoho Recruit migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave OpenCATS
Other ways to arrive at Zoho Recruit
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.