All white papers
RevOps HQ Case Study · No. C1 Revenue Systems Architecture

Migrating a wealth-advisory firm off Redtail to HubSpot

Moving an advisory firm off Redtail wasn’t a CRM swap. It was a platform migration — the data model, the compliance processes, and a decade of history — rebuilt so households, relationships, and the audit trail survived.

Abstract

A wealth-advisory firm wanted to standardize on HubSpot. Treating it as a contact export would have failed on day one, because an advisory firm’s value doesn’t live in contacts — it lives in households, investment accounts, a dense web of relationships, and a compliance process that has to be provable. This is a first-principles account of a platform migration: mapping the source data model to HubSpot objects, finding what has no native home (accounts and households) and what that forces, parsing a decade of encoded fields into typed properties, rebuilding dozens of compliance workflows as team-assignable ticket pipelines, and running the load so it was safe to run twice.

1 This was a platform migration, not a CRM swap

The instinct on a CRM change is to export contacts, import contacts, and treat the rest as configuration. For an advisory firm that framing collapses immediately. The unit of value isn’t the contact — it’s the household, the account, the relationships between people, and the process that moves money under supervision. Migrating the firm meant migrating all four: the data model, the history, the workflows, and the controls.

So the work began as an inventory of the source model, not an export. Every distinct kind of thing — and every process attached to it — was written down and asked one question: what represents this in HubSpot? The answers sorted into three buckets: has a native home, needs modeling, or has no home at all. The third bucket is the engagement.

The first principle

Migrate the model and the process, then the records follow. A platform is objects, the properties on them, the associations between them, and the workflows that operate on them. Move those deliberately; move records first and you spend the next year rebuilding a platform by hand under a live team.

2 The object-model gap

Redtail, like most vertical CRMs, keeps everyone in a single “contact” table, separated by a type flag: individuals, businesses, trusts, and associations all live together. HubSpot doesn’t work that way — people are Contacts, organizations are Companies, and a trust is neither cleanly. The migration has to shard one table into several objects and keep an Entity-Type property so nothing blurs in the split.

Two source entities have no native HubSpot object, and they are the two that matter most to an advisor: the investment account and the household — the reporting and billing units the firm actually thinks in. You can approximate accounts as deals and households as companies on a lower tier, and it demos fine. It breaks the moment relationships need labels.

ONE SOURCE TABLE → A REAL OBJECT MODEL Redtail one “contact” table, split by a type flag • People • Businesses • Trusts • Associations • Accounts (in fields) • Households (implied) Contacts — people Companies — businesses, trusts (Entity Type) Deals — opportunities Account — custom object ★ Household — custom object ★ ★ No native object → custom objects → this is the line that forces Enterprise, not Pro.
Figure 1. The migration shards one source table into several objects. Accounts and households have no native home; modeling them as custom objects is what decides the subscription tier.

3 The association graph is the firm

A firm like this carries a dense web of relationships, and the web is the business: spouse to spouse, parent to child, trustee and beneficiary to a trust, owner and joint owner to an account, head of household to member, attorney and CPA to a client. Dozens of distinct relationship types, many on the same pair of records at once.

HubSpot can represent this — with custom association labels and multiple labeled associations per record pair. Both are Enterprise features. On Professional they import unlabeled, every relationship flattens to a generic link, and the graph that makes the firm legible collapses into noise. It is the most consequential scoping decision on the project, and it is invisible in a demo.

The Enterprise line

Custom objects (Account, Household) and labeled multi-associations are what separate a real advisory platform from a toy CRM. A proposal that quotes Professional for a householded book has mispriced the job — the tier is a data-model consequence, not a budget preference.

4 A decade of fields, encoded as text

Because the source lacked dedicated fields for many attributes, the firm did what every team does: crammed them into keyword strings and user-defined fields — client tier, do-not-solicit flags, plan types, custodians, prospect stage, all as text. Carrying them verbatim would move the mess across; the value is in parsing them apart into typed properties that workflows and reports can use.

The build defined a couple hundred properties grouped by business process — tax, billing, compliance, retirement plans, communication — so a record stays navigable instead of becoming a wall of fields. Keyword clusters became single- and multi-select properties; fee blobs split into an amount and a date; legacy duplicates were archived, not deleted, so nothing was destroyed on the way in.

5 Compliance is a process you rebuild, not a field

The heaviest part of the platform wasn’t data — it was process. The firm ran 60+ compliance and service workflows that had always lived on the advisors’ shoulders: money movement, account maintenance, document collection, review cadences. Each one was reviewed, rationalized, and rebuilt in HubSpot as a ticket pipeline with stage requirements and conditional routing — and, deliberately, moved off the advisors onto a customer-service team so the people who close business stop doing operational paperwork.

The requirement that shaped the build: work had to be assignable to a team, not a person. A request enters a queue and whoever is available picks it up — no bottleneck on one owner’s inbox, no dropped item when someone is out. Supervisory controls are enforced by the pipeline itself: a money movement above a set threshold to a third party cannot advance until a principal approves it, and the approval is a recorded step, not a remembered one.

ADVISER WORKFLOWS → TEAM-ASSIGNED TICKET PIPELINES 60+ workflows on the advisors: money movement, maintenance, document collection, review cadences Ticket pipeline — stages + required fields + approval gates Move-money over a threshold → blocked until a principal approves (a recorded step). Assigned to a TEAM, not a person a service queue — whoever is free picks it up
Figure 2. Dozens of adviser-run compliance workflows were rationalized and rebuilt as ticket pipelines with approval gates, assigned to a customer-service team queue so work is picked up by whoever is available — not bottlenecked on one owner.

6 A migration you can run twice

At this scale the load has to be idempotent — safe to run again without doubling anything — because you will run it again. The mechanism is worth stealing: give every record a unique external-ID property carrying its source identifier, and match on it. A note stamped with its source ID can’t import twice; an activity stamped with its source ID maps to a single task no matter how many times the load runs.

Because the standard export silently dropped columns, extraction was rebuilt against the source API with that ID as the key of record. Every write was logged with counts and a verification step, and a reconciliation pass compared HubSpot against the source field by field — with explicit logic never to recreate a record that already existed. That is how a decade of history — thousands of households and accounts, a six-figure volume of notes, a dense web of labeled relationships — lands once, correctly, and stays that way.

Transferable pattern

A unique external-ID property per object is the cheapest thing you can build and the one that makes a large migration safe. It turns imports into upserts, makes re-runs free, and gives you a real reconciliation key. Build it before you move a single record.

7 What changed

The firm now runs on a platform that matches how it works. Households and accounts are first-class records; a decade of relationships carries its real labels; and the full client history is intact and searchable in one place instead of split across a legacy tool and a stack of spreadsheets. Compliance and service work moved off the advisors into team-assigned pipelines, so the people who advise clients stopped doing operational paperwork and the firm can prove its controls instead of asserting them.

Details are generalized and figures are representative of the engagement; specifics vary by firm.

8 The model, generalized

Strip away the vertical and the exercise is reusable for any platform migration into HubSpot:

  • Inventory the source model and its processes first — objects, properties, associations, and the workflows on them — before any export.
  • Find what has no native object. That is where custom objects go, and it usually decides the tier.
  • Treat labeled relationships as data, not garnish. If association labels matter, that is an Enterprise decision.
  • Rebuild process as team-assignable pipelines with approval gates — queues, not single owners.
  • Make the load idempotent with external IDs before the first record moves.
Related studies

The same “model before software” discipline runs through identity resolution at an integration boundary where a native sync multiplies records, representing a dealer channel where the buyer isn’t the user, and modeling project-based revenue when the deal isn’t the work.

Read the full 8-page paper as a formatted PDF.