CRM migration
Field-level mapping, validation, and rollback between Opal CRM and HubSpot. We move data and schema; workflows are rebuilt natively in HubSpot.
Opal CRM
Source
HubSpot
Destination
Compatibility
12 of 12
objects map 1:1 between Opal CRM and HubSpot.
Complexity
BStandard
Timeline
48–72 hours
Overview
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.
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 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
HubSpot
Contact
1:1Opal 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
HubSpot
Contact
1:1Opal 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
HubSpot
Company
1:1Opal 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
HubSpot
Deal
1:1Opal 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
HubSpot
Product + Deal Line Item
1:1Opal 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
HubSpot
Engagement: Call
1:1Opal 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
HubSpot
Engagement: Email
1:1Opal 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
HubSpot
Engagement: Meeting
1:1Opal 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
HubSpot
Note
1:1Opal 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
HubSpot
User
1:1Opal 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)
HubSpot
Custom Property
1:1Opal 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
HubSpot
File
1:1Opal 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.
| Opal CRM | HubSpot | Compatibility | |
|---|---|---|---|
| Lead | Contact1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Deal1:1 | Fully supported | |
| Quotation | Product + Deal Line Item1:1 | Fully supported | |
| Activity: Call | Engagement: Call1:1 | Fully supported | |
| Activity: Email | Engagement: Email1:1 | Fully supported | |
| Activity: Meeting | Engagement: Meeting1:1 | Fully supported | |
| Activity: Note | Note1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Custom Field (any object) | Custom Property1:1 | Fully supported | |
| Attachment | File1:1 | 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.
Opal CRM gotchas
No publicly documented API for bulk data export
Tour Plan expense data may flatten during export
Quotation workflow state is not a standard CRM field
Free tier limits and trial expiry not visible in export
HubSpot gotchas
Marketing Contacts billing model is migration-critical
Feature tier gating is not visible until onboarding
Mandatory onboarding fees inflate year-one cost
HubSpot CSV importer cannot migrate engagements or attachments
Custom objects require Enterprise and a pre-existing schema
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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
Opal CRM
Source
Strengths
Weaknesses
HubSpot
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Opal CRM and HubSpot.
Object compatibility
1 of 8 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
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Opal CRM: Not publicly documented..
Data volume sensitivity
Opal CRM 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 Opal CRM to HubSpot migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Opal CRM
Other ways to arrive at HubSpot
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.