Skip to content
Solutions Blueprint

Parent-child company model unifying two disconnected legacy systems

Hero featured image

A workforce-management and payroll software platform kept its own customer records split across an internal platform and Monday.com, with neither source mapping cleanly onto a single HubSpot company. We built a parent-company and child-company structure instead, plus several properties that didn't exist anywhere in HubSpot before this engagement.

Executive Summary

context-header-icon

Context

The company's own customer base lived in two systems that had never shared a schema, so every account carried a different shape depending on its source. A standard Company object could hold one of those shapes, never both.

what-we-built-header-icon

What We Built

We built a parent-company and child-company structure and several net-new custom properties, replacing a flat field-to-field migration that had nowhere to put data either legacy source held and HubSpot didn't.

tech-stack-header-icon

Tech Stack

  • HubSpot Sales Hub
  • HubSpot Service Hub
  • custom company properties
  • Monday.com

Not a fit if your customers are single, flat organisations rather than businesses whose own employees and admins need their own records. A standard Company object already covers that case. It also assumes someone can produce a complete field-level inventory across every legacy source before mapping starts, since a partial list leaves custom properties to be discovered mid-build rather than planned for upfront.

the-challenge-header-icon

The Challenge

Before this build, the company's own customer records lived in an internal platform and in Monday.com, and neither system's fields lined up with HubSpot's native Company and Contact objects. A straight field mapping would have forced every customer into one flat company record. That left no separate place for the employees a customer uploaded, and no way to flag which of them held admin rights.

Several fields tracked by both legacy systems had no matching HubSpot property at all. They included a Customer Success Manager owner, a go-live date, a renewal date, a contract signatory and a contract-status flag. So we had to decide what kind of record each piece of data belonged on before a single field got mapped.

our-approach-header-icon

Our Approach

We first considered a single flat Company record per customer, matching legacy fields one to one. That shape had no room for an employee layer: contacts and account details would share one record, with no property to flag which contacts could act as an administrator.

Instead, we built a parent-company and child-company structure. A customer's employee list uploads as a CSV, and each row lands as a non-marketing contact on a child-company record associated to that customer's parent-company record. Admin rights get one dedicated role field on the parent-company record rather than being copied onto every child company, so the system checks a single place to know who can act for an account.

Building this shape meant leaving five fields unmapped rather than forcing them onto an existing property that meant something else. Customer Success Manager, Go Live Date, Renewal, Contract Signatory and the contract-status flag each became a new custom property instead.

impact-header-icon

Impact

check-icon

The client's own customers get a two-tier record instead of one flat account

Each customer now has a parent-company record for its own top-level account and one or more child-company records beneath it, so a customer with its own structure has somewhere to put that structure instead of one flat Company row.

check-icon

Employee lists import without mixing employee and account-level data

A CSV-based employee list upload adds each person as a non-marketing contact on the matching child-company record, so importing a customer's staff no longer means writing contact data onto the record that holds the account's own commercial details.

check-icon

Admin rights sit in one property instead of being checked record by record

A dedicated role field marks admin users at the parent-company record rather than on each child company beneath it, so the system checks one property to know who can act for a customer instead of hunting across every associated record.

check-icon

Fields with no native HubSpot equivalent stopped falling out of the mapping

Customer Success Manager, Go Live Date, Renewal, Contract Signatory, and a contract-status flag each became a new custom property instead of being approximated with an existing field, because neither legacy source had a HubSpot equivalent to map onto.

Technical Blueprint
1

A customer's own top-level account is a parent-company record, and its branches or sub-accounts are child-company records associated to it. The split exists so account-level data and the employees working inside that account never have to share one record.

2

A customer's employee list uploads as a CSV, and each row lands as a non-marketing contact on the matching child-company record. Non-marketing status keeps these imported employees out of marketing sends while still tying each one to the correct account.

3

A dedicated property flags which contacts hold admin rights, set once on the parent-company record rather than repeated across every child company beneath it. One property answers who can act for an account, regardless of how many child records sit under it.

4

Customer Success Manager, Go Live Date, Renewal, Contract Signatory, and a contract-status flag were built as new company properties because neither the client's internal platform nor Monday.com had a HubSpot field that already meant the same thing.

Parent and child HubSpot company records consolidating two legacy customer-data systems, with an admin-role property on the parent.

Customer data from the client's internal platform and from Monday.com maps into a HubSpot parent-company record, which holds the top-level account. A customer's employee list uploads as a CSV, and each row lands as a non-marketing contact on a child-company record associated to that parent. The admin-role property is set on the parent only, so one field answers who can act for the account.

FAQ

Why build a parent-company and child-company structure instead of one Company record per customer?

A flat Company object had no way to hold a customer's account-level details separately from the employees working inside it. Splitting the record into a parent company for the top-level account and one or more child companies beneath it gives each layer a home of its own.

What happened to the legacy fields that had no matching HubSpot property?

Fields such as Customer Success Manager, Go Live Date, Renewal, Contract Signatory, and a contract-status flag became new custom properties rather than being mapped onto an existing field that meant something else. That kept each field's original meaning intact.

Continue reading

Hero featured image
209049082793

Luxury yacht manufacturer: CRM governance, 16.9% MQL-to-SQL

Hero featured image
209049052783

$500M+ telecom provider: one CPQ for MSP and ISP catalogs

Hero featured image
209049052785

Health insurance web broker: NPN hierarchies in HubSpot

Hero featured image
209049052787

$50M+ telehealth provider: HIPAA-compliant clinical ERP sync

Hero featured image
209049052787

$50M+ telehealth provider: attribution recovered via API fix

Hero featured image
209049052786

Environmental IoT provider: partner directory routes leads

Hero featured image
209053190299

$100M+ real estate tech firm: automated KYC gates and SSO

Hero featured image
209049052785

$1B+ financial data provider: Pardot and Eloqua into HubSpot

Hero featured image
209053177394

Global abrasives producer: 40+ sites from Kentico to HubSpot

Hero featured image
209049082792

Global abrasives producer: 13 dashboards consolidated to one

Hero featured image
209049052787

Medical device maker: five regional domains into one CMS

Hero featured image
209049052787

Medical device maker: automated clinical triage in HubSpot

Hero featured image
209049052787

Multi-site dental group: lifecycle logic rebuilt, true ROI

Hero featured image
209049052787

Multi-site dental group: assessment tool for lead quality

Hero featured image
209049082794

K-12 Catholic diocese: 80 schools on one HubDB lead system

Hero featured image
209049052787

Cell therapy biotech: HubSpot CMS migration, 92 speed score

Hero featured image
209049052787

Cell therapy biotech: 40-hour enablement and lead routing

Hero featured image
209049082794

Wellness training provider: 925k records moved to HubSpot

Hero featured image
209049052786

Cybersecurity trainer: 595 workflows audited for debt

Hero featured image
209049052785

Tier 1 auto F&I provider: 14,000% CTA lift, 21% PVR lift

Hero featured image
209049052785

Mexican retail bank: Infobip to Intercom via Apache NiFi

Hero featured image
209049052786

Global streaming platform: ETL middleware feeds Customer.io

Hero featured image
209049052786

Global streaming platform: usage milestones trigger upsell

Hero featured image
209049052786

Cloud and edge provider: Intercom to Salesforce via MuleSoft

Hero featured image
209049052785

$50M+ FinTech SaaS provider: advisor onboarding 30% faster

Hero featured image
209049082792

Mining autonomy provider: global consent and data governance

Hero featured image
209053177394

Industrial IoT division: compliant list purge, leads 3 to 62

Hero featured image
209053177394

Industrial IoT division: 25,000 records merged, one portal

Hero featured image
209049052786

Logistics SaaS portfolio: Salesforce sync rebuilt on Tray.io

Hero featured image
209049052786

Logistics SaaS portfolio: brands consolidated into HubSpot

footerCTA footerCTA-mobile
Spice up your inbox
Sign up for our newsletter
Don't worry - we only average, like, two emojis per subject line.