CRM migration

Migrate from Opal CRM to HubSpot

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

Opal CRM logo

Opal CRM

Source

HubSpot

Destination

HubSpot logo

Compatibility

100%

12 of 12

objects map 1:1 between Opal CRM and HubSpot.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Opal CRM and HubSpot take different approaches to the same CRM problem. Opal separates Leads and Contacts into distinct objects and tracks quotation management as a standalone feature with workflow-based approval routing. HubSpot consolidates both into a single Contact object with a lifecycle_stage property that tracks progression from subscriber through customer. Deals in Opal map to HubSpot's deal pipeline model, but Opal's quotation objects — with their header-plus-line structure and workflow status — must transform into HubSpot Products linked to Deals via Line Items. Activities (calls, emails, meetings, notes) migrate as HubSpot engagements with original timestamps and owners preserved. Owner resolution happens via email matching against HubSpot user accounts. We do not migrate Opal's tour-planning records, role permissions, or quotation approval workflows — those are destination-side configuration. Our migration runs against Opal's API, using incremental batched pulls to stay within rate limits, followed by a delta-pickup window before final validation.

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

Opal CRM logo

Opal CRM

What's pushing teams away

  • Limited integrations beyond two-lines-of-code setup mean teams with established tech stacks hit walls when connecting to accounting, marketing, or telephony tools.
  • Small user review sample on G2 and Capterra makes it difficult to assess long-term reliability and support quality before committing.
  • No clear public documentation for a REST API or bulk export endpoint means teams cannot programmatically migrate data or build automated workflows.
  • Scalability concerns emerge as teams grow beyond the Standard plan — pricing is per-organization rather than per-user, and feature gates between tiers are not clearly documented.
  • Support responsiveness is not quantified on the website, and the absence of a public status page or community forum makes it hard to gauge ongoing platform reliability.

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 Opal CRM objects map to HubSpot

Each row shows how a Opal 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.

Opal CRM

Lead

maps to

HubSpot

Contact

1:1
Fully supported

Opal Leads map directly to HubSpot Contacts. The HubSpot lifecycle_stage property is set to 'lead' for all migrated records. Original create dates are preserved in a custom datetime property (e.g., Original_Create_Date__c) for historical reporting continuity. Owner resolution happens via email address matching against existing HubSpot user accounts. Unmatched owners are flagged before migration for team invite or fallback assignment.

Opal CRM

Contact

maps to

HubSpot

Contact

1:1
Fully supported

Opal Contacts migrate to HubSpot Contacts in a 1:1 relationship. Name, email address, phone number, job title, physical address, and company association all map directly to HubSpot standard properties. Opal's primary company association maps to the HubSpot contact's associatedcompanyid field. Any secondary Opal company associations are preserved as association notes or custom properties for post-migration review.

Opal CRM

Company

maps to

HubSpot

Company

1:1
Fully supported

Opal Company records map to HubSpot Company records. Company name, domain, industry classification, employee count, and annual revenue all map directly. Opal's parent-company hierarchy maps to HubSpot's parent Company ID field. Organizations with multi-branch structures may require post-migration grouping via custom properties or manual tagging since HubSpot's company hierarchy model differs from Opal's approach.

Opal CRM

Deal

maps to

HubSpot

Deal

1:1
Fully supported

Opal Deals migrate to HubSpot Deals with deal name, amount, close date, owner, and stage preserved. Each Opal pipeline becomes a separate HubSpot pipeline. Pipeline stage names map value-by-value to HubSpot stage names within each pipeline. Stage probabilities are re-applied according to HubSpot's stage configuration interface. Deal-contact associations and deal-company associations resolve via email lookup.

Opal CRM

Quotation

maps to

HubSpot

Product + Deal Line Item

1:1
Fully supported

Opal Quotation objects with header metadata and line items transform into HubSpot Products and Line Items linked to the migrated Deal. Each quotation line becomes a Line Item referencing a Product record. If an Opal quotation references a product that does not exist in HubSpot, FlitStack creates a placeholder Product record and flags it for your admin to populate pricing and details after migration.

Opal CRM

Activity: Call

maps to

HubSpot

Engagement: Call

1:1
Fully supported

Opal call logs migrate as HubSpot engagements with Type='Call', original timestamp, call duration, call direction (inbound/outbound), and owner preserved. Each call is associated to the migrated contact record via HubSpot's engagement association API. Dispositions or outcome notes from Opal map to HubSpot engagement metadata fields or custom properties on the associated contact record.

Opal CRM

Activity: Email

maps to

HubSpot

Engagement: Email

1:1
Fully supported

Opal email activity migrates as HubSpot email engagements. Subject line, body content, timestamp, and owner are all preserved during migration. Associations link each email to the migrated contact and company records. Plain-text emails migrate cleanly; rich-text emails are re-rendered in HubSpot's engagement format using its internal HTML rendering pipeline.

Opal CRM

Activity: Meeting

maps to

HubSpot

Engagement: Meeting

1:1
Fully supported

Opal meeting records migrate as HubSpot engagements with Type='Meeting'. Start time, end time, meeting location, title, and assigned owner all transfer to HubSpot's engagement properties. Meeting attendees are resolved by email address against migrated HubSpot contacts to maintain association integrity. Original create timestamp is preserved for historical reporting continuity and audit trail purposes.

Opal CRM

Activity: Note

maps to

HubSpot

Note

1:1
Fully supported

Opal notes migrate as HubSpot Notes on the associated contact or company record. Note body text, create date, and owner are preserved during the migration. Notes attached to deals link to the migrated HubSpot Deal via deal-association labels. Notes without a parent record are attached to the most relevant contact by email lookup and owner resolution.

Opal CRM

Owner

maps to

HubSpot

User

1:1
Fully supported

Opal owner records are resolved by email address against HubSpot user accounts. Matched owners map directly to their corresponding HubSpot user. Unmatched owners are flagged before migration so your team can invite them to HubSpot or assign records to a fallback owner. No record lands in HubSpot without an owner assignment; the audit log tracks all ownership resolutions.

Opal CRM

Custom Field (any object)

maps to

HubSpot

Custom Property

1:1
Fully supported

Opal custom fields on any object map to HubSpot custom properties. Data type is matched — text, number, date, pick-list, checkbox — and the HubSpot property is created in your account before migration runs. Pick-list custom fields require value-by-value mapping if the available options differ between Opal and HubSpot.

Opal CRM

Attachment

maps to

HubSpot

File

1:1
Fully supported

Opal file attachments on records re-upload to HubSpot Files and are re-associated to the migrated record. Files are downloaded from Opal's storage and uploaded to HubSpot's file management. HubSpot's 25MB per-file limit is enforced; files exceeding this are flagged for splitting or alternative handling.

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.

Opal CRM logo

Opal CRM gotchas

High

No publicly documented API for bulk data export

Medium

Tour Plan expense data may flatten during export

Medium

Quotation workflow state is not a standard CRM field

Low

Free tier limits and trial expiry not visible in export

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

  • HubSpot's flat contact-company model flattens Opal's parent-company hierarchy

    Opal CRM supports hierarchical parent-company relationships where a contact belongs to a parent account with subsidiary branches. HubSpot uses flat contact-to-company associations — each contact links to a primary company and can have secondary associations, but HubSpot has no native equivalent of Opal's parent-company hierarchy. We resolve contacts to a primary HubSpot Company and preserve the parent reference in a custom property for manual reconstruction. Teams managing multi-branch organizations from Opal will need a post-migration grouping strategy.

  • HubSpot API caps search results at 10,000 records per query

    HubSpot's search API returns a maximum of 10,000 results per query and paginates via an 'after' cursor parameter. Opal CRM datasets exceeding 10,000 contacts or 10,000 companies require multi-page batch extraction with cursor-based pagination. We handle this automatically using HubSpot's documented paging model, but teams with very large Opal datasets should anticipate batched migration runs with per-batch validation rather than a single bulk operation. Each batch undergoes field-population checks and association verification before the next batch begins.

  • HubSpot lifecycle_stage is one-directional and stateful — historical stage history is lost

    HubSpot's lifecycle_stage property on a Contact record only holds the current state — it does not maintain a timestamped history of stage transitions. Opal may track lead status changes over time. When records migrate, only the final Opal lead status value transfers to HubSpot as the initial lifecycle_stage. Stage-transition history cannot be reconstructed in HubSpot's native model. We preserve the original stage history as a custom audit property, but the HubSpot timeline will not reflect earlier transitions.

  • Duplicate records from Opal transfer verbatim — deduplication requires pre-migration cleanup

    HubSpot enforces uniqueness on the email property — duplicate contacts with the same email address are merged on import. Opal CRM does not enforce email uniqueness, so duplicate contact records are common in older Opal instances. We detect potential duplicates during the mapping phase and flag them before the migration runs, but the decision to merge or keep duplicates as separate records in HubSpot must be made by your team. FlitStack provides a duplicate report before the migration executes.

  • Opal quotation approval workflow status has no HubSpot equivalent

    Opal CRM routes quotations through a workflow approval process with statuses like 'Draft', 'Submitted', 'Approved', or 'Rejected'. HubSpot Deals have no native approval workflow status property that captures these workflow states. Opal quotation status is preserved as a custom property on the migrated Deal record, but the workflow itself — including routing rules, approver assignments, and automated triggers — cannot be migrated to HubSpot's native data model. Teams requiring quotation approval routing must rebuild these workflows using HubSpot's automation tools such as Workflows, Sequences, or custom integrations with third-party approval platforms.

Migration approach

Six steps for a successful Opal CRM to HubSpot data migration

  1. Extract Opal CRM data via API with batched pagination

    FlitStack connects to Opal CRM's API using scoped read access. We extract all standard objects — Leads, Contacts, Companies, Deals, Quotations, Activities — plus custom fields, owner records, and attachments. Extraction runs in batched pages to handle Opal datasets of any size, with checkpointing so large migrations resume cleanly if interrupted. We capture create dates, last-modified timestamps, and record ownership from Opal before any transformation begins.

  2. Build HubSpot schema: custom properties, pipelines, and products

    Before data lands, we create all required HubSpot custom properties — matching Opal's field names, data types, and pick-list values. Each Opal pipeline is replicated as a HubSpot pipeline with matching stage names and probabilities. For quotation data, we create the Product records needed for Line Item mapping. We deliver a pre-migration schema checklist so your HubSpot admin can review custom property labels and pipeline configuration before the migration runs.

  3. Resolve owners by email and pre-validate associations

    Opal owner records are matched to HubSpot users by email address. Any Opal owner without a corresponding HubSpot user is flagged with a resolution report — your team either creates the HubSpot user or assigns those records to a fallback owner before migration. We also pre-validate company-contact associations and deal-contact roles so foreign-key resolution fails predictably rather than silently dropping records.

  4. Run a sample migration with field-level diff across all object types

    A representative sample — typically 100–300 records spanning leads, contacts, companies, deals, quotation lines, and activities — migrates first as a dry run. We generate a field-level diff showing source values, destination values, and any transformation applied for each field on each record type. You verify quotation-to-line-item mapping, owner resolution accuracy, pipeline stage assignment correctness, and lifecycle stage assignment logic before the full migration run commits any records to HubSpot.

  5. Execute full migration with delta-pickup and post-run validation

    Full data migration runs in dependency order: Companies first (parent hierarchy resolved), then Contacts and Leads, then Deals with Line Items resolved to Products, then Activities. A delta-pickup window of 24–48 hours captures any records created or modified in Opal during cutover. Post-run validation compares record counts, field population rates, and association completeness against the Opal source. An audit log is generated and a one-click rollback is available if reconciliation finds unexpected discrepancies.

Platform deep dives

Context on both ends of the pair

Opal CRM logo

Opal CRM

Source

Strengths

  • Free tier for up to two users provides a genuine no-cost entry point for very small teams.
  • Native Tour Planning module handles field-sales route and expense tracking without third-party add-ons.
  • Quotation workflow with approval steps is included at Basic tier pricing.
  • Lead capture from multiple channels (forms, uploads, manual) is built into the core workflow.
  • Affordable fixed monthly pricing at $220 and $350 for two tiers is predictable for small-business budgets.

Weaknesses

  • No publicly documented REST API or bulk export mechanism, making programmatic data extraction uncertain.
  • Small review sample on G2 (2 reviews) and limited third-party coverage makes platform reliability hard to verify independently.
  • Integration approach described as 'two lines of code' is vague and suggests limited connector ecosystem.
  • Pricing is per-organization not per-user, which may become cost-inefficient as team size grows.
  • No public roadmap, community forum, or status page to assess long-term platform health.
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 Opal 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

    Opal CRM: Not publicly documented..

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Opal CRM to HubSpot migrations complete in 48–72 hours of clock time for datasets under 50,000 records. Larger Opal instances with 500,000+ records or quotation-heavy datasets requiring product creation extend to 5–10 days. The longest step is typically the quotation-to-product-and-line-item transformation, which requires each Opal quotation line to resolve to or create a HubSpot Product before the Line Item can link correctly.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Opal 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