CRM migration

Migrate from Concord CRM to Freshsales

Field-level mapping, validation, and rollback between Concord CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.

Concord CRM logo

Concord CRM

Source

Freshsales

Destination

Freshsales logo

Compatibility

67%

6 of 9

objects map 1:1 between Concord CRM and Freshsales.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Concord CRM to Freshsales is a shift from a self-hosted, one-time-license platform to a cloud-native, per-user SaaS CRM. Concord organizes data around Contacts linked to Companies by a company_id foreign key; Freshsales uses a separate Leads module for unqualified prospects plus Contacts attached to Accounts. We extract data via Concord's REST API and CSV export tools, sequence Companies before Contacts to satisfy Freshsales' AccountId requirement, map Concord deal stages to Freshsales pipeline stage names, and carry custom field values into Freshsales custom fields. Concord workflows (Create Activity, Send Email, Trigger Webhook) do not execute during data import and cannot migrate as code. We deliver a written inventory of every active Concord workflow with recommended Freshsales automation equivalents for the customer's admin to rebuild post-migration. Attachments stored in Concord's storage/app directory do not migrate through the standard export tool and require manual file transfer.

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

Concord CRM logo

Concord CRM

What's pushing teams away

  • Support response times are slow — G2 reviewers report waiting over a week for assistance with no video tutorials available to compensate.
  • Self-hosted model requires ongoing server maintenance, security updates, and PHP/Laravel version management that many teams lack resources for.
  • No built-in migration tool or guided export — teams transferring to another CRM must manually sequence CSV exports and handle relationship mapping themselves.
  • Server scaling and performance optimization fall entirely on the customer, with no SLA guarantees or managed hosting options available.
  • Limited ecosystem compared to major SaaS CRMs — fewer integrations, no marketplace of pre-built add-ons, and community resources are sparse.

Choosing

Freshsales logo

Freshsales

What's pulling them in

  • Lowest barrier to entry among major CRMs — the free tier supports up to 3 users and includes core CRM functionality before committing to per-seat pricing.
  • Built-in chat, email, and phone reduce reliance on third-party integrations for basic sales communication and contact management.
  • Freddy AI contact scoring and deal insights are included on Pro plans at a lower price than comparable HubSpot tiers.
  • Kanban pipeline views across Contacts, Accounts, and Deals provide visual deal management without requiring custom configuration.
  • Integration with the broader Freshworks ecosystem (Freshdesk, Freshchat, Freshservice) reduces tool sprawl for teams already using Freshworks.

Object mapping

How Concord CRM objects map to Freshsales

Each row shows how a Concord CRM object lands in Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Concord CRM

Company

maps to

Freshsales

Account

1:1
Fully supported

Concord CRM Companies map directly to Freshsales Accounts. Concord's company name, domain, address, phone, industry, and custom fields translate to Freshsales Account fields. This object must migrate first because Concord Contacts reference company_id as a foreign key, and Freshsales Contacts require AccountId on import. We extract Companies via Concord's API (GET /api/v1/companies) or CSV export and load them before any Contact records.

Concord CRM

Contact

maps to

Freshsales

Contact

1:1
Fully supported

Concord CRM Contacts map to Freshsales Contacts with AccountId resolved from the Concord company_id to the Freshsales Account ID. Concord contact fields (first name, last name, email, phone, title, website) map to Freshsales standard fields; Concord custom fields map to Freshsales custom fields of matching type. Contacts without a valid Concord company_id are imported with AccountId set to null, which Freshsales allows, and the customer's admin resolves these manually after migration.

Concord CRM

Contact (unqualified prospect)

maps to

Freshsales

Lead

lossy
Fully supported

Concord CRM does not have a separate Lead object; all prospects live as Contacts. During migration scoping, we determine which Concord Contacts should become Freshsales Leads versus Contacts based on the customer's qualification criteria (status field, has_deal flag, or custom field). We create a documented split rule during scoping so unqualified prospects enter Freshsales as Leads and can be converted to Contacts tied to Accounts at the appropriate pipeline stage.

Concord CRM

Deal

maps to

Freshsales

Deal

1:1
Fully supported

Concord CRM Deals map to Freshsales Deals with deal name, value, expected close date, owner, and stage preserved. Concord deal stage names map to Freshsales pipeline stage names via a stage mapping table created during scoping. Concord custom fields on Deals map to Freshsales Deal custom fields. Deals without a Contact association in Concord are imported without a ContactId, which Freshsales permits, and the admin can link them post-migration.

Concord CRM

Pipeline Stage

maps to

Freshsales

Pipeline Stage

lossy
Fully supported

Concord CRM pipeline stages (stage name, probability percentage, display order) map to Freshsales pipeline stage values. If the customer uses multiple Concord pipelines, we map each to a separate Freshsales pipeline. Stage probabilities in Concord are stored as decimal values (0.00 to 1.00) and convert to Freshsales percentages (0 to 100). We configure Freshsales pipeline stages before Deal migration begins.

Concord CRM

Product

maps to

Freshsales

Product

1:1
Fully supported

Concord CRM Products (name, price, SKU, description) map directly to Freshsales Products. Product migration has no foreign-key dependencies on other objects, so it can run in parallel with Companies. Concord product pricing (regular price, sale price) maps to Freshsales standard cost and selling_price fields.

Concord CRM

Activity

maps to

Freshsales

Task and Appointment

1:many
Fully supported

Concord CRM Activities (calls, meetings, tasks) split into Freshsales Tasks (calls and tasks) and Appointments (meetings). Concord activity type (call, meeting, task) determines the destination object. Concord activity notes migrate as the task or appointment description. Concord linked_resource_type and linked_resource_id allow us to reconstruct the association back to the parent Contact or Deal in Freshsales via ContactId or DealId.

Concord CRM

Custom Fields

maps to

Freshsales

Custom Fields

1:1
Mapping required

Concord CRM custom fields (boolean, date, select, text, number) map to Freshsales custom fields of equivalent type. Boolean custom fields in Concord (stored as 0/1) map to Freshsales checkbox fields. Select (dropdown) fields map to Freshsales dropdown fields with values preserved. We pre-create Freshsales custom fields before migration begins using the Freshsales API. Concord custom field UUIDs are used only on the source side; Freshsales custom fields are created with display names matching the Concord field label.

Concord CRM

User

maps to

Freshsales

User

1:1
Fully supported

Concord CRM Users (email, name, role) map to Freshsales Users. Concord owner_id on Contact, Company, Deal, and Activity records resolves to Freshsales User by email match. Any Concord User without a matching Freshsales User is held in a reconciliation queue; the customer's Freshsales admin provisions missing Users before record import resumes. Role assignments in Concord are documented for manual reconstruction in Freshsales permissions settings.

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.

Concord CRM logo

Concord CRM gotchas

High

Workflows do not fire during data import

Medium

Self-hosted data export requires role permission

Medium

API pagination cap at 100 records per page

Low

Domain transfer requires full server migration

Low

CSRF headers cause API auth failures

Freshsales logo

Freshsales gotchas

Medium

Freddy AI is Pro-tier only despite heavy marketing

High

Post-migration emails and sequences are disabled

Medium

Bot session credits are a one-time 500-session allocation

Medium

Phone credits charged per minute with no cap

Low

File storage limits scale with plan tier

Pair-specific challenges

  • Concord workflows do not fire during data import

    Concord CRM explicitly documents that workflow actions (Create Activity, Send Email, Trigger Webhook) do not execute during data import. Any automation triggers configured on Contact create, Deal stage change, or Company create events will be silent during migration. We audit every active Concord workflow during scoping and deliver a written inventory with each workflow's trigger, conditions, and actions plus recommended Freshsales automation equivalents. The customer's admin rebuilds these in Freshsales manually post-migration. This is not a migration bug; it is a platform limitation of Concord's import engine.

  • CSV export requires UTF-8 encoding and comma delimiters

    Freshsales requires CSV files to be UTF-8 encoded. Concord CRM's CSV export tool can produce files with locale-specific encoding depending on the server's PHP configuration. We convert all Concord exports to UTF-8 using explicit encoding detection before loading into Freshsales. Additionally, Concord CRM's import documentation specifies comma as the required delimiter; tab-delimited exports from Concord cause Freshsales to ingest every row into a single field. We reformat exports to the Freshsales template format before loading.

  • Lead-to-Contact conversion mapping must be configured before migration

    Freshsales distinguishes between Leads (unqualified prospects) and Contacts attached to Accounts (qualified buyers). Concord CRM has no Lead object; all prospects are Contacts. If any Concord Contacts are expected to qualify during the migration or shortly after go-live, the customer must decide which Concord Contacts enter Freshsales as Leads versus Contacts. We define this split during scoping using Concord's status field or a custom qualification flag. Without this configuration, all Concord Contacts migrate as Freshsales Contacts with no Lead conversion path, which can create orphaned records for teams that need a lead management process.

  • Concord CRM attachments do not export via standard tools

    Concord CRM does not include a document attachment export feature in its standard export tool. File attachments stored in storage/app on the Concord server must be transferred manually via SFTP or direct file access. We document the storage/app directory structure during scoping, provide a file listing with parent record association metadata, and recommend a parallel file transfer process. The customer must handle this manually because Concord's attachment storage is file-system-level rather than record-attached in the database.

  • Concord API pagination cap requires sequential page iteration for large datasets

    Concord CRM's API paginates at a default of 15 records per page with a maximum of 100 per_page. Not all endpoints respect the per_page parameter consistently. For large Concord datasets (over 10,000 records), we implement sequential page iteration with rate limit header monitoring (X-RateLimit-Limit and X-RateLimit-Remaining) to avoid 429 errors and ensure complete data extraction. We prefer API extraction over CSV export for large datasets because the API preserves custom field UUIDs that CSV exports sometimes truncate or reformat.

Migration approach

Six steps for a successful Concord CRM to Freshsales data migration

  1. Discovery and data audit

    We audit the Concord CRM installation to inventory all objects, custom fields, pipeline stages, user counts, activity volumes, and active workflows. We confirm the API token user's export permissions (Concord enforces role-based access for export) and request that the customer assign export permission to the API user before extraction begins. We identify all Concord custom fields by type and map them to Freshsales field types (text, number, date, dropdown, checkbox) during scoping. We document every active Concord workflow with its trigger, conditions, and actions for the rebuild inventory.

  2. Destination schema setup in Freshsales

    We configure Freshsales before any data loads: we create custom fields matching the Concord custom field set, configure pipeline stages mapped to Concord deal stages, set up Users matching Concord Users by email, and configure the Lead-Contact split rule based on the scoping decision. If any Concord Contacts are designated to enter Freshsales as Leads, we pre-create those Lead fields and the conversion mapping so that data lands in the correct object on first import. This step runs in parallel with Concord data extraction.

  3. Data extraction from Concord CRM

    We extract data from Concord CRM using the REST API for field-level fidelity (especially custom field UUIDs) and the CSV export tool as a fallback or validation cross-check. We extract in dependency order: Companies first (no foreign-key dependencies), then Contacts (with company_id resolved to Freshsales AccountId), then Deals (with owner and stage resolved), then Products (no dependencies), then Activities (with linked resource type and ID preserved for parent resolution). All CSV exports are converted to UTF-8 and reformatted to Freshsales template column headers before loading.

  4. Test migration and reconciliation

    We run a test migration into a Freshsales trial or sandbox environment using production-like data volume. The customer reconciles record counts (Accounts in, Contacts in, Deals in, Tasks in), spot-checks 25-50 random records against Concord source data, and reviews custom field values to confirm mapping accuracy. Any field mapping corrections, stage name adjustments, or split rule refinements are applied before production migration begins. We do not proceed to production until the customer signs off on the test migration output.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Accounts (from Concord Companies), Contacts (with AccountId resolved), Leads (if the split rule designates unqualified Contacts as Leads), Deals (with OwnerId and stage resolved), Products, Activities (Tasks and Appointments with parent record IDs resolved), and custom field values. Each phase emits a row-count reconciliation report before the next phase begins. Any Concord Contacts that could not be linked to a Concord Company are flagged for manual resolution in Freshsales after migration.

  6. Cutover, validation, and workflow rebuild handoff

    We freeze Concord CRM writes during cutover, run a final delta migration of any records modified during the migration window, then mark Freshsales as the system of record. We deliver the Concord workflow inventory document to the customer's admin team with recommended Freshsales automation equivalents. We support a one-week hypercare window where we resolve any data quality issues raised by the customer's team. We do not rebuild Concord workflows as Freshsales automations inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

Concord CRM logo

Concord CRM

Source

Strengths

  • One-time $64–$390 license with lifetime access and no per-user or per-contact recurring fees.
  • Full source code access enables deep customization, white-labeling (Extended License), and full data portability.
  • Unlimited users and unlimited data records as long as the server infrastructure supports it.
  • Native CSV/XLS/XLSX export for Contacts, Companies, Deals, Products, and Activities without requiring API access.
  • REST API with Bearer token auth supports custom integrations, automations, and programmatic data access.

Weaknesses

  • Self-hosted only — requires PHP/Laravel server setup, maintenance, and ongoing security management by the customer.
  • No built-in migration or import tool; workflow automations do not execute during data import.
  • Support limited to ticket system with documented delays of over a week for some requests.
  • Single installation per license with no SaaS-ready code out of the box.
  • Limited ecosystem, integrations, and community resources compared to major SaaS CRM platforms.
Freshsales logo

Freshsales

Destination

Strengths

  • Generous free tier for small teams with core CRM functionality without per-seat costs.
  • All-in-one sales CRM with built-in telephony, chat, and email reducing third-party tool dependency.
  • Freddy AI contact scoring and deal predictions available on Pro tier.
  • Multiple pipeline views with Kanban and list options across all plans.

Weaknesses

  • Reports lack depth compared to competitors like HubSpot, with limited customization options.
  • Integration setup is poorly documented with no clear guides for connecting third-party tools.
  • AI features gated behind $39/user/month Pro tier despite marketing emphasis on Freddy AI.
  • Bot sessions limited to 500 one-time allocation with no monthly refresh.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 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 Concord CRM and Freshsales.

  • Object compatibility

    B

    2 of 8 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

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

  • API constraints

    B

    Concord CRM: Per-minute limits documented in X-RateLimit-Limit and X-RateLimit-Remaining response headers; exact values vary and are not publicly specified.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Concord CRM to Freshsales 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 Concord CRM to Freshsales data migrations

Answers to the questions buyers ask most during Concord CRM to Freshsales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Concord CRM to Freshsales 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 Contacts and 1,000 Deals with no complex custom field dependencies. Migrations with high record volumes (over 50,000 contacts), multiple custom field sets, large activity histories (over 100,000 activity records), or delta-sync cutover windows requiring a second migration pass move to four to eight weeks. The Concord API pagination cap at 100 records per page and the need to sequence Companies before Contacts for relationship resolution are the primary timeline drivers.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Concord CRM.
Land in Freshsales, 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