HRMS migration

Migrate from OpenCATS to Zoho Recruit

Field-level mapping, validation, and rollback between OpenCATS and Zoho Recruit. We move data and schema; workflows are rebuilt natively in Zoho Recruit.

OpenCATS logo

OpenCATS

Source

Zoho Recruit

Destination

Zoho Recruit logo

Compatibility

92%

11 of 12

objects map 1:1 between OpenCATS and Zoho Recruit.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

OpenCATS logo

OpenCATS

What's pushing teams away

  • Missing modern ATS essentials — no built-in interview scheduling, candidate assessments, or background-check integrations.
  • Security concerns: MD5 password hashing is a documented vulnerability that fails modern security audits.
  • Steep installation and admin learning curve — non-technical teams struggle to stand it up without IT or DevOps help.
  • No bulk-recruiting features — high-volume teams find the per-record workflow prohibitive at scale.
  • No native calendar integration — OpenCATS cannot sync with Google Calendar, Outlook, or any external calendar system, forcing manual coordination outside the tool.

Choosing

Zoho Recruit logo

Zoho Recruit

What's pulling them in

  • Lowest cost entry point of any major ATS — a free tier with Candidates, Clients, Contacts, Interviews, and a career site lets small teams validate before committing to a paid plan.
  • Deep Zoho ecosystem integration — if the team already uses Zoho CRM, Sheets, or Analytics, candidate data flows between modules without re-keying or third-party middleware.
  • Customizable pipelines and stages — both agency and corporate editions let users define custom pipeline stages and assign candidates through drag-and-drop visual boards.
  • AI-assisted features via Zia — resume parsing, candidate summarization, and job-candidate matching are built in on paid tiers, reducing manual screening time.
  • Job board aggregation at no extra cost — paid tiers include postings to major job boards, extending reach without purchasing separate job ad bundles.

Object mapping

How OpenCATS objects map to Zoho Recruit

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

maps to

Zoho Recruit

Candidate

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Job Opening

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Client

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Contact

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Activity (Task or Event)

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Task List or Tag

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

User

1:1
Fully supported

OpenCATS 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)

maps to

Zoho Recruit

Candidate Attachment

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Event

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Contact or Candidate

1:1
Fully supported

OpenCATS 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

maps to

Zoho Recruit

Candidate-Job Opening Association

1:1
Fully supported

OpenCATS 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)

maps to

Zoho Recruit

Report (manual rebuild)

lossy
Fully supported

OpenCATS 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.

Gotchas + challenges

What specifically takes care here

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 logo

OpenCATS gotchas

High

No REST API forces database-direct migration

Medium

Resume files are filesystem references, not embedded blobs

Low

One-week import review delay in OpenCATS native imports

Medium

MySQL is unsupported — MariaDB is required

Zoho Recruit logo

Zoho Recruit gotchas

High

Daily API rate limits are tier-gated and per-user capped

High

User import hard cap of 2,000 records

Medium

Attachment folder hierarchy must be preserved exactly

Medium

Resume parsing quota varies by plan and resets daily

Low

Custom fields unavailable in Free and Standard editions

Pair-specific challenges

  • OpenCATS has no API — we extract directly from MariaDB

    OpenCATS exposes no REST or GraphQL API. All data — Candidates, Job Orders, Companies, Contacts, Activities, Saved Lists, and Users — lives in a MariaDB schema on the self-hosted server. We connect directly to that database using customer-provided credentials to run SELECT queries with proper table joins. The customer's OpenCATS server must be network-accessible (or reachable via VPN/SSH tunnel) before scoping begins. If the server runs MySQL rather than MariaDB, SQL dialect differences may cause unexpected query behavior — we identify the engine during connection and flag MySQL-only syntax before running export queries.

  • Resume files are filesystem paths, not database blobs

    Candidate resume files in OpenCATS are stored as absolute file paths on the server disk (for example, /var/opencats/resumes/candidate_123.pdf), not as BLOB data in the database. We extract all text fields cleanly, but the actual resume files must be transferred separately. We produce a CSV inventory mapping each Candidate ID to its resume file path so the customer can run an SFTP batch transfer and re-link files in Zoho Recruit post-migration. If the OpenCATS server is decommissioned before the file transfer completes, resume files are lost. We flag this as a pre-migration action item and include it in the cutover checklist.

  • Zoho Recruit requires Last Name on every Candidate and Contact

    Zoho Recruit enforces Last Name as a mandatory field for Candidate and Contact imports. OpenCATS Candidate records sometimes have blank last_name values (for example, single-name entries common in some international datasets). We transform these to 'Not Provided' before writing to Zoho Recruit per Zoho's own import documentation, and we flag each transformed record in the migration reconciliation report. Any record without a last name value will be skipped entirely by Zoho Recruit's importer if not corrected, which would silently drop those candidates from the migration.

  • Existing Zoho Recruit accounts block User import by email

    Zoho Recruit's migration tool will not import a User whose email address already has a separate Zoho Recruit account. During scoping, we extract all OpenCATS user emails and cross-reference against the destination Zoho Recruit tenant. Any duplicate email must have the existing Zoho Recruit account closed or consolidated before the User import phase runs. This is a Zoho platform constraint, not a FlitStack AI limitation, and we flag it during the pre-migration audit.

  • Saved List ordering and ranking do not transfer

    OpenCATS Saved Lists preserve the order in which candidates were added and any ranking or star rating within the list. Zoho Recruit's tag-based grouping does not support positional ordering. We transfer the list membership (which candidates belong to which lists) but cannot preserve the relative order or internal ranking within each list. Candidates appear in the new Zoho Recruit tag group in the order they were processed during migration, not in the original list order.

Migration approach

Six steps for a successful OpenCATS to Zoho Recruit data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

OpenCATS logo

OpenCATS

Source

Strengths

  • Zero-cost, zero-vendor-commitment ATS for teams validating recruiting workflows
  • Full database schema is self-hosted — you own all data with no extraction fees
  • Customizable branding, modules, and company logo for client-facing job boards
  • Skill tagging and list-building replace the deprecated resume parser for candidate categorization
  • Community forum and GitHub repository for self-service troubleshooting and code customization

Weaknesses

  • No official API — migrations require direct MariaDB access or CSV list exports, not real-time sync
  • MySQL is explicitly unsupported; MariaDB is required, which complicates some hosting environments
  • Resume parsing was removed from the core product; users rely on manual skill tagging instead
  • Self-administered hosting means you own security patching, backups, and server maintenance
  • Community-supported only — no SLA, no dedicated support tier, no guaranteed response times
Zoho Recruit logo

Zoho Recruit

Destination

Strengths

  • Free tier includes full candidate management with a hosted career site, making it viable for very small staffing operations.
  • Multi-edition architecture splits agency and corporate HR workflows, with tier-gated features that scale predictably with headcount.
  • Per-user API rate limits (500–1000/day) are generous for mid-size migrations compared to competitors that gate by total org quota.
  • Zoho's own data migration tool supports CSV import from Bullhorn, CATS, Jobdiva, and Workable, validating interoperability with common ATS formats.
  • 45-day money-back guarantee and 15-day full-feature trial reduce financial risk for teams evaluating the platform.

Weaknesses

  • Free edition excludes custom fields, lookup relationships, and formula fields, making data model extensibility unavailable until a paid tier is purchased.
  • Resume parsing quotas are capped: 250/day on Standard, 500/day on Professional, unlimited only on Enterprise — bulk imports of large candidate pools will hit these limits.
  • No bulk/batch API endpoint for inserts or updates — large migrations rely on looping single-record API calls within daily rate limit windows.
  • Custom modules cannot be imported from external ATS; only standard modules (Users, Candidates, Clients, etc.) are in the supported migration list.
  • Attachments require a rigid folder hierarchy to re-associate with records, and any deviation in folder structure during extraction causes silent disassociation.

Complexity grading

How hard is this migration?

Standard HRMS migration. 1 of 7 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across OpenCATS and Zoho Recruit.

  • Object compatibility

    B

    1 of 7 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    OpenCATS: Not applicable — no public API.

  • Data volume sensitivity

    B

    OpenCATS doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your OpenCATS to Zoho Recruit migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about OpenCATS to Zoho Recruit data migrations

Answers to the questions buyers ask most during OpenCATS to Zoho Recruit migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between two and four weeks for accounts under 5,000 Candidates and 500 Job Orders with a clean MariaDB schema accessible over the network. Migrations with large activity histories (over 50,000 Activity records), a MariaDB server on a private network requiring VPN setup, or extensive Saved List membership requiring manual tag re-organization move into six to ten weeks because of connection complexity, file-transfer coordination, and reconciliation scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from OpenCATS.
Land in Zoho Recruit, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day