CRM migration

Migrate from Corteza CRM to HubSpot

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

Corteza CRM logo

Corteza CRM

Source

HubSpot

Destination

HubSpot logo

Compatibility

100%

12 of 12

objects map 1:1 between Corteza CRM and HubSpot.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Corteza CRM structures data around configurable Modules — Account, Contact, Lead, Opportunity, Task, Event, Note — stored within Namespaces that act as organizational containers. The platform exposes a REST API and a namespace export/import mechanism, though edge cases around deleted module references can block exports. HubSpot uses a flatter object model with Contacts, Companies, Deals, and Activities, plus a lifecycle_stage property for behavioral segmentation and business-unit-level Teams. The migration maps every standard Corteza module to its HubSpot equivalent, creates custom properties for any fields that have no HubSpot native counterpart, and re-uploads file attachments to HubSpot's file storage. Workflows, automation scripts, and RBAC configurations cannot migrate automatically — FlitStack exports workflow definitions and permission structures as documentation for manual rebuild in HubSpot's workflow builder and permission settings. The cutover uses a delta-pickup window (typically 24–48 hours) so in-flight records modified during the final sync land correctly in HubSpot. Organizations with multiple namespaces must consolidate data into HubSpot's single-portal model, and custom module relationships require mapping to HubSpot's association API.

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

Corteza CRM logo

Corteza CRM

What's pushing teams away

  • Enterprise support is unclear — despite Enterprise tier branding, there is no documented SLA or dedicated support channel, leaving self-hosted teams without recourse when issues arise.
  • Workflow stability after upgrades is inconsistent — lead conversion automation buttons have been documented as disabled after restore operations, requiring manual re-import of workflow definitions to fix.
  • The platform feels bare for production use — federation is marked experimental and disabled by default, and multiple standard CRM functions still require manual scripts or DB workarounds.
  • Self-hosting carries hidden operational cost — teams need DevOps capacity for deployment, backups, updates, and troubleshooting that SaaS CRMs absorb entirely.

Choosing

HubSpot logo

HubSpot

What's pulling them in

  • Lowest barrier to entry of any major CRM — the free tier with unlimited contacts lets teams validate fit before committing to a paid plan, according to G2 and Capterra reviewers.
  • Native integration between the CRM and sales engagement tools (sequences, email tracking, dialer) means no separate sync configuration, a theme across G2 Sales Hub reviews.
  • Pipeline visualization, deal tracking, and automated workflows are consistently praised as intuitive and easy to set up without developer involvement.
  • Strong onboarding for new team members — reviewers on Capterra and G2 highlight how quickly new reps become productive without formal training.
  • The HubSpot platform ecosystem (Marketing, Sales, Service, CMS hubs) allows growing companies to consolidate tools without building new integrations.

Object mapping

How Corteza CRM objects map to HubSpot

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

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

Corteza CRM

Account

maps to

HubSpot

Company

1:1
Fully supported

Corteza Account maps directly to HubSpot Company. Fields including name, industry, website, employee count, and annual revenue map to their HubSpot equivalents. Parent-child company hierarchies in Corteza (where one account is the parent of another) map to HubSpot's Associated Companies field. Multi-account associations on a single contact require a primary company assignment with secondary associations noted.

Corteza CRM

Contact

maps to

HubSpot

Contact

1:1
Fully supported

Corteza Contact maps 1:1 to HubSpot Contact. All standard fields — first name, last name, email, phone, job title, address — map to HubSpot native properties. When a Corteza Contact is linked to multiple Accounts, the most-recently-modified Account is set as the primary HubSpot company association, and secondary associations are captured as a property note for manual review.

Corteza CRM

Lead

maps to

HubSpot

Contact

1:1
Fully supported

Corteza Lead conversion produces Account, Contact, and Opportunity in a single atomic operation. When migrating without converting, all Lead fields map to HubSpot Contact properties. The original Corteza Lead ID is preserved as a custom property (corteza_lead_id) so teams can reference the source record. Lead status values map to HubSpot's lifecycle_stage property via value mapping.

Corteza CRM

Opportunity

maps to

HubSpot

Deal

1:1
Fully supported

Corteza Opportunity maps to HubSpot Deal. The opportunity name, amount, expected close date, and probability map directly. The pipeline and stage stored in Opportunity fields map to HubSpot Deal pipeline and dealstage properties. If multiple Corteza pipelines exist, each maps to a separate HubSpot pipeline with stage pick-list values scoped per pipeline.

Corteza CRM

OpportunityContactRole

maps to

HubSpot

Deal Association

1:1
Fully supported

Corteza OpportunityContactRole defines which contacts are associated with an opportunity and in what role (such as Decision Maker or Influencer). These associations migrate as HubSpot deal-contact associations. Role labels that have no HubSpot equivalent are stored as a custom property on the deal-contact association for reference.

Corteza CRM

Task

maps to

HubSpot

Task (Activity)

1:1
Fully supported

Corteza Task maps to HubSpot Task. Subject, body, due date, owner, and completion status migrate. Original timestamps (created_at, updated_at) are preserved as HubSpot activity timestamps. Task type distinguishes calls, emails, and general to-dos — this maps to HubSpot's task type property.

Corteza CRM

Event

maps to

HubSpot

Meeting (Activity)

1:1
Fully supported

Corteza Event maps to HubSpot Meeting. Subject, body, start time, end time, owner, and linked contact/lead record migrate. Timezone handling in Corteza event records is preserved by storing the original timezone as a property note. Events without an assigned owner default to the migration operator for review.

Corteza CRM

Note

maps to

HubSpot

Note (Activity)

1:1
Fully supported

Corteza Note maps to HubSpot Note. Body content migrates. If Corteza notes use rich text, the HTML content is converted to plain text for HubSpot compatibility. Notes are associated to their parent record (contact, company, or deal) using HubSpot's association model. Individual notes that span multiple Corteza records are split and linked to each parent.

Corteza CRM

File (Attachment)

maps to

HubSpot

HubSpot Files

1:1
Fully supported

Corteza file attachments do not have a direct HubSpot equivalent object. Files are downloaded from Corteza, re-uploaded to HubSpot's file manager, and attached to the corresponding CRM record by ID. Large files (over HubSpot's size limits per tier) are flagged for manual re-upload or alternative storage. Corteza file view modes (gallery, list, single image) do not translate — files are re-associated by record.

Corteza CRM

Custom Module (any non-standard module)

maps to

HubSpot

Custom Object / Custom Property

1:1
Fully supported

Corteza custom modules (created in the admin panel under Modules) map to HubSpot custom objects if they define required fields and a primary key. Modules without required fields or with unsupported field types (such as Record reference to an unmigrated module) require custom object creation in HubSpot or field consolidation into existing objects. Custom module associations that use N:N relationships map to HubSpot's association API.

Corteza CRM

Case

maps to

HubSpot

Ticket

1:1
Fully supported

Corteza Case maps to HubSpot Ticket. Subject, description, status, priority, owner, and related contact/company associations migrate. Case custom fields map to HubSpot custom ticket properties. If Corteza Cases use multiple pipelines with different stages, each maps to a separate HubSpot ticket pipeline with scoped stage values.

Corteza CRM

Campaign

maps to

HubSpot

HubSpot Campaign

1:1
Fully supported

Corteza Campaign records (module type) have no direct HubSpot equivalent. Campaign names and descriptions are preserved as a custom property on associated contacts for reference. HubSpot's native Campaigns object serves a different purpose (marketing campaign tracking) and requires separate setup.

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.

Corteza CRM logo

Corteza CRM gotchas

High

Namespace export fails on orphaned page references

High

Workflow automation breaks after restore or upgrade

Medium

Field-level security does not cover all access scenarios

Medium

Federation is experimental and not production-ready

Low

No publicly documented API rate limits

HubSpot logo

HubSpot gotchas

High

Marketing Contacts billing model is migration-critical

High

Feature tier gating is not visible until onboarding

Medium

Mandatory onboarding fees inflate year-one cost

Medium

HubSpot CSV importer cannot migrate engagements or attachments

Medium

Custom objects require Enterprise and a pre-existing schema

Pair-specific challenges

  • Corteza workflows use trigger/scope configuration with no HubSpot equivalent

    Corteza workflow actions — including Prompt and Delay steps — make the workflow asynchronous and break transactional guarantees for create/update/delete operations. The docs state that record-creation confirmation is not possible with workflows. HubSpot workflows operate on property-change triggers and enrollment logic, which is a fundamentally different execution model. There is no automated path to translate Corteza trigger/scope configurations into HubSpot workflow enrollment criteria. FlitStack exports workflow definitions as a structured reference document so your HubSpot admin can rebuild them in the workflow builder, but the translation is manual and requires business-logic review.

  • Corteza removed CRM and Service Solution from default deployment in 2024.9

    The Corteza 2024.9 changelog explicitly removed the CRM and Service Solution apps from the default deployment. Instances that were not explicitly configured to include these apps lost access to standard CRM pages, modules, and workflow templates. This creates a migration cliff for teams that deployed on defaults — the source data model may be incomplete or inconsistently configured. FlitStack audits the active modules and pages in the source instance before migration planning to identify whether the CRM app was present or removed. If the CRM app was removed, the migration plan documents which standard CRM behaviors are unavailable for export.

  • Corteza file exports do not preserve parent-record associations

    Corteza's file export mechanism returns files as individual objects but does not embed the parent-record association in the export payload. The association between a file and its contact, account, or opportunity record must be reconstructed by matching filenames, record IDs, or timestamps against the exported records. For records with multiple attachments, this disambiguation step adds manual review time. In HubSpot, files are re-uploaded and manually re-attached to the appropriate records. FlitStack performs the file-to-record matching during the transformation step using Corteza's API relationship endpoints, but records with ambiguous file associations are flagged for review before the full migration commits.

  • Corteza field-level permissions have no HubSpot equivalent

    Corteza's RBAC system supports field-level read and update permissions per role. HubSpot permissions operate at the user and team level — private records are visible only to owners and admins, and there is no field-level access control on a per-record basis. Organizations that relied on Corteza's field-level permissions to restrict sensitive data (such as deal amounts visible only to managers) cannot preserve this restriction in HubSpot natively. FlitStack documents the original field-level permission assignments as property metadata during the audit. HubSpot admins must implement equivalent restrictions using page layouts, restricted fields, or custom sharing rules after migration.

  • Corteza namespace export can fail silently when pages reference deleted modules

    Corteza's namespace export/import mechanism has documented edge cases: when a page references a deleted module, the export operation fails silently or produces an incomplete archive. Organizations with restored instances or legacy configurations built from deleted module references are at risk of partial exports. HubSpot migration via FlitStack bypasses the namespace export step by connecting directly to Corteza's API and extracting records object-by-object. This avoids the namespace export failure mode but requires the Corteza API to be accessible and within rate-limit tolerances. FlitStack confirms API connectivity and documents any records inaccessible via API before committing to the migration plan.

Migration approach

Six steps for a successful Corteza CRM to HubSpot data migration

  1. Audit Corteza modules, namespaces, and API exportability

    FlitStack connects to your Corteza instance via API and enumerates all active modules, custom fields, and namespace configurations. We identify which modules are CRM-app components versus custom low-code constructs, confirm whether the 2024.9 CRM app removal affects your instance, and count records per object. We also test API export reachability for each module to identify any records inaccessible due to rate-limit thresholds or deleted-module reference issues. The audit produces a data inventory, a custom field mapping matrix, and a pre-migration readiness report before any data movement begins.

  2. Pre-create HubSpot custom properties and pipelines

    Before migrating records, FlitStack creates all required HubSpot custom properties identified during the audit — including the corteza_lead_id__c trace field, original_create_date fields, and any custom fields for Corteza field types without native HubSpot equivalents. If your Corteza instance uses multiple pipelines, we pre-create corresponding HubSpot pipelines and configure stage pick-list values. We also set up HubSpot Teams to map against Corteza role groupings. This step ensures the schema is ready so records can validate on first import rather than requiring retroactive field creation.

  3. Export and migrate accounts and contacts first

    HubSpot requires AccountId on Contacts before deals can associate to contacts. FlitStack sequences the migration so Account records land first, followed by Contact records with their resolved AccountId lookups. For Corteza contacts linked to multiple accounts, we assign a primary company and flag secondary associations for manual review. Lead records are processed in the same pass — lifecycle stage values are mapped via the value-mapping table, and the original Corteza Lead ID is stored on the HubSpot Contact for reconciliation. All file attachments associated with accounts and contacts are downloaded and staged for HubSpot re-upload.

  4. Migrate opportunities, activities, and cases in dependency order

    With accounts and contacts in place, FlitStack migrates Opportunity records, resolving the AccountId and ContactRole associations from the previously migrated contacts. Pipeline and stage values are mapped per pre-created HubSpot pipelines. Task, Event, and Note records are migrated next, each associated to their parent contact, account, or deal record by ID. Case records are migrated to HubSpot Tickets with status and priority value mapping. Any remaining Corteza custom module records are processed according to their module relationship structure — junction tables are handled using HubSpot's association API.

  5. Run sample migration with field-level diff

    A representative slice of records — typically 100 to 500 spanning accounts, contacts, deals, and activities — migrates first. FlitStack generates a field-level comparison between the source Corteza record and the destination HubSpot record, surfacing any fields that did not map, were truncated, or have type-conversion artifacts. Lifecycle stage mapping, pipeline stage mapping, and owner resolution are verified against your expected business rules. You review the sample output and approve or adjust the mapping before the full migration commits.

  6. Full migration with delta-pickup and post-migration validation

    The full dataset migrates in dependency order with real-time progress reporting. A delta-pickup window (typically 24–48 hours) runs after the bulk load to capture any Corteza records created or modified during the cutover period. FlitStack generates a reconciliation report comparing record counts and field totals between Corteza and HubSpot. Associations (contact-to-company, deal-to-contact) are spot-checked for correctness. An audit log captures every record operation, and one-click rollback is available if the reconciliation reveals discrepancies exceeding your defined threshold.

Platform deep dives

Context on both ends of the pair

Corteza CRM logo

Corteza CRM

Source

Strengths

  • 100% open-source with no per-user, per-contact, or tier-gated feature restrictions on the self-hosted version.
  • Self-hosted deployment gives complete data ownership and sovereignty over where customer data resides.
  • Low-code module builder lets non-developers create custom CRM objects and fields without writing code.
  • API-first design documented via OpenAPI with OIDC authentication for secure integrations.
  • Fine-grained RBAC with field-level read and update permissions for complex internal security policies.

Weaknesses

  • No documented SLA or dedicated enterprise support tier despite Enterprise tier branding — self-hosted teams rely on community forums.
  • Upgrade and restore events can break standard CRM workflow behavior, including lead conversion automation buttons.
  • Federation feature is marked experimental and disabled by default, limiting multi-instance identity management.
  • Self-hosted deployment requires DevOps resources for installation, configuration, backups, and ongoing maintenance.
  • Community-driven support has inconsistent response times compared to vendor-backed SaaS alternatives.
HubSpot logo

HubSpot

Destination

Strengths

  • Genuinely useful free CRM tier with no seat limit on contact records.
  • All-in-one sales engagement layer (sequences, email tracking, calling, dialer) embedded natively in the CRM, eliminating a separate integration.
  • Intuitive interface and fast onboarding for individual reps, per G2 and Capterra reviews.
  • Workflow automation triggers across contacts, deals, and tickets with a visual builder.
  • API coverage for all standard objects including custom objects at Enterprise tier.

Weaknesses

  • Pricing model is contact-based at the marketing layer — importing all records as marketing contacts can multiply the monthly bill by 4×.
  • Feature tier cliffs are frequent surprises: sequences, calling, advanced reporting, and quoting are all gated, often requiring plan upgrades mid-implementation.
  • Mandatory onboarding fees at Professional ($1,500) and Enterprise ($3,500) are not prominently disclosed on the pricing page.
  • API rate limits are restrictive for bulk migration — burst limits of 100-200 req/10sec and search endpoint limits of 4 req/sec require careful job queuing.
  • Custom objects, additional pipelines, and advanced forecasting are Enterprise-only, making cost projections difficult for growing teams.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 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 Corteza CRM and HubSpot.

  • Object compatibility

    B

    1 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

    Corteza CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Corteza CRM to HubSpot 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 Corteza CRM to HubSpot data migrations

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

Can't find your answer?

Walk through your Corteza CRM to HubSpot migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Corteza-to-HubSpot migrations complete within a few business days for under 50,000 total records. Complex instances with more than 20 custom modules, multiple namespaces, or extensive role-permission configurations extend to 5–10 business days. The pre-migration audit and HubSpot schema pre-creation typically take 2–3 days and run in parallel with your team's HubSpot configuration. FlitStack provides a timeline estimate after the data inventory phase, so the schedule is locked before migration begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Corteza CRM.
Land in HubSpot, 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