Skip to content
Solutions Blueprint

Custom object model and dedupe on HubSpot CRM

Hero featured image

Contact and Deal alone couldn't describe a childcare business built around physical locations and individually enrolled children. We added two custom objects, Campus and Children, each associated back to the standard CRM. A Children record ties to the family's Contact and to the Campus the child attends, and a Campus record carries its own pipeline views and tickets. Configuring views and permissions across all four objects was an ongoing, ad hoc stream of requests, answered and logged daily rather than a single rollout.

Executive Summary

context-header-icon

Context

The object model briefly carried data nobody could trust. An earlier CSV import had duplicated most of both new objects' records, and the duplicates had to be identified and removed before the deal pipelines and tickets already keyed to Campus could rely on that data.

what-we-built-header-icon

What We Built

We built two custom HubSpot objects, Campus for each physical location and Children for each enrolled child, both associated to the standard Contact and Deal records. Alongside the build, we configured and maintained Contact, Deal and Ticket views and permissions on an ongoing basis, then cleaned up the duplicate Campus and Children records left behind by an earlier CSV import.

tech-stack-header-icon

Tech Stack

  • HubSpot CRM
  • Campus custom object
  • Children custom object
  • Contact and Deal objects
  • CSV import
  • record deduplication

Not a fit if a business already fits inside the standard Contact and Deal model. A second location object earns its place only when the native CRM has nowhere to put that structure. It also assumes the feeding CSV import is trustworthy from day one. Here it wasn't, and matching happened after the fact rather than at import time.

the-challenge-header-icon

The Challenge

A childcare network with dozens of physical locations and thousands of enrolled children had nowhere in a standard Contact and Deal model to represent either one as its own record. Locations needed their own pipeline views and ticket routing. Children needed a record independent of the parent Contact filling out a form.

On top of that gap, an earlier CSV import had duplicated 5,911 of 6,001 Campus records and 5,913 of 8,990 Children records. Only 90 Campus and 3,077 Children records were left that the import hadn't touched.

our-approach-header-icon

Our Approach

We built Campus and Children as custom objects associated to Contact and Deal, because a property on Contact can't carry its own pipeline views or tickets. A Children record ties to the family's Contact and to the Campus the child attends. A Campus record carries the pipeline views and tickets scoped to that location.

We configured and adjusted views and permissions continuously as requests came in, rather than fixing them once at launch.

Once we found the duplication, we isolated the 5,911 and 5,913 duplicate rows in each object and removed them. That left the 90 Campus and 3,077 Children records the import had left correct. How one duplicate row was matched to another, by field or by tool, wasn't recorded.

impact-header-icon

Impact

check-icon

Campus and Children exist as their own CRM records

A location and an enrolled child each hold a dedicated record, associated to the standard Contact and Deal objects rather than folded into either one, so a location's pipeline views and a child's history are each queryable on their own terms.

check-icon

A child's record travels with a Campus and a Contact

Every Children record associates to its Campus and to the family's Contact, the same association other workflows on this account already pull from when they copy a ticket's Campus from its contact.

check-icon

Campus records dropped from 6,001 to the 90 that were not duplicates

Of the object's 6,001 Campus records, 5,911 were duplicates from an earlier CSV import and were removed, leaving the 90 that the import had never touched.

check-icon

Children records dropped from 8,990 to the 3,077 that were not duplicates

Of the object's 8,990 Children records, 5,913 were duplicates from the same import and were removed, leaving the 3,077 that were already correct. That restored both objects to a state the running deal, ticket and view work could rely on.

Technical Blueprint
1

Campus and Children were built as HubSpot custom objects rather than properties on Contact or Deal. A Children record associates to the family's Contact and to the Campus the child attends. A Campus record carries the pipeline views and tickets scoped to that location.

2

Contact, Deal and Ticket views and their permissions were built and adjusted continuously rather than set once at launch, with requests answered and logged daily across the engagement.

3

We isolated the rows created by an earlier CSV import. 5,911 of 6,001 Campus records and 5,913 of 8,990 Children records were duplicates, and we removed them.

4

Ninety Campus and 3,077 Children records were not part of the duplication and remained in place, the base the running deal pipeline and ticket work relied on.

Campus and Children custom HubSpot objects associated to Contact and Deal, with duplicate counts removed after a CSV import.

A CSV import creates Campus and Children records in HubSpot, alongside the standard Contact and Deal objects. Each Children record associates to a Campus and to a Contact, and each Campus scopes its own pipelines. A duplicate check flagged 5,911 of 6,001 Campus rows and 5,913 of 8,990 Children rows and removed them, which left 90 Campus and 3,077 Children records. Views and permissions across all four objects were configured on an ongoing basis.

FAQ

Why did the CSV import duplicate so much of the Campus and Children data?

The material reviewed gives the volumes duplicated, 5,911 of 6,001 Campus records and 5,913 of 8,990 Children records, but not the matching logic or tool used to identify one duplicate row against another.

Why build Campus and Children as separate objects instead of properties on Contact?

A property on Contact can't carry its own pipeline views or its own tickets. Campus and Children needed to stand as their own associated records so a location and a child could each be viewed and permissioned on its own terms.

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.