Tech Stack Tracking: Custom Objects Beat Properties
/ 6 min read
Table of Contents
Sales teams selling into enterprise accounts need to know what technology their prospects already use. A company running Salesforce CRM, Marketo automation, and Snowflake data warehouse represents a very different conversation than one using spreadsheets and email.
How do you model this in HubSpot?
The instinct is to create properties: “CRM System”, “Marketing Platform”, “Data Warehouse”. Simple, fast, done.
But properties have limitations that become painful at scale. This article walks through when to use properties versus custom objects for technology ecosystem tracking, with implementation patterns for each.
The Property Approach
Implementation
Create dropdown properties on the Company object:
| Property | Options |
|---|---|
| CRM System | Salesforce, HubSpot, Dynamics, Zoho, None, Other |
| Marketing Platform | Marketo, HubSpot, Eloqua, Pardot, None, Other |
| Data Warehouse | Snowflake, Databricks, BigQuery, Redshift, None, Other |
| ERP System | SAP, NetSuite, Sage, None, Other |
Advantages
- Simple to implement: Create properties in minutes
- Easy for reps to update: Standard dropdowns in the UI
- Works with list segmentation: Filter companies by CRM = Salesforce
- Native reporting: Build reports grouped by technology
Limitations
Limited to one value per category: A company using both Salesforce and HubSpot can only select one option. Your property becomes inaccurate or requires workarounds.
Static option lists: Adding a new technology means updating every portal manually. No centralised management.
No metadata: You can’t track when the technology was adopted, who at the company owns it, or whether it’s their primary or secondary system.
Scales poorly: 20 technology categories means 20 properties cluttering your object.
No reusability: If Technology X appears in 500 company records and its name changes, you have 500 records to update.
The Custom Object Approach
Implementation
Create a Technology Vendor custom object:
| Property | Type |
|---|---|
| Vendor Name | Text |
| Category | Dropdown (CRM, Marketing, Data, ERP, etc.) |
| Website | URL |
| Notes | Multi-line text |
Associate it with Companies using a labelled association:
- “Uses” (standard association)
- “Primary” vs “Secondary” (custom labels)
- “Evaluating” (custom label)
- “Former” (custom label)
Advantages
Many-to-many relationships: A company can be associated with unlimited technology vendors. Multiple CRMs? No problem.
Single source of truth: Update “Salesforce” once, and it’s updated for all associated companies.
Rich metadata via labels: Distinguish between “Primary CRM” and “Secondary CRM” using association labels.
Clean data model: Company records stay clean; technology data lives in its own object.
Better reporting: Build reports that answer “which companies use both Salesforce and Marketo?”
Limitations
Requires Enterprise Hub: Custom objects are an Enterprise-tier feature.
More complex UI: Reps must navigate to the associated object to add technologies.
Import complexity: Importing technology associations requires understanding HubSpot’s import structure.
Decision Framework
Use Properties When:
- Single value per category: Each company truly only uses one CRM, one ERP, etc.
- Small, stable list: Fewer than 10 options that rarely change
- No metadata needed: You don’t need to track adoption dates or status
- Simple segmentation: Your use case is basic list filtering
- Free/Starter/Professional Hub: Custom objects aren’t available
Use Custom Objects When:
- Multiple technologies per category: Companies commonly use more than one
- Technology list evolves: New tools emerge; you need centralised management
- Relationship context matters: You need to know if it’s primary, secondary, or being evaluated
- Reporting complexity: You need to answer questions like “show me companies using Salesforce AND Snowflake”
- Enterprise Hub available: You have access to custom objects
Hybrid Approach
For teams without Enterprise but needing more than basic properties:
Multi-Select Properties
Create multi-select dropdown properties allowing multiple selections:
| Property | Type |
|---|---|
| CRM Systems (Multi) | Multi-checkbox: Salesforce, HubSpot, Dynamics… |
| Marketing Platforms (Multi) | Multi-checkbox: Marketo, HubSpot, Eloqua… |
Advantage: Allows multiple selections Limitation: Still no metadata, harder to report on
Concatenated Text Fields
Store technologies as comma-separated text:
| Property | Value |
|---|---|
| Technology Stack | Salesforce, Marketo, Snowflake, AWS |
Advantage: Unlimited entries Limitation: No standardisation, reporting is difficult, typos create duplicates
Implementation: Custom Object Pattern
Step 1: Create the Object
In Settings → Objects → Custom Objects:
| Setting | Value |
|---|---|
| Object Name | Technology Vendor |
| Singular | Technology Vendor |
| Plural | Technology Vendors |
| Primary Display Property | Vendor Name |
Step 2: Create Object Properties
| Property | Internal Name | Type | Required |
|---|---|---|---|
| Vendor Name | vendor_name | Single-line text | Yes |
| Category | category | Dropdown | Yes |
| Website | website | URL | No |
| Description | description | Multi-line text | No |
| Logo URL | logo_url | URL | No |
Category options:
- CRM
- Marketing Automation
- Data Warehouse
- Business Intelligence
- ERP / Accounting
- Customer Success
- Help Desk
- Other
Step 3: Create Association Labels
Navigate to Settings → Objects → Technology Vendor → Associations → Company:
| Label | Inverse Label |
|---|---|
| Uses | Used By |
| Primary | Primary User |
| Secondary | Secondary User |
| Evaluating | Being Evaluated By |
| Former | Former User |
Step 4: Pre-Populate Vendors
Create records for common technologies:
const vendors = [ { name: 'Salesforce', category: 'CRM', website: 'https://salesforce.com' }, { name: 'HubSpot', category: 'CRM', website: 'https://hubspot.com' }, { name: 'Microsoft Dynamics', category: 'CRM', website: 'https://dynamics.microsoft.com' }, { name: 'Marketo', category: 'Marketing Automation', website: 'https://marketo.com' }, { name: 'Snowflake', category: 'Data Warehouse', website: 'https://snowflake.com' }, // ... etc];Bulk import via CSV or create manually.
Step 5: Configure Company Record Layout
In Settings → Objects → Companies → Record Customisation:
Add a card for Technology Vendors showing:
- Associated vendor name
- Category
- Association label
Reps can now see at a glance what technologies each company uses.
Reporting Patterns
Companies by Technology Category
Report type: Companies Group by: Associated Technology Vendor → Category Measure: Count of companies
Technology Adoption Trends
Report type: Custom Object (Technology Vendor) Filter: Association label = “Evaluating” Group by: Category Measure: Count of associated companies
Competitive Intelligence
Report type: Companies Filter: Associated Technology Vendor → Vendor Name = “[Competitor]” Measure: Count of companies, Sum of company revenue
Cross-Technology Analysis
Use custom report builder:
- Show companies where Associated Vendor includes “Salesforce” AND Associated Vendor includes “Snowflake”
Workflow Automation
Tag Companies by Tech Profile
When a technology association is added, update a calculated property:
Trigger: Technology Vendor association created (Company-based workflow)Condition: Associated Vendor Category = "CRM"Action: Set "Has CRM" property = YesCompetitive Alert
When a prospect adopts a competitor’s technology:
Trigger: Technology Vendor association createdCondition: Vendor Name = "Competitor X"Action: Send internal notification to account ownerTech Stack Score
Calculate a score based on technology sophistication:
Trigger: Technology Vendor association changesActions: - Count associated vendors - Set "Tech Stack Score" = count * 10 - If "Data Warehouse" category exists, add 20 pointsData Enrichment Integration
If you use data providers like ZoomInfo, Clearbit, or BuiltWith:
- Enrich to custom properties first: Let the provider populate multi-select properties
- Workflow to create associations: Parse the property values and create/associate Technology Vendor records
// Custom coded action to parse enriched dataconst techStack = event.inputFields['enriched_technologies']; // "Salesforce;Marketo;Snowflake"const technologies = techStack.split(';');
for (const tech of technologies) { // Look up or create Technology Vendor record // Create association to company}Key Takeaways
- Properties work for simple, single-value tracking - but limit scalability and reporting
- Custom objects enable many-to-many relationships - essential for comprehensive tech stack tracking
- Association labels add context - distinguish primary, secondary, evaluating, former
- Pre-populate vendor records - create a standardised list reps select from
- Combine with workflows - automate tagging, scoring, and competitive alerts
- Consider the hybrid approach - use properties for simple cases, objects for complex
The technology ecosystem tells a story about a company. Make sure your data model can tell that story accurately.
Need help designing custom object architectures for HubSpot? Connect with me on LinkedIn.